wsgi_intercept安装wsgi应用程序来代替真正的uri进行测试。
wsgi-intercept的Python项目详细描述
安装一个wsgi应用程序来代替真正的主机进行测试。
简介
测试wsgi应用程序有时需要在 本地主机和端口,然后将测试代码指向该地址。 相反,这个库允许您拦截对任何特定主机/端口的调用 组合并重定向到可导入的WSGI application 你的测试程序。因此,可以避免生成多个进程或 用于测试Web应用程序的线程。
支持的库
wsgi_intercept在python 2.7中与各种http客户端一起工作, 3.4及以上,在皮比。
- urllib2
- urllib.request
- httplib
- http.client
- httplib2
- 请求
- urllib3
它是如何工作的?
wsgi_intercept通过将httplib.HTTPConnection替换为 子类,wsgi_intercept.WSGI_HTTPConnection。那么这个班 通过以下方式将特定的服务器/端口组合重定向到wsgi应用程序 模拟套接字。如果没有为主机和端口注册截获 请求时,这些请求将传递给标准处理程序。
使用截获的最简单方法是导入适当的子类 ,并将其用作 使用与 子类。例如:
import httplib2 from wsgi_intercept.interceptor import Httplib2Interceptor from mywsgiapp import app def load_app(): return app http = httplib2.Http() with Httplib2Interceptor(load_app, host='example.com', port=80) as url: response, content = http.request('%s%s' % (url, '/path')) assert response.status == 200
拦截器类也可以直接用于安装拦截器。 有关更多信息,请参阅模块文档。
旧版本要求函数add_wsgi_intercept(host, port, app_create_fn, script_name='')和remove_wsgi_intercept(host,port) 用于指定应将哪些URL重定向到哪些应用程序。 这些方法仍然可用,但是Interceptor类很可能 对于大多数用例更容易使用。
注意
app_create_fn是返回wsgi的函数对象 应用程序;script_name在wsgi中变成SCRIPT_NAME。 应用程序的环境(如果已设置)。
注意
如果在环境中设置了http_proxy或https_proxy。 这可能会对某些被截取的库造成困难。 如果正在使用请求或urllib,这些将引发异常 如果设置了其中一个变量。
注意
如果wsgi_intercept.STRICT_RESPONSE_HEADERS设置为True 然后,应用程序发送的响应头将被检查到 确保它们的类型是str本机的 python,根据pep 3333的要求。默认值是False(到 保持向后兼容性)
安装
pip install -U wsgi_intercept
截获的包
不幸的是,每个http客户端库都使用自己的特定 进行http调用的机制,因此各个实现是 需要。现在有httplib2的实现, urllib3和requests在python 2和3中,urllib2和 httplib在python 2和urllib.request和^{tt24}中$ 在python 3中。
如果您使用的是python 2并且需要对不同http的支持 客户端,需要wsgi_intercept<0.6的版本。早期版本 包括对webtest、webunit和zope.testbrowser的支持。
找出如何使用拦截的最佳方法是检查 the tests。提供更全面的文档 请求。
历史记录
根据伊恩·比金的帖子,提图斯 布朗把一张in-process HTTP-to-WSGI interception mechanism 他自己的网络测试系统,twill。因为这个装置很漂亮 generic——它在httplib级别工作——titus决定尝试添加 它包含在所有的python web测试框架中。
结果就是Python2版本的wsgi intercept。库马尔·麦克米兰 后来接手维修。
当前版本使用python 2.7、3.4、3.5、3.6和pypypy进行测试 是由Chris Dent组装的。测试和文档改进 来自Sasha Hart。