跳转到主要内容

wsgi_intercept会在测试中将一个WSGI应用程序安装到代替真实URI的位置。

项目描述

为测试将WSGI应用程序安装到替代真实主机的位置。

介绍

测试WSGI应用程序有时需要在一个本地主机和端口上启动服务器,然后将您的测试代码指向该地址。相反,这个库允许您拦截对任何特定主机/端口组合的调用,并将它们重定向到您的测试程序可导入的WSGI应用程序。因此,您可以避免在测试Web应用程序时启动多个进程或线程。

支持的库

wsgi_intercept 在Python 2.7、3.7及更高版本和pypy中与各种HTTP客户端一起工作。

  • urllib2

  • urllib.request

  • httplib

  • http.client

  • httplib2

  • requests

  • urllib3 (小于2.0.0,urllib3 2支持正在进行中)

它是如何工作的?

wsgi_intercept 通过用子类 wsgi_intercept.WSGI_HTTPConnection 替换 httplib.HTTPConnection 来工作。然后,该类通过模拟套接字将特定的服务器/端口组合重定向到 WSGI 应用程序。如果未为请求的主机和端口注册拦截,则将这些请求传递给标准处理程序。

使用拦截的最简单方法是导入相应的 ~wsgi_intercept.interceptor.Interceptor 子类,并将其用作与子类相关的库中使用的 Web 请求的上下文管理器。例如

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 类可能更容易使用。

安装

pip install -U wsgi_intercept

被拦截的包

不幸的是,每个 HTTP 客户端库都有自己的特定机制来执行 HTTP 调用,因此需要单独的实现。目前,有 Python 2 和 3 的 httplib2urllib3(小于 2.0.0)和 requests 的实现,以及 Python 2 的 urllib2httplib,以及 Python 3 的 urllib.requesthttp.client

如果您正在使用 Python 2 并需要支持不同的 HTTP 客户端,则需要 wsgi_intercept<0.6 版本。早期版本包括对 webtestwebunitzope.testbrowser 的支持。

了解如何使用拦截的最佳方式是检查 测试。如有需要,提供更全面的文档。

历史

根据 Ian Bicking 的 “最佳 Web 测试框架” 文章,Titus Brown 为自己的 Web 测试系统 twill 创建了一个进程内的 HTTP-to-WSGI 拦截机制。由于该机制相当通用——它在 httplib 层面上工作——Titus 决定尝试将其添加到所有其他 其他 Python Web 测试框架中。

wsgi-intercept 的 Python 2 版本就是由此产生的结果。Kumar McMillan 后续接管了维护工作。

当前版本已与Python 2.7、3.5-3.11以及pypy和pypy3进行过测试。该项目由Chris Dent组装。测试和文档改进由Sasha Hart完成。

项目主页

该项目托管在GitHub上。请使用问题跟踪器提交所有错误、补丁、失败的测试等。

更多文档可在Read The Docs上找到。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

wsgi_intercept-1.13.1.tar.gz (29.3 kB 查看哈希值)

上传时间

构建分布

wsgi_intercept-1.13.1-py2.py3-none-any.whl (28.0 kB 查看哈希值)

上传时间 Python 2 Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面