将Hoverfly HTTP代理集成到Pytest中
pytest-hoverfly-wrapper的Python项目详细描述
Pytest气垫蝇包装
这个pytest
插件允许将Hoverfly轻松集成到测试中。Hoverfly是一个代理服务器,可以拦截请求并返回自定义响应。关于Hoverfly的更多信息:https://hoverfly.io/
安装
克隆存储库,然后使用setup.py
进行安装:
python setup.py install
这也会自动安装插件的依赖项。或者,通过pip
安装:
安装完成后:
- 转到https://hoverfly.io/#download
- 为您的操作系统下载正确的软件包
- 提取
hoverfly
和hoverctl
文件,并确保它们位于您的路径中。在
使用示例
缓存对外部服务的响应
添加setup_hoverfly
夹具将使运行在端口8500上的Hoverfly服务器实例正常运行。你可以用这个
作为一个代理,它保存对通过代理发出的任何请求的响应。如果测试通过,保存的响应将被转储
将在测试再次运行时使用。在
# Enable the fixture explicitly in your tests or conftest.py (not required when using setuptools entry points)frompytest_hoverfly_wrapperimportGeneratedSimulationimportrequestsimportpytest@pytest.mark.simulated(GeneratedSimulation(file="some_file.json"))deftest_something(setup_hoverfly):proxy_port=setup_hoverfly[1]proxies={"http":"http://localhost:{}".format(proxy_port),"https":"http://localhost:{}".format(proxy_port),}requests.get("https://urlwedontwanttospam.com",proxies=proxies)
第一次运行测试后,您将发现一个位于./test_data/generated/some_file.json
的文件,
包含使用代理发出的所有请求以及对它们的响应。在进行第二次测试时,
测试将加载文件并尝试将请求与文件中的列表匹配。如果找到成功的匹配,则匹配
将提供响应。否则,将向其原始目标发出请求,而目标的响应将被服务。在
完全虚假的回答
您还可以指定自己的自定义响应。在
# Enable the fixture explicitly in your tests or conftest.py (not required when using setuptools entry points)frompytest_hoverfly_wrapperimportStaticSimulationimportrequestsimportpytest@pytest.mark.simulated(StaticSimulation(files=["google_returns_404.json"]))deftest_something(setup_hoverfly):proxy_port=setup_hoverfly[1]proxies={"http":"http://localhost:{}".format(proxy_port),"https":"http://localhost:{}".format(proxy_port),}r=requests.get("http://google.com",proxies=proxies)assertr.status_code==404
完整代码在sample/
Hoverfly坠毁
偶尔,Hoverfly代理可能会在测试中途崩溃。如果发生这种情况,测试将引发HoverflyCrashException
,
这使您能够清楚地了解测试失败的原因,并且可以在测试框架中捕获测试重试的一部分
逻辑。在
日志
pytest-hoverfly-wrapper
对日志使用内置的logging
模块。要导入记录器:
importloggingfrompytest_hoverfly_wrapperimportLOGGER_NAMEhoverfly_logger=logging.getLogger(LOGGER_NAME)
然后根据需要自定义记录器。在
调试
在所有场景中,当响应是由Hoverfly而不是远程服务器发送时,该响应将具有Hoverfly-Cache-Served
收割台设置。这区分了两种类型的响应,并有助于调试您认为由Hoverfly提供响应的情况
但不是,例如Hoverfly无法匹配请求,即使你期望它匹配。在
在测试结束时,插件将创建一个network.json
文件,其中包含所有发出的请求(以及接收到的响应)的列表
在测试过程中,包括参数和标题。在
发布历史记录
- 0.1.0款
- 初次发行
- 0.1.1节
- 更新PyPi页面中的描述。在
- 0.1.2款
- 创建不存在的测试数据目录
- 0.1.3款
- 将0.1.2中的错误修复放在正确的位置并删除无关的内容插件.py代码
- 0.1.4款
- 修复损坏的域阻止功能
- 0.2.0款
- 错误修复和命令行选项将自定义参数传递到Hoverfly可执行命令
- 0.3.0款
- 公开用于访问日志的日志API
- 0.3.2款
- 修复了在
StaticSimulation
中未指定模拟文件时忽略block_domains
的错误
- 修复了在
- 0.3.3节
- 插件使用的寄存器
simulated
标记
- 插件使用的寄存器
- 0.4.0
- 在记录的模拟中从
Set-Cookie
头中剥离Expires
属性
- 在记录的模拟中从
元
所有查询请联系Veli Akiner:veli@kopernio.com
根据修改后的麻省理工学院许可证分发。有关详细信息,请参见LICENSE
。在
https://github.com/kopernio/pytest-hoverfly-wrapper
贡献
- 叉开(https://github.com/yourname/yourproject/fork)
- 创建您的功能分支(
git checkout -b feature/fooBar
) - 提交更改(
git commit -am 'Add some fooBar'
) - 推到分支(
git push origin feature/fooBar
)在 - 创建新的拉取请求
- 项目
标签: