一个用于记录和回放HTTP交互的httplib注入库。
项目描述
- “我希望你们都很好,直到不再好的时候。”
– Dalton, Road-House
一个用于记录和回放HTTP交互的httplib注入库。
Dalton通过monkey-patch httplib的HTTPConnection类中的两个方法来拦截请求/响应交互,并可以根据Dalton的记录回放它们。为了简化测试,记录生成了Python代码,以方便自定义响应并允许在回放路径中添加分支。
- Monkey-patch的HTTPConnection方法
request
getresponse
目前不支持使用更详尽的方法通过HTTPConnection发送/接收请求。
注意: 这是一个第一个和早期的版本,主要是为了让我能用它与mechanize记录/回放交互。由于mechanize只使用HTTPConnection上的request/getresponse API,我没有兴趣添加对其他API的拦截。请随意分叉此项目以添加额外的功能,因为我没有计划自己添加它们(尽管我很乐意接受带有单元测试的错误修复和功能添加)。
警告: Dalton使用inspect.currentframe魔术方法来推导调用者,这可能在CPython上才能正常工作(PyPy和Jython未测试)。
示例
由于dalton monkey-patch了httplib,因此无需修改使用支持方法的库。
import dalton
dalton.inject() # monkey-patch httplib
from httplib import HTTPConnection
h = HTTPConnection('www.google.com')
# when recording, httplib capture is restricted by caller
recorder = dalton.Recorder(caller=h)
# record httplib calls in this block
with recorder.recording():
h.request('GET', '/')
resp = h.getresponse()
body = resp.read()
# save the interaction
recorder.save('google')
将在当前目录下创建一个名为 google 的文件夹,用于与 dalton 的播放功能一起使用。
播放它
import dalton
dalton.inject() # monkey-patch httplib
from httplib import HTTPConnection
h = HTTPConnection('www.google.com')
# load the player
player = dalton.Player(caller=h, playback_dir='google')
# run httplib calls against the player
with player.playing():
h.request('GET', '/')
resp = h.getresponse()
body = resp.read()
# body is now the same as it was recorded, no calls to www.google.com
# were made
- 这将生成一个名为 google 的目录,布局如下
__init__.py
step_0_response.txt
__init__.py 的内容包含以下生成的播放信息
import os
import dalton
from dalton import FileWrapper
here = os.path.abspath(os.path.dirname(__file__))
class StepNumber0(object):
recorded_request = {
'headers': {},
'url': '/',
'method': 'GET',
'body': None,
}
recorded_response = {
'headers': [('x-xss-protection', '1; mode=block'),
('transfer-encoding', 'chunked'),
( 'set-cookie',
'PREF=ID=ff; expires=Thu, 11-Apr-2013 20:19:35 GMT; path=/; domain=.google.com, NID=45=fU; expires=Wed, 12-Oct-2011 20:19:35 GMT; path=/; domain=.google.com; HttpOnly'),
('expires', '-1'),
('server', 'gws'),
('cache-control', 'private, max-age=0'),
('date', 'Tue, 12 Apr 2011 20:19:35 GMT'),
('content-type', 'text/html; charset=ISO-8859-1')],
'body': FileWrapper('step_0_response.txt', here),
'status': 200,
'reason': 'OK',
'version': 11,
}
next_step = 'None'
def handle_request(self, request):
assert dalton.request_match(request, self.recorded_request)
return (self.next_step, dalton.create_response(self.recorded_response))
该文件可以在录制后进行修改,以自定义播放、添加额外的分支等。
支持
Dalton 已被认为是功能完整的,因为项目所有者 (Ben Bangert) 没有计划进行任何额外的功能或开发,除了错误修复。错误可以在 github 上提交,应该附带测试用例以保持当前的代码覆盖率,并且应该在准备好接受到 Dalton 代码库时以拉取请求的形式提交。
项目详情
dalton-1.0.tar.gz 的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | 96f35aca8718a3e472496237488e698aa025273385375cb3ddf2d89806ba10b6 |
|
| MD5 | 660d7d1854a874cb681244e3c483aa48 |
|
| BLAKE2b-256 | 9b36b8535f2e5a354b3ae5e2c3e447f8503b7760d8c0e3859091fcc5a52fd53e |