py.test 2.0.0:断言++、UnitTest++、Reporting++、Config++、Docs++¶
欢迎使用Pytest-2.0.0,这是快速、简单的Python测试工具“py.test”的主要新版本。有许多新功能和增强功能,请参阅下面的摘要和详细列表。许多长期不推荐使用的代码已被删除,从而导致实现更小、更干净。请参阅以下示例中的新文档:
包装注意事项:Pytest在PY-1.3.4版本之前一直是“PY”发行版的一部分,但现在已经改变了:Pytest-2.0.0只包含与PY.test相关的代码,并且期望与现有的测试代码向后兼容。如果要安装pytest,只需键入以下内容之一:
pip install -U pytest
easy_install -U pytest
感谢所有的新闻记者和提问或抱怨的人。特别感谢FlorisBruynooghe和RonnyPfanschmidt对编码的贡献,以及许多其他人的反馈和帮助。
最好的,霍尔格·克里克
新特点¶
通过python解释器和python进行的新调用:
python -m pytest # on all pythons >= 2.5
或者从python程序:
import pytest ; pytest.main(arglist, pluginlist)
看到了吗http://pytest.org/en/stable/usage.html了解详情。
如果比较列表、序列或字符串,则在断言表达式中报告新的和更好的信息。
看到了吗http://pytest.org/en/stable/assert.htmlnewreport
通过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
看到了吗http://pytest.org/en/stable/customize.html
改进的标准单元测试支持。一般来说,py.test现在应该能够更好地运行自定义的unittest.testcase,比如twisted trial或基于django的testcase。您现在还可以使用py.test:运行已安装的“unittest”包的测试:
py.test --pyargs unittest
新的“-q”选项减少了冗长的内容,并打印出更多的鼻/单元测试样式的“点”输出。
许多更详细的改进细节
修正¶
修复问题126-在测试运行期间引入py.test.set_trace()以通过pdb跟踪执行,即使捕获正在进行。
修复问题124-使报告对在文件描述符1(stdout)上打开文件的测试更有弹性。
修复问题109-将不加载同级conftest.py文件。(目录收集器不能再从目录的conftest.py中定制了——这至少需要在一个级别上进行)。
修复问题88(从命令行arg中查找自定义测试节点)
修复问题93导入conftest.py时捕获stdout/stderr
修复错误:UnitTest收集的函数现在也可以在类/模块级别应用“pytestmark”。
重要音符¶
在python代码中使用py.test的2.0之前版本中,通常的方法是导入“py”,然后为助手使用“py.test.raises”。这仍然有效,不计划弃用。但是,在大多数示例和内部代码中,您会发现“import pytest”和“pytest.raises”用作推荐的默认方法。
在运行任何测试之前,pytest现在首先执行完整测试套件的收集。例如,当调用pytest_collectstart/pytest_collectreport时,语义会发生变化。某些插件可能需要升级。
pytest包由一个400 loc core.py和大约20个内置插件组成,总计大约5000个loc,包括docstring。公平地说,它还使用来自“pylib”的通用代码和新的“py”包来帮助文件系统和内省/代码操作。
(不兼容)删除¶
py.test.config现在只有在测试运行时才可用。
删除了以下(大部分已弃用)功能:
移除模块/类/的支架。conftest.py文件中的集合节点定义。它们不会造成什么特别的后果。
删除了对调用“run()”和“join”的1.0之前的集合API的支持
已从conftest.py文件或env变量中删除读取选项值。现在可以通过ini文件机制,特别是“addopts”条目,更好、更容易地完成这项工作。
删除了测试类中的“disabled”属性。使用跳过和pytestmark机制跳过或Xfail测试类。
py.test.collect.directory不再存在,无法提供自己的“directory”对象。如果你用过这个但不知道该怎么做,联系一下。我们会想办法的。
注意,pytest_collect_directory()仍然被调用,但任何返回值都将被忽略。这允许保持旧代码的工作状态,例如collect()中的“py.test.skip()”以防止在缺少某个依赖项或命令行选项时递归到目录树中。
看见 Changelog 更详细的更改。