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/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
改进了标准 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()”以防止在缺少某些依赖项或命令行选项时递归到目录树中。
有关更详细的更改,请参阅 更新日志。