pytest-2.5.0:报告的bug数量现已降至零!

pytest-2.5.0 是一个重要的bug修复版本,它汇集了两次社区bug修复日以及许多人员和报告者的额外工作。此版本应与 2.4.2、现有插件和测试套件完全兼容。我们的目标是将报告的bug数量维持在零,因为如果您的测试工具存在bug,那将是毫无乐趣的,不是吗?不过有一个条件:在提交bug报告时,请提供关于情况的清晰信息以及一个简单的可重现问题的示例。

问题跟踪器当然不会是空的。我们还有许多“增强”问题,希望能与您一起在 2014 年解决。

对于使用旧版本 Python 的用户,请注意 pytest 不再自动在 python2.5 上进行测试,因为 virtualenv、setuptools 和 tox 不再支持它。手动验证表明它大部分工作正常,但它不会成为自动化发布过程的一部分,因此未来可能会出现问题。

像往常一样,最新文档位于

您可以通过 pypi 升级,命令为

pip install -U pytest

特别感谢 Anatoly Bubenkoff、Floris Bruynooghe、Marc Abramowitz、Ralph Schmitt、Ronny Pfannschmidt、Donald Stufft、James Lan、Rob Dennis、Jason R. Coombs、Mathieu Agopian、Virgil Dupras、Bruno Oliveira、Alex Gaynor 和其他人的帮助,促成了此版本的发布。

玩得开心,holger krekel

2.5.0

  • 在 pytest 自身的自动化发布测试中放弃了 python2.5,这意味着它可能很快就会失效(但我们相信此版本仍然可用)。

  • 简化并修复了当涉及参数化夹具或函数参数时调用终结器的实现。终结现在在设置时进行惰性执行,而不是在“拆卸阶段”。虽然这乍听起来可能有些奇怪,但它有助于确保即使在复杂代码中,我们也能正确处理设置/拆卸。用户级别的代码不应受到影响,除非它实现了 pytest_runtest_teardown 钩子并期望某些夹具实例在此期间被拆卸(这非常不可能,而且无论如何都会不可靠)。

  • PR90:添加 –color=yes|no|auto 选项来强制终端着色模式(“auto”是默认值)。感谢 Marc Abramowitz。

  • 修复 issue319 - 正确显示断言错误中的 Unicode。非常感谢 Floris Bruynooghe 的完整 PR。这也意味着我们现在依赖于 py>=1.4.19。

  • 修复 issue396 - 正确排序和终结类作用域的参数化测试,独立于类上的方法数量。

  • 以更好的方式重新修复 issue323 —— 参数化现在应该永远不会导致运行时递归错误,因为按作用域/按夹具重新排序测试的底层算法不再是递归的(它以前是尾调用递归,对于超过 966 个非函数作用域参数可能会导致问题)。

  • 修复 issue290 - 现在初步支持使用重复相同值进行参数化(有时用于测试第二次调用是否与第一次调用一样有效)。

  • 关闭 issue240 - 精确文档化 pytest 模块导入的工作方式,讨论两种常见的测试目录布局,以及它如何与 PEP420 命名空间包交互。

  • 修复 issue246 修复终结器顺序,使其对于依赖于高于函数作用域的参数化夹具的独立夹具遵循 LIFO。(这需要相当多的努力,所以请耐心理解这句话的复杂性 :) 感谢 Ralph Schmitt 提供了精确的失败示例。

  • 通过为参数实现特殊索引,仅对参数化测试 ID 使用索引来修复 issue244

  • 修复 issue287,通过运行所有终结器,但保存第一个失败终结器的异常并重新抛出它,以便拆卸仍然失败。我们重新抛出第一个失败的异常,因为它可能是其他终结器失败的原因。

  • 修复当 mock.patch 或其他标准装饰器封装用于测试方法时的排序问题。这修复了 issue346,并应有助于解决随机的“xdist”收集失败。感谢 Ronny Pfannschmidt 和 Donald Stufft 帮助隔离此问题。

  • 修复 issue357 - 特殊处理“-k”表达式,允许使用非有效 Python 表达式的简单字符串进行过滤。示例:“-k 1.3”匹配所有参数化为 1.3 的测试。“-k None”过滤所有名称中包含“None”的测试,反之亦然“ -k ‘not None’”。以前这些示例会引发语法错误。

  • 修复 issue384,通过删除 trial 支持代码,因为 unittest 兼容性增强允许 trial 自行处理它

  • 当导入插件产生 ImportError 时,不要隐藏它。修复 issue375。

  • 修复 issue275 - 允许使用 usefixtures 和 autouse 夹具运行 doctest 文本文件。

  • 修复 issue380,通过使 –resultlog 仅依赖于 longrepr 而不是“reprcrash”属性,该属性有时才存在。

  • 解决 issue122:允许 @pytest.fixture(params=iterator) 通过尽早将其展开为列表。

  • 修复 pytest 自身测试的 pexpect-3.0 兼容性。(修复 issue386)

  • 允许嵌套的 parametrize-value 标记,感谢 James Lan 的 PR。

  • 修复新 monkeypatch.setattr(import_path, value) API 的 Unicode 处理问题。感谢 Rob Dennis。修复 issue371。

  • 修复 junitxml 的 Unicode 处理,修复 issue368。

  • 在 Python 2 的断言重写模式下,修复编码 cookie 的检测。参见 issue #330。

  • 使“–runxfail”将命令式 pytest.xfail 调用转换为无操作(它已经使 pytest.mark.xfail 标记无效)

  • 改进 pytest / pkg_resources 交互:符合 PEP302 的 AssertionRewritingHook 加载器现在正确地向 setuptools/pkg_resources 注册自身,以便 pkg_resources.resource_stream 方法正常工作。修复 issue366。感谢 Jason R. Coombs 的调查和完整 PR。

  • pytestconfig 夹具现在是会话作用域的,因为它在整个测试运行期间都是同一个对象。修复 issue370。

  • 避免一个令人惊讶的标记故障/混淆情况

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

    无法正常工作,因为 pytest 假定 @pytest.mark.some 已经获得了一个要装饰的函数。我们现在至少会检测这个参数是否是 lambda,因此这个示例将起作用。感谢 Alex Gaynor 提出此问题。

  • 对 PyPy 上检查错误编码/ASCII 的测试进行 xfail(PyPy 不会出错)。修复 issue385。

  • 内部使 varnames() 处理类的 __init__,尽管 pytest 本身目前不需要它。还修复了缓存。修复 issue376。

  • 修复 issue221 - 正确处理没有 __init__.py 的命名空间包的导入。

  • 重构内部 FixtureRequest 处理以避免猴子补丁。一个积极的用户可见效果是,“request”对象现在可以在闭包中使用。

  • 修复了 pytest.importskip(modname, minverstring) 中的版本比较

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

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