Pytest-2.3:改进的夹具/更好的单元测试集成

pytest-2.3对fixture/funcarg管理和Python中的参数化测试进行了许多重大改进。现在,使用不同的fixture实例重新运行相同的测试变得更容易、更高效、更可预测。另外,您可以直接声明fixture的缓存“scope”,这样贯穿整个测试套件的依赖测试可以轻松地重用数据库或其他昂贵的fixture对象。最后,fixture函数(以前称为funcarg factories)可以使用其他fixture,从而实现完全模块化和可重用的fixture设计。

有关详细信息和教程样式示例,请参见:

此外,现在还支持将pytest fixtures/funcargs与unittest样式套件一起使用,请参见此处以获取示例:

此外,更多的UnitTest测试套件现在预计将与Pytest“简单地工作”。

所有更改都是向后兼容的,您应该能够继续运行与Pytest-2.2.4一起工作的测试套件和第三方插件。

如果您对pytest-2.3 fixture演进的精确推理(包括示例)感兴趣,请咨询http://pytest.org/en/stable/funcarg_compare.html

有关安装和入门的一般信息:

文档和PDF访问和往常一样:

对于那些已经知道pytest的人,更多的细节可以在下面的changelog中找到。

特别感谢Floris Bruynooghe、Alex Okrushko Carl Meyer、Ronny Pfanschmidt、Benjamin Peterson和Alex Gaynor帮助您正确整合新功能。Ronny和Floris还帮助修复了一些bug,还有更多的人通过提供bug报告得到了帮助。

玩得开心,霍尔格·克雷克尔

2.2.4和2.3.0之间的变化

  • 修复问题202-参数化测试函数的更好的自动名称

  • 修复问题139-引入@pytest.fixture,允许对Funcarg工厂进行直接范围界定和参数化。引入新的@pytest.setup标记以允许写入接受funcargs的设置函数。

  • 修复问题198-由于路径操作问题,在某些嵌套目录结构的情况下,在Windows32上找不到ConfTest设备

  • 修复问题193跳过测试函数的参数化为空参数集

  • 修复python3.3 compat,主要报告以前依赖于dict排序的位

  • 介绍按资源和参数化设置重新排序测试,该设置优先于常规的文件排序

  • 修复问题185 monkeypatching time.time不会导致pytest失败

  • 修复问题172重复调用pytest.setup-decoratored setup_模块函数

  • 修复junitxml=path构造,这样,如果测试更改了当前工作目录,并且路径是相对路径,则可以从原始的当前工作目录正确构造该路径。

  • 修复“python setup.py test”示例,以导致正确的“errno”返回

  • 修复问题165-修复断开的文档链接并提到stackoverflow以获取常见问题解答

  • 在向终端写入故障表示形式以防止整个会话崩溃时捕获Unicode问题

  • 修复xfail/skip混淆:跳过标记或强制pytest.skip现在将优先于xfail标记,因为在跳过时我们无法确定xfail/xpass状态。另请参见:http://stackoverflow.com/questions/11105828/in-py-test-when-i-explicit-skip-a-test-that-is-marked-as-xfail-how-can-i-get

  • 总是在测试运行的头部报告已安装的第三方插件

  • 修复问题160:xfail标记测试的失败设置应报告为xfail(而不是xpass)

  • 修复问题128:使用capsys/capfd时显示捕获的输出

  • 修复问题179:正确显示工厂的依赖链

  • PluginManager.Register(…)现在在插件已经注册或名称被占用时引发ValueError。

  • 修正问题159:改进https://docs.pytest.org/en/6.0.1/faq.html特别是关于“神奇”的历史,还提到了pytest django、trial和unittest集成。

  • 使request.keywords和node.keywords可写。所有子代集合节点都将看到关键字值。关键字是包含标记和其他信息的字典。

  • 修正问题178:XML二进制转义现在被包装在py.xml.raw中。

  • 修复问题176:即使我们用Python级别的子类替换断言错误,也能正确捕获内置断言错误。

  • 工厂发现不再失败,因为提供不健全的magic global可调用文件 __code__ 对象(例如mock.call)

  • 修复问题182:testdir.inprocess_run now考虑通过的插件

  • 解决问题188:确保在python2上明确sys.exc_信息

    在进行测试之前

  • 修复问题191:添加UnitTest测试用例运行测试方法支持

  • 修复问题156:MonkeyPatch正确处理类级描述符

  • 报告改进:

    • pytest_report_header现在接收到一个“startdir”,这样您就可以使用startdir.bestrelpath(yourpath)来显示好的相对路径。

    • 允许插件实现pytest_report_header和pytest_sessionstart(首先调用sessionstart)。

    • 如果没有取消选择的原因行,则不显示

    • py.test-vv将显示所有断言比较,而不是截断