pytest-2.3: 改进的 fixtures / 更好的 unittest 集成

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

有关详细信息和教程式示例,请参阅

此外,现在支持将 pytest fixtures/funcargs 与 unittest 风格的套件一起使用,请参见此处获取示例

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

所有更改都向后兼容,您应该能够继续运行您的测试套件以及与 pytest-2.2.4 兼容的第三方插件。

如果您对 pytest-2.3 fixture 演变的精确原因(包括示例)感兴趣,请查阅 https://pytest.cn/en/stable/funcarg_compare.html

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

文档和 PDF 访问照常

对于已经了解 pytest 的用户,可以在下面的 CHANGELOG 中找到更多详细信息。

特别感谢 Floris Bruynooghe、Alex Okrushko Carl Meyer、Ronny Pfannschmidt、Benjamin Peterson 和 Alex Gaynor 帮助正确集成新功能并使其运行良好。Ronny 和 Floris 还帮助修复了一些错误,还有更多人通过提供错误报告提供了帮助。

玩得开心,holger krekel

2.2.4 到 2.3.0 之间的更改

  • 修复 issue202 - 参数化测试函数的更好自动命名

  • 修复 issue139 - 引入 @pytest.fixture,允许直接限定和参数化 funcarg 工厂。引入新的 @pytest.setup 标记以允许编写接受 funcargs 的 setup 函数。

  • 修复 issue198 - 在某些情况下,由于路径操作问题,在具有嵌套目录结构的 windows32 上找不到 conftest fixtures

  • 修复 issue193 跳过使用空参数集参数化的测试函数

  • 修复 python3.3 兼容性,主要是以前依赖于字典顺序的报告部分

  • 引入按资源和参数化设置重新排序测试,这优先于通常的文件排序

  • 修复 issue185 monkeypatching time.time 不会导致 pytest 失败

  • 修复 issue172 重复调用 pytest.setup 装饰的 setup_module 函数

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

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

  • 修复 issue165 - 修复损坏的文档链接并提及 stackoverflow 用于 FAQ

  • 捕获写入失败表示到终端时的 unicode 问题,以防止整个会话崩溃

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

  • 始终在测试运行的标题中报告已安装的第三方插件

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

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

  • 修复 issue179:正确显示工厂的依赖链

  • pluginmanager.register(…) 现在在插件已注册或名称已被占用时引发 ValueError

  • 修复 issue159:改进 https://pytest.cn/en/6.0.1/faq.html,特别是关于“魔术”历史,还提到了 pytest-django、trial 和 unittest 集成。

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

  • 修复 issue 178:xml 二进制转义符现在包装在 py.xml.raw 中

  • 修复 issue 176:即使我们在 python 级别用子类替换了 AssertionError,也能正确捕获内置的 AssertionError

  • 工厂发现不再因提供不健全的 __code__ 对象(例如 mock.call)的魔术全局可调用对象而失败

  • 修复 issue 182:testdir.inprocess_run 现在考虑传入的插件

  • 修复 issue 188:确保 python2 上 sys.exc_info 清除

    在调用测试之前

  • 修复 issue 191:添加 unittest TestCase runTest 方法支持

  • 修复 issue 156:monkeypatch 正确处理类级别描述符

  • 报告改进

    • pytest_report_header 现在接收一个 “startdir”,因此您可以使用 startdir.bestrelpath(yourpath) 来显示漂亮的相对路径

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

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

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