将Hoverfly HTTP代理集成到Pytest中

pytest-hoverfly-wrapper的Python项目详细描述


Pytest气垫蝇包装

这个pytest插件允许将Hoverfly轻松集成到测试中。Hoverfly是一个代理服务器,可以拦截请求并返回自定义响应。关于Hoverfly的更多信息:https://hoverfly.io/

安装

克隆存储库,然后使用setup.py进行安装:

python setup.py install

这也会自动安装插件的依赖项。或者,通过pip安装:

^{pr2}$

安装完成后:

  1. 转到https://hoverfly.io/#download
  2. 为您的操作系统下载正确的软件包
  3. 提取hoverflyhoverctl文件,并确保它们位于您的路径中。在

使用示例

缓存对外部服务的响应

添加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

贡献

  1. 叉开(https://github.com/yourname/yourproject/fork
  2. 创建您的功能分支(git checkout -b feature/fooBar
  3. 提交更改(git commit -am 'Add some fooBar'
  4. 推到分支(git push origin feature/fooBar)在
  5. 创建新的拉取请求

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java置换相关算法   在Java中读取/打开文本文件   java为什么这段代码不适用于CodeEval?   java如何将日历转换为JSON   从txt文件中读取字符串并将其存储到java中的字符数组中   字符编码Java ResourceBundles umlauts搞砸了   java为什么hashmap会根据总大小而不是填充的存储桶调整大小   java如何将Excel单元格中的数字字符串读取为字符串(而不是数字)?   java Guava的LocalCache无法使用,为什么?   java有没有办法强制JVM在单个处理器或内核上运行   java Eclipse不安装软件   将字节转换为java字符串(可能是汉字)   Java正则表达式:提取函数名   JavaTestNG:如何从多个类中指定测试方法顺序?