Pytest-2.5.0:现在报告的bug降至零!

Pytest-2.5.0是一个大的修复版本,两个社区bug修复日的结果加上许多人和记者的额外工作。该版本应与2.4.2、现有插件和测试套件完全兼容。我们的目标是保持这个零报告错误的水平,因为如果您的测试工具有错误,那就没有乐趣了,是吗?但是,在某种情况下:提交错误报告时,请提供有关情况的清晰信息和重现问题的简单示例。

问题跟踪程序现在当然不是空的。我们还有许多“强化”问题,我们希望在2014年在您的帮助下能够解决。

对于使用旧版python的用户,请注意pytest不会在python2.5上自动测试,因为virtualenv、setuptools和tox不再支持它。手动验证表明,它基本上可以正常工作,但它不会成为自动发布过程的一部分,因此将来可能会中断。

与往常一样,当前文档位于

您可以通过以下方式从pypi升级:

pip install -U pytest

特别感谢Anatoly Bubenkoff、Floris Bruynooghe、Marc Abramowitz、Ralph Schmitt、Ronny Pfanschmidt、Donald Stufft、James Lan、Rob Dennis、Jason R.Coombs、Mathieu Agopian、Virgil Dupras、Bruno Oliveira、Alex Gaynor等为本次发布提供帮助。

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

2.5.0

  • 将python2.5从pytest本身的自动发布测试中删除,这意味着它可能很快就会崩溃(但我们相信这个版本仍然有效)。

  • 用于在涉及参数化设备或函数参数时调用终结器的简化和固定的实现。现在,定案是在安装时延迟执行的,而不是在“拆卸阶段”。虽然一开始这听起来很奇怪,但它有助于确保我们正确处理设置/拆卸,即使在复杂的代码中也是如此。用户级代码不应该受到影响,除非它实现了pytest_runtest_teardown钩子,并期望在内部销毁某些fixture实例(非常不可能,而且无论如何都不可靠)。

  • pr90:添加--颜色=是 |no| 自动选项强制终端着色模式(默认为“自动”)。谢谢马克·阿布拉莫维茨。

  • 修复问题319-在断言错误中正确显示Unicode。多亏了FlorisBruynooghe提供了完整的公关服务。这也意味着我们现在依赖于py>=1.4.19。

  • 修复问题396-正确排序和完成类范围内的参数化测试,独立于类上的方法数量。

  • 以更好的方式重新定义issue323——参数化现在不应该导致运行时递归错误,因为每个作用域/每个设备重新排序测试的底层算法不再是递归的(它以前是尾调用递归的,这可能导致超过966个非函数作用域参数的问题)。

  • 修复问题290-现在已经初步支持使用重复的相同值进行参数化(如果第二次调用和第一次一样工作,有时测试很有用)。

  • 关闭issue240-准确记录pytest模块导入的工作原理,讨论两种常见的测试目录布局,以及它如何与PEP420名称空间包交互。

  • 修正问题246修正定稿器订单为独立夹具上的后进先出,取决于参数化程度高于功能范围夹具。(做了相当多的努力,所以请忍受这句话的复杂性:)感谢拉尔夫·施密特提供了准确的失败例子。

  • 通过实现参数的特殊索引以仅使用参数化测试ID的索引来修复问题244

  • 通过运行所有终结器修复问题287,但从第一个失败的终结器中保存异常并重新引发异常,以便拆卸仍将失败。我们重新评估第一个失败的异常,因为它可能是其他终结器失败的原因。

  • 修复订购时间模拟补丁或其他标准装饰包装材料与测试方法一起使用。这修复了346个问题,应该有助于解决随机的“xlist”收集失败。感谢Ronny Pfannschmidt和Donald Stufft帮助隔离它。

  • 修复issue357-特殊情况“-k”表达式,以允许使用无效的python表达式的简单字符串进行筛选。示例:“-k 1.3”匹配所有参数化为1.3的测试。-“k none”过滤所有名称中有“none”的测试,反之亦然“-k‘not none’”。以前,这些示例会导致语法错误。

  • 通过删除试用支持代码来修复问题384,因为UnitTest Compat增强功能允许试用自行处理它。

  • 导入插件时不要隐藏导入错误。修正发行375。

  • 修复问题275-允许usefixtures和autouse fixtures运行doctest文本文件。

  • 通过使--resultlog只依赖于longrepr而不是有时才存在的“reprcrush”属性来修复issue380。

  • 地址issue122:allow@pytest.fixture(params=iterator)by exploding into a list early on.

  • 修复pexpect-3.0与pytest自己的测试的兼容性。(修复了问题386)

  • 允许嵌套参数化值标记,感谢James Lan提供的pr。

  • 使用新的monkeypatch.setattr(import_path,value)API修复Unicode处理。谢谢罗布·丹尼斯。修复发行版31.

  • 使用JUnitXML修复Unicode处理,修复问题368。

  • 在python 2上的断言重写模式中,修复对编码cookie的检测。参见第330题。

  • make”--runxfail“将命令式pytest.xfail调用转换为no ops(它已经中和了pytest.mark.xfail标记)

  • 优化pytest/pkg-resources交互:符合assertionrewritinghook-pep302的加载程序现在正确地向setuptools/pkg-resources注册,以便pkg-resources.resource-stream方法正常工作。修复了问题366。感谢Jason R.Coombs的调查和全面公关。

  • pytestconfig设备现在是会话范围的,因为它在整个测试运行期间是同一个对象。修复发行版370。

  • 避免出现标记故障/混淆的意外情况:

    @pytest.mark.some(lambda arg: ...)
    def test_function():
    

    无法正常工作,因为pytest假定@pytest.mark.some已获得要修饰的函数。我们现在至少检测这个参数是否是lambda,因此这个示例将起作用。感谢亚历克斯·加诺提出。

  • xfail检查错误编码/ascii的pypy测试(pypy没有出错)。修复发行版。

  • 在内部使varnames()处理类的 __init__, 尽管Pytest本身并不需要ATM。同时修复缓存。修复发行版76.

  • 修复问题221-处理命名空间包的导入,不带 __init__. 恰当地说。

  • 重构内部FixtureRequest处理以避免MonkeyPatching。一个积极的面向用户的效果是“请求”对象现在可以用于闭包。

  • pytest.importskip中的固定版本比较(modname,minverstring)

  • 通过在nose compat文档中澄清pytest不会将unittest api复制到“plain”名称空间来修复issue377。

  • 修复@mock'd测试函数的详细报告