用于goreplay中间件的python库
gor的Python项目详细描述
python库用于GoReplay Middleware,api与NodeJS library非常相似
安装
要安装gormw,只需:
$ pip install gor
或来源:
python setup.py install
开始
初始化基于tornado gor的中间件,并按以下方式启动:
fromgor.middlewareimportTornadoGorproxy=TornadoGor()proxy.run()
基本思想是编写回调,以响应请求、响应、重播或消息事件,其中包含请求元信息和实际的http paylod。根据需要,您可以比较、覆盖或筛选传入的请求和响应。
您可以使用on函数响应传入的事件,方法是提供回调:
defon_request(proxy,msg,**kwargs):# do anything you want with msg# msg is a GorMessage objectpassproxy=TornadoGor()proxy.on('request',on_request)proxy.run()
您可以将请求id作为on函数的附加参数提供,该函数允许您映射相关的请求和响应。下面是一个中间件示例,它检查原始和重播的响应是否具有相同的http状态代码。
# coding: utf-8importsysfromgor.middlewareimportTornadoGordefon_request(proxy,msg,**kwargs):proxy.on('response',on_response,idx=msg.id,req=msg)defon_response(proxy,msg,**kwargs):proxy.on('replay',on_replay,idx=kwargs['req'].id,req=kwargs['req'],resp=msg)defon_replay(proxy,msg,**kwargs):replay_status=proxy.http_status(msg.http)resp_status=proxy.http_status(kwargs['resp'].http)ifreplay_status!=resp_status:sys.stderr.write('replay status [%s] diffs from response status [%s]\n'%(replay_status,resp_status))else:sys.stderr.write('replay status is same as response status\n')sys.stderr.flush()if__name__=='__main__':proxy=TornadoGor()proxy.on('request',on_request)proxy.run()