py.test 2.0.0: 断言增强、单元测试增强、报告增强、配置增强、文档增强

欢迎使用 pytest-2.0.0,“py.test”的重大新版本,这是一个快速简便的 Python 测试工具。它包含许多新功能和增强功能,请参阅下面的摘要和详细列表。许多长期废弃的代码已被删除,从而实现了更小、更简洁的实现。请在此处查看包含示例的新文档

关于打包的说明:pytest 曾是“py”发行版的一部分,直到 py-1.3.4 版本,但现在已发生变化:pytest-2.0.0 仅包含 py.test 相关代码,并期望与现有测试代码向后兼容。如果您想安装 pytest,只需输入以下其中之一

pip install -U pytest
easy_install -U pytest

非常感谢所有问题报告者以及提出问题或抱怨的人。特别感谢 Floris Bruynooghe 和 Ronny Pfannschmidt 的出色编码贡献,以及其他许多人的反馈和帮助。

此致,holger krekel

新功能

  • 通过 Python 解释器和从 Python 进行的新调用

    python -m pytest      # on all pythons >= 2.5
    

    或从 Python 程序中

    import pytest ; pytest.main(arglist, pluginlist)
    

    详情请参阅 https://pytest.cn/en/stable/how-to/usage.html

  • 比较列表、序列或字符串时,断言表达式中新的、更好的报告信息。

    请参阅 https://pytest.cn/en/stable/how-to/assert.html#newreport

  • 通过 ini 文件(识别 setup.cfg 或 tox.ini)进行新配置,例如

    [pytest]
    norecursedirs = .hg data*  # don't ever recurse in such dirs
    addopts = -x --pyargs      # add these command line options by default
    

    请参阅 https://pytest.cn/en/stable/reference/customize.html

  • 改进了标准 unittest 支持。一般来说,py.test 现在应该能够更好地运行自定义的 unittest.TestCases,例如 twisted trial 或基于 Django 的 TestCases。您现在还可以使用 py.test 运行已安装的“unittest”包的测试

    py.test --pyargs unittest
    
  • 新的“-q”选项可降低冗长程度,并打印更像 nose/unittest 风格的“点”输出。

  • 许多、许多更详细的改进详情

修复

  • 修复 issue126 - 引入 py.test.set_trace(),以便在测试运行期间即使捕获正在进行,也能通过 PDB 跟踪执行。

  • 修复 issue124 - 使报告对于在文件描述符 1 (stdout) 上打开文件的测试更具弹性。

  • 修复 issue109 - 不再加载同级 conftest.py 文件。(并且目录收集器不能再从目录的 conftest.py 进行自定义 - 这至少需要向上一个级别)。

  • 修复 issue88(从命令行参数查找自定义测试节点)

  • 修复 issue93 在导入 conftest.py 时捕获 stdout/stderr

  • 修复 bug:unittest 收集的函数现在也可以在类/模块级别应用“pytestmark”

重要说明

  • 在 2.0 版本之前,在 Python 代码中使用 py.test 的通常方式是导入“py”,然后例如使用“py.test.raises”作为辅助函数。这仍然有效,并且不打算弃用。然而,在大多数示例和内部代码中,您会发现使用“import pytest”和“pytest.raises”作为推荐的默认方式。

  • pytest 现在首先执行完整测试套件的收集,然后再运行任何测试。这改变了例如 pytest_collectstart/pytest_collectreport 的调用时机。某些插件可能需要升级。

  • pytest 包由一个 400 行的 core.py 和大约 20 个内置插件组成,总计约 5000 行,包括文档字符串。公平地说,它还使用了来自“pylib”的通用代码,以及新的“py”包来帮助文件系统和内省/代码操作。

(不兼容的)移除

  • py.test.config 现在仅在测试运行中可用。

  • 以下(大部分已弃用)功能已移除

    • 移除对 conftest.py 文件中模块/类/...收集节点定义的支持。它们将不再有特殊作用。

    • 移除对调用 1.0 之前的收集 API “run()”和“join”的支持

    • 移除从 conftest.py 文件或环境变量读取选项值的支持。现在可以通过 ini 文件机制,特别是“addopts”条目,更好、更容易地完成此操作。

    • 移除测试类中的“disabled”属性。使用跳过和 pytestmark 机制来跳过或标记测试类为 xfail。

  • py.test.collect.Directory 不再存在,也不可能提供自己的“Directory”对象。如果您使用过此功能并且不知道该怎么做,请联系我们。我们会想办法解决。

    请注意,pytest_collect_directory() 仍然会被调用,但任何返回值都将被忽略。这允许保持旧代码正常工作,例如在 collect() 中执行“py.test.skip()”以防止在缺少某些依赖项或命令行选项时递归到目录树中。

有关更详细的更改,请参阅 更新日志