Changelog

版本如下 Semantic Versioning (<major>.<minor>.<patch>

仅在主要版本中引入向后不兼容(中断)更改,并在 贬抑 发布部分。

pytest 6.2.1(2020-12-15)

漏洞修补

  • #7678: 固定错误在哪里 ImportPathMismatchError 将为在主机中编译并稍后从UNC装载路径(Windows)加载的文件引发。

  • #8132: 固定回归 approx :在6.2.0中 approx 不再加薪 TypeError 在处理非数值类型时,回退到正常比较。在6.2.0之前,像tf.DeviceArray这样的数组类型适用于标量情况,如果它们只有一个元素,则恰好可以正确地与标量进行比较。在6.2.0之后,这些类型开始失败,因为它们既不是从标准Python数字层次结构继承的,也不是从 numpy.ndarray .

    approx 现在将参数转换为 numpy.ndarray 如果它们暴露数组协议并且不是标量。这会将类似数组的对象视为Numpy数组,而不管大小如何。

pytest 6.2.0(2020-12-12)

正在中断更改

  • #7808: pytest现在只支持python3.6+。

贬抑

  • #7469: 现在不建议直接构造/调用以下类/函数:

    • _pytest.cacheprovider.Cache

    • _pytest.cacheprovider.Cache.for_config()

    • _pytest.cacheprovider.Cache.clear_cache()

    • _pytest.cacheprovider.Cache.cache_dir_from_config()

    • _pytest.capture.CaptureFixture

    • _pytest.fixtures.FixtureRequest

    • _pytest.fixtures.SubRequest

    • _pytest.logging.LogCaptureFixture

    • _pytest.pytester.Pytester

    • _pytest.pytester.Testdir

    • _pytest.recwarn.WarningsRecorder

    • _pytest.recwarn.WarningsChecker

    • _pytest.tmpdir.TempPathFactory

    • _pytest.tmpdir.TempdirFactory

    它们一直被认为是私有的,但现在发出一个弃用警告,这可能会成为pytest 7.0.0中的一个硬错误。

  • #7530: 这个 --strict 命令行选项已弃用,请使用 --strict-markers 相反。

    我们有计划也许在未来重新引入 --strict 并使其成为所有与严格相关的选项的包含标志 (--strict-markers--strict-config 目前,未来可能会推出更多)。

  • #7988: 这个 @pytest.yield_fixture 装饰符/函数现在已弃用。使用 pytest.fixture() 相反。

    yield_fixture 一直是 fixture 很长一段时间,所以可以安全地搜索/替换。

特征

  • #5299: pytest现在警告在Python>=3.8的测试中发生的不可提升的异常和未处理的线程异常。看见 Warning about unraisable exceptions and unhandled thread exceptions 更多信息。

  • #7425: 新的 pytester 装置,该装置与 testdir 但是它的方法返回 pathlib.Path 在适当的时候而不是 py.path.local .

    这是要使用的运动的一部分 pathlib.Path 对象,以便移除对 py 未来。

    在内部,旧的 Testdir 现在是一个薄包装 Pytester ,保留旧界面。

  • #7695: 添加了一个新的钩子, pytest_markeval_namespace 它应该返回一个字典。本词典将用于增加可用于评估skipif/xFAIL/xPASS标记的“全局”变量。

    伪例

    conftest.py

    def pytest_markeval_namespace():
        return {"color": "red"}
    

    test_func.py

    @pytest.mark.skipif("color == 'blue'", reason="Color is not red")
    def test_func():
        assert False
    
  • #8006: 现在可以构造一个 MonkeyPatch 对象直接作为 pytest.MonkeyPatch() ,在以下情况下 monkeypatch 不能使用夹具。以前,一些用户从私有 _pytest.monkeypatch.MonkeyPatch 命名空间。

    此外, MonkeyPatch.context 现在是一个类方法,可以用作 with MonkeyPatch.context() as mp: ... 。这是推荐的使用方式 MonkeyPatch 直接使用,因为与 monkeypatch 装置,则直接创建的实例不是 undo() -自动编辑。

改进

  • #1265: 增加了一个 __str__ 实现到 LineMatcher 类的新实例,该类从 pytester.run_pytest().stdout 也很相似。它返回整个输出,就像现有的 str() 方法。

  • #2044: 详细模式现在显示在“SKIPPED”、“XFAIL”或“xPASS”之后在测试的终端行中跳过测试的原因。

  • #7469 现在导出了内置pytest装置的类型,因此可以在测试函数的类型注释中使用它们。新导出的类型包括:

    • pytest.FixtureRequest 对于 request 固定装置。

    • pytest.Cache 对于 cache 固定装置。

    • pytest.CaptureFixture[str] 对于 capfdcapsys 固定装置。

    • pytest.CaptureFixture[bytes] 对于 capfdbinarycapsysbinary 固定装置。

    • pytest.LogCaptureFixture 对于 caplog 固定装置。

    • pytest.Pytester 对于 pytester 固定装置。

    • pytest.Testdir 对于 testdir 固定装置。

    • pytest.TempdirFactory 对于 tmpdir_factory 固定装置。

    • pytest.TempPathFactory 对于 tmp_path_factory 固定装置。

    • pytest.MonkeyPatch 对于 monkeypatch 固定装置。

    • pytest.WarningsRecorder 对于 recwarn 固定装置。

    不支持构建它们(除了 MonkeyPatch );它们仅用于类型批注。这样做将发出弃用警告,并可能成为pytest 7.0中的硬错误。

    也不支持将它们子类化。这目前不是在运行时强制执行的,但可以由类型检查器(如mypy)检测到。

  • #7527: 当比较两者之间的关系时 namedtuple 相同类型的实例失败,pytest现在显示不同的字段名称(可能是嵌套的),而不是它们的索引。

  • #7615: Node.warn 现在允许任何子类 Warning ,不仅仅是 PytestWarning .

  • #7701: 改进了使用时的报告功能 --collected-only 。现在,它将在摘要统计信息中显示收集的测试数量。

  • #7710: 对中的非数值类型使用严格相等比较 pytest.approx() 而不是提高 TypeError .

    这是3.7之前的未记录行为,但现在是官方支持的功能。

  • #7938: 新的 --sw-skip 参数,它是以下内容的简写 --stepwise-skip .

  • #8023: 补充 'node_modules' 要设置的默认值,请执行以下操作 norecursedirs .

  • #8032: doClassCleanups (介绍于 unittest 在Python和3.8中)现在可以适当地调用。

漏洞修补

  • #4824: 修复了使用自动鼠标设备和xunit设备收集项的二次方行为和改进的性能。

  • #7758: 修复了软件包中的某些文件从以下位置丢失的问题 --lf 即使它们包含失败的测试。在pytest 5.4.0中回归。

  • #7911: 由创建者创建的目录 tmp_pathtmpdir 现在在3天没有修改(之前的值是3小时)后被认为是过时的,以避免删除在长时间运行的测试套件中仍在使用的目录。

  • #7913: 修复了崩溃或挂起 pytester.spawnreadline 涉及到模块。

  • #7951: 修复了收集测试时递归符号链接的处理。

  • #7981: 修复了收集期间未遵循的符号链接目录。在pytest 6.1.0中回归。

  • #8016: 修复了使用时仅收集一个文档测试的问题 pytest --doctest-modules path/to/an/__init__.py .

改进的文档

  • #7429: 添加有关跳过文档测试的更多信息和用例。

  • #7780: 现在标记了不应从继承的类 final class 在API参考中。

  • #7872: _pytest.config.argparsing.Parser.addini() 接受显式 None"string" .

  • #7878: 在Pull Request部分中,在编辑ChangeLog和Authors文件后要求提交。

细微/内部变化

  • #7802: 这个 attrs 依赖项要求现在是>=19.2.0,而不是>=17.4.0。

  • #8014: .pyc 由pytest的断言重写创建的文件现在在Python>=3.7上符合较新的PEP-552格式。(这些文件是内部文件,仅由pytest本身解释。)

pytest 6.1.2(2020-10-28)

漏洞修补

  • #7758: 修复了软件包中的某些文件从以下位置丢失的问题 --lf 即使它们包含失败的测试。在pytest 5.4.0中回归。

  • #7911: 创建者目录 tmpdir 现在在3天没有修改(之前的值是3小时)后被认为是过时的,以避免删除在长时间运行的测试套件中仍在使用的目录。

改进的文档

  • #7815: 改进了以下项的弃用警告消息 pytest._fillfuncargs() .

pytest 6.1.1(2020-10-03)

漏洞修补

  • #7807: 修复了pytest 6.1.0中的回归,导致在父目录也有配置文件的某些重要情况下确定不正确的根目录。

  • #7814: 修复了在以下情况下报头报告中的崩溃 testpaths 并包含绝对路径(6.1.0中的回归)。

pytest 6.1.0(2020-09-26)

正在中断更改

  • #5585: 根据我们的策略,5.X系列中已弃用的以下功能现在将被删除:

    • 这个 funcargnames 的只读属性 FixtureRequestMetafuncFunction 类。使用 fixturenames 属性。

    • @pytest.fixture 不再支持位置参数,改为按关键字传递所有参数。

    • 直接施工 Node 子类现在引发一个错误,使用 from_parent 相反。

    • 的默认值 junit_family 已经改变为 xunit2 . 如果需要旧格式,请添加 junit_family=xunit1 到配置文件。

    • 这个 TerminalReporter 不再拥有 writer 属性。插件作者可以使用 TerminalReporter 而不是访问 TerminalWriter 直接对象。

    • 这个 --result-log option has been removed. Users are recommended to use the pytest-reportlog 而是插件。

    更多信息请咨询 Deprecations and Removals 在文件里。

贬抑

  • #6981: 这个 pytest.collect 模块已弃用:可以从中导入其所有名称 pytest 直接。

  • #7097: 这个 pytest._fillfuncargs 函数已弃用。保留此函数是为了与旧插件向后兼容。

    它的功能不是要直接使用的,但是如果必须替换它,请使用 function._request._fillfixtures() 相反,请注意,这不是一个公共API,将来可能会中断。

  • #7210: 特殊 -k '-expr' 语法到 -k 被贬低。使用 -k 'not expr' 相反。

    特殊 -k 'expr:' 语法到 -k 已弃用。请打开一个问题,如果你使用这个并需要一个替换。

  • #7255: 这个 pytest_warning_captured 钩子被弃用,取而代之的是 pytest_warning_recorded ,并将在将来的版本中删除。

  • #7648: 这个 gethookproxy()isinitpath() 方法 FSCollectorPackage 已弃用;使用 self.session.gethookproxy()self.session.isinitpath() 相反。这应该适用于所有pytest版本。

特征

  • #7667: 新的 --durations-min 命令行标志控制包含在显示的最慢测试列表中的最短持续时间 --durations . 以前这是硬编码的 0.005s .

改进

  • #6681: 在初始化的早期阶段发出的内部pytest警告现在得到了正确的处理,并且可以过滤掉 filterwarnings--pythonwarnings/-W .

    这也解决了一些长期存在的问题: #2891#7620#7426 .

  • #7572: 当一个插件在 required_plugins 缺少或未知配置键与一起使用 --strict-config ,现在将显示一条简单的错误消息,而不是stacktrace。

  • #7685: 添加了两个新属性 rootpathinipathConfig . 这些属性是 pathlib.Path 现有版本 rootdirinifile 属性,并应尽可能优先于它们。

  • #7780: 不打算从中继承的公共类现在被标记 @final . 从这些类继承的代码将触发类型检查(例如mypy)错误,但仍将在运行时工作。目前 final 名称没有出现在API参考中,但希望将来会出现。

漏洞修补

  • #1953: 修正了重写参数化夹具时的错误,同时也重用了super fixture值。

    # conftest.py
    import pytest
    
    
    @pytest.fixture(params=[1, 2])
    def foo(request):
        return request.param
    
    
    # test_foo.py
    import pytest
    
    
    @pytest.fixture
    def foo(foo):
        return foo * 2
    
  • #4984: 修复了内部错误崩溃 IndexError: list index out of range 收集以修饰函数开头的模块时,decorator将引发,并启用断言重写。

  • #7591: 当从继承时,pylint不应该再抱怨未实现的抽象方法 File .

  • #7628: 修复了在Windows上向pytest传递不带驱动器号的完整路径时的测试集合(例如 \projects\tests\test.py 而不是 c:\projects\tests\pytest.py

  • #7638: 修复在Windows上显示为路径但触发操作系统级语法错误的命令行选项的处理,例如 pytest-xdist .

  • #7742: 修复了访问有故障的局部变量/全局变量时的内部错误 exec .

改进的文档

  • #1477: 远离的常见问题解答.rst以及它在目录.rst.

细微/内部变化

  • #7536: 内部 junitxml 插件已重写以使用 xml.etree.ElementTree . XML元素中属性的顺序可能不同。不再执行某些不必要的转义。

  • #7587: 对 more-itertools 包已被删除。

  • #7631: 结果类型 capfd.readouterr() (和类似的)不再是namedtuple,但在所有方面都应该表现得像一个。这是出于技术原因。

  • #7671: 在收集测试时,pytest通过检查python对象(模块、类和实例)的属性来查找测试类和函数。为了加快这个过程,pytest现在忽略了内置属性(比如 __class____delattr____new__ )没有咨询 python_classespython_functions 配置选项,而不将它们传递给使用 pytest_pycollect_makeitem 钩子。

pytest 6.0.2(2020-09-04)

漏洞修补

  • #7148: 固定的 --log-cli 可能导致不相关的 print 待吞咽的输出。

  • #7672: 修复了日志捕获级别还原不正确的情况 caplog.set_level 被多次调用。

  • #7686: 固定的 NotSetType.token 当参数ID为空时,参数ID被用作参数。在pytest 6.0.0中回归。

  • #7707: 修复处理包含多行或样式使用多行的某些异常时的内部错误 (--tb=line 例如)。

pytest 6.0.1(2020-07-30)

漏洞修补

  • #7394: 经过一个空的 help 价值到 Parser.add_option 现在可以接受,而不是在运行时崩溃 pytest --help .经过 None 提出一个更具信息量的 TypeError .

  • #7558: 固定支柱 not-callable 棉绒 pytest.mark.parametrize() 以及其他内置标记: skipskipifxfailusefixturesfilterwarnings .

  • #7559: 使用修复插件中的回归 TestReport.longreprtext (如 pytest-htmlTestReport.longrepr 不是字符串。

  • #7569: 修复了调用后日志捕获处理程序的级别未在拆分时重置 caplog.set_level() .

pytest 6.0.0(2020-07-28)

请在下面的6.0.0rc1注释中查看此版本的全套更改

正在中断更改

  • #5584: PytestDeprecationWarning are now errors by default.

    按照我们的计划,在尽可能减少中断的情况下删除不推荐使用的功能,所有类型的警告 PytestDeprecationWarning 现在生成错误而不是警告消息。

    在pytest6.1中,受影响的特性将被有效地删除 ,请咨询 Deprecations and Removals 有关如何更新现有代码的说明,请参阅文档中的部分。

    在试题中 6.0.X 作为权宜之计,您可以将错误更改回警告 pytest.ini 文件:

    [pytest]
    filterwarnings =
        ignore::pytest.PytestDeprecationWarning
    

    但当Pytest 6.1 被释放。

    如果你有顾虑的话 关于删除特定功能,请将注释添加到 #5584 .

  • #7472: 这个 exec_()is_true() 方法 _pytest._code.Frame 已被删除。

特征

改进

  • #7467: --log-file CLI选项和 log_file 如果需要,ini标记现在创建子目录。

  • #7489: 这个 pytest.raises()match 等于获得的字符串,但不是正则表达式匹配项。在这种情况下,建议转义正则表达式。

漏洞修补

  • #7392: 修复用跳过的测试的报告位置 @pytest.mark.skip 什么时候? --runxfail 使用。

  • #7491: tmpdirtmp_path 如果检查过时临时目录的锁不可访问,则不再引发错误。

  • #7517: 通过捕获时保留行尾 capfd .

  • #7534: 已还原以前的格式 TracebackEntry.__str__ 这是意外的改变。

改进的文档

  • #7422: 当 usefixtures 马克可以使用夹具进行测试。

  • #7441: 添加有关的注释 -q 入门指南中使用的选项。

细微/内部变化

  • #7389: 夹具范围 package 不再被认为是实验性的。

pytest 6.0.0rc1(2020-07-08)

正在中断更改

  • #1316: TestReport.longrepr 现在总是 ReprExceptionInfo . 以前是 str 当测试失败时 pytest.fail(..., pytrace=False) .

  • #5965: 在收集和匹配期间不再解析符号链接 conftest.py 具有测试文件路径的文件。

    在3.9.0中,解析当前目录和收集期间的符号链接是作为一个错误修复引入的,但实际上这是一个新功能,在Windows中产生了不幸的后果,在其他平台上也产生了令人惊讶的结果。

    该团队决定完全停止解决符号链接问题,计划在将来用更可靠的解决方案对此进行审查(请参见中的讨论) #6523 详情请参阅。

    这可能会破坏使用此特性的测试套件;修复方法是为整个测试树创建一个符号链接,而不是像以前那样只为部分文件/树创建符号链接。

  • #6505: Testdir.run().parseoutcomes() 现在总是以复数形式返回已解析的名词。

    原来 parseoutcomes() 将始终返回复数形式的名词,但这是为了通过使用单数形式的单个项来改进词尾摘要 (1 warning1 error )由于意外更改返回的键 parseoutcomes() .

    现在API保证总是返回复数形式,因此调用如下:

    result = testdir.runpytest()
    result.assert_outcomes(error=1)
    

    需要更改为:

    result = testdir.runpytest()
    result.assert_outcomes(errors=1)
    
  • #6903: 这个 os.dup() 函数现在假定存在。我们不知道任何支持的python3实现没有提供它。

  • #7040: -k 不再与测试会话根目录之外的目录名匹配。

    也, pytest.Package.name 现在只是包含包的目录的名称 __init__.py 文件,而不是完整路径。这与其他节点的命名方式一致,也是原因之一 -k 将与包含测试套件的任何目录匹配。

  • #7122: 表达式 -m-k 选项不再使用Python的 eval() . 格式支持 orandnot 、括号和要匹配的常规标识符。Python常量、关键字或其他运算符的计算方式不再不同。

  • #7135: Pytest现在使用自己的 TerminalWriter 类而不是使用 py 类库。插件通常通过 TerminalReporter.writerTerminalReporter.write() (和类似方法),或 _pytest.config.create_terminal_writer() .

    进行了以下重大更改:

    • 产量 (write() 方法和其他方法)不再隐式刷新;将考虑基础文件的刷新行为。要显式刷新(例如,如果希望在打印行尾之前显示输出),请使用 write(flush=True)terminal_writer.flush() .

    • 显式Windows控制台支持已删除,委派给colorama库。

    • 写作支持 bytes 被移除。

    • 这个 reline 方法及 chars_on_current_line 属性已删除。

    • 这个 stringioencoding 参数已删除。

    • 已删除对传递可调用而不是文件的支持。

  • #7224: 这个 item.catch_log_handleritem.catch_log_handlers 由日志插件设置且从未打算公开的属性不再可用。

    被蔑视的 --no-print-logs 期权和 log_print ini选项被删除。使用 --show-capture 相反。

  • #7226: 移除未使用的 args 参数从 pytest.Function.__init__ .

  • #7418: 移除 pytest_doctest_prepare_content 吊钩规格。这个钩子至少有10年没有被pytest触发了。

  • #7438: 内部做了一些改变 _pytest._code.source ,以下列出的是可能正在使用它的插件作者:

    • 这个 deindent 参数 Source() 已经被删除了,现在总是这样。

    • 支持零或多个参数 Source() 已删除。

    • 支持比较 Source 用一个 str 已删除。

    • 方法 Source.isparseable()Source.putaround() 已被删除。

    • 方法 Source.compile() 和功能 _pytest._code.compile() 已被移除;使用原样 compile() 相反。

    • 函数 _pytest._code.source.getsource() 已被移除;使用 Source() 直接代替。

贬抑

  • #7210: 特殊 -k '-expr' 语法到 -k 被贬低。使用 -k 'not expr' 相反。

    特殊 -k 'expr:' 语法到 -k 已弃用。请打开一个问题,如果你使用这个并需要一个替换。

  • #4049: pytest_warning_captured 已弃用,取而代之的是 pytest_warning_recorded 钩子。

特征

  • #1556: pytest现在支持 pyproject.toml 配置文件。

    配置选项与其他格式的配置选项类似,但必须在 [tool.pytest.ini_options] pytest要提取的表:

    # pyproject.toml
    [tool.pytest.ini_options]
    minversion = "6.0"
    addopts = "-ra -q"
    testpaths = [
        "tests",
        "integration",
    ]
    

    可以找到更多信息 in the docs .

  • #3342: pytest现在包括内联类型注释,并将它们公开给用户程序。大部分面向用户的API以及内部代码都包含在内。

    如果在测试中运行mypy之类的类型检查器,则可能会开始注意到指示错误用法的类型错误。如果您遇到您认为不正确的错误,请在问题中通知我们。

    这些类型是针对mypy版本0.780开发的。已知0.750之前的版本不起作用。我们建议使用最新版本。其他类型的检查程序也可以工作,但是它们还没有被pytest正式验证。

  • #4049: 引入了一个名为 pytest_warning_recorded 传达有关内部警告的信息 pytest 警告插件。

    这个钩子是用来替换的 pytest_warning_captured ,已弃用,将在将来的版本中删除。

  • #6471: 新命令行标志:

    • --no-header :禁用初始标头,包括平台、版本和插件。

    • --no-summary :禁用最终测试摘要,包括警告。

  • #6856: 当从config INI文件中读取未知密钥时,将显示警告。

    这个 --strict-config 已添加标志以将这些警告视为错误。

  • #6906: 补充 --code-highlight 在终端输出中启用/禁用代码高亮显示的命令行选项。

  • #7245: New --import-mode=importlib option that uses importlib 导入测试模块。

    传统上使用pytest __import__ 换衣服的时候 sys.path 导入测试模块(这也会改变 sys.modules 作为一个副作用),它可以工作,但有许多缺点,比如要求不在包中的测试模块具有唯一的名称(因为它们需要驻留在 sys.modules

    --import-mode=importlib 使用更细粒度的导入机制 importlib 不需要pytest进行更改 sys.pathsys.modules 总之,消除了以前模式的许多缺点。

    我们打算 --import-mode=importlib the default in future versions, so users are encouraged to try the new mode and provide feedback (both positive or negative) in issue #7245 .

    您可以在中阅读有关此选项的更多信息 the documentation .

  • #7305: 新的 required_plugins 配置选项允许用户指定运行pytest所需的插件列表,包括版本信息。如果在运行pytest时找不到任何必需的插件,则会引发错误。

改进

  • #4375: 这个 pytest 命令现在禁止 BrokenPipeErrorpytest ,并且管道由piped to程序关闭(常见示例是 lesshead

  • #4391: 提高了测试持续时间测量的精度。 CallInfo 物品现在有了新的 <CallInfo>.duration 属性,创建时使用 time.perf_counter() . 此属性用于填充 <TestReport>.duration 属性,它比前面的更精确 <CallInfo>.stop - <CallInfo>.start (因为这些是基于 time.time()

  • #4675: 数据类和 attrs -类现在是递归的。

  • #6285: 暴露了 pytest.FixtureLookupError 由引发的异常 request.getfixturevalue() (何处) request 是一个 FixtureRequest fixture)无法返回具有给定名称的fixture时。

  • #6433: 如果在日志记录调用中格式化消息时遇到错误,例如 logging.warning("oh no!: %s: %s", "first") (缺少第二个参数),pytest现在传播错误,很可能导致测试失败。

    以前,这样的错误会导致错误被打印到stderr,在通过测试时,默认情况下不会显示该错误。这种变化使错误在测试期间可见。

    您可以通过设置 logging.raiseExceptions = False .

  • #6817: 命令行选项的帮助文本中显式的新行被保留,允许插件更好地控制显示给用户的帮助。

  • #6940: 当使用 --duration 选项,终端消息输出现在对隐藏项的数量和持续时间更加精确。

  • #6991: 收集的文件显示在钩子的任何报告之后,例如 --lf .

  • #7091: 什么时候? fd 使用捕获,通过 --capture=fdcapfdcapfdbinary fixture,并且文件描述符(0,1,2)不能重复,FD捕获仍然执行。以前,直接写入文件描述符在这种情况下会失败或丢失。

  • #7119: 如果 --basetemp 参数为空,是当前工作目录或是父目录之一。这样做是为了防止意外数据丢失,因为传递给此参数的任何目录都将被清除。

  • #7128: pytest --version 现在只显示pytest版本,而 pytest --version --version 显示更详细的信息,包括插件。这与其他工具的显示方式更为一致 --version .

  • #7133: caplog.set_level() 现在将覆盖任何 log_level 通过CLI或配置文件设置。

  • #7159: caplog.set_level()caplog.at_level() 不再影响中显示的日志级别 捕获日志报告 报告部分。

  • #7348: 改进数据类/属性上比较断言的递归差异报告。

  • #7385: --junitxml 现在在 message 设置和拆卸期间失败的XML属性。

    以前:

    <error message="test setup failure">
    

    现在:

    <error message="failed on setup with &quot;ValueError: Some error during setup&quot;">
    

漏洞修补

  • #1120: 修复目录来自何处的问题 tmpdir 当pytest的多个实例并行运行时,未正确删除。

  • #4583: 当标记表达式出现时,防止崩溃并提供用户友好的错误 (-m )调用 eval() 引发任何异常。

  • #4677: 摘要报告中显示的跳过测试的路径现在总是相对的。以前它有时是绝对的。

  • #5456: 修复在尝试删除用于控制对由创建的文件夹的访问的锁文件时可能出现的争用情况 tmp_pathtmpdir .

  • #6240: 修复了一个问题,即在收集步骤中进行日志记录会导致向stderr复制日志消息。

  • #6428: 如果当前工作目录自会话启动后发生更改,则错误消息中出现的路径现在是正确的。

  • #6755: 支持在内部创建的windows上删除长度超过260个字符的路径 tmpdir .

  • #6871: 使用捕获的输出修复崩溃 capsysbinary .

  • #6909: 恢复由引入的更改 #6330 ,它需要所有参数 @pytest.mark.parametrize 在函数签名中显式定义。

    最初的改变的目的是要消除预期的意外/令人惊讶的行为,但结果发现许多人依赖它,因此限制被恢复。

  • #6910: 修复插件在使用 --reportlog 选择权。

  • #6924: 确保 unittest.IsolatedAsyncioTestCase 实际上是在等待。

  • #6925: 固定 TerminalRepr 实例可以再次散列。

  • #6947: 修复函数注册到 unittest.TestCase.addCleanup() 在测试失败时没有被调用。

  • #6951: 允许用户仍设置不推荐使用的 TerminalReporter.writer 属性。

  • #6956: 阻止pytest打印 ConftestImportFailure 追溯到stdout。

  • #6991: 修正回归 --lf 自pytest 5.4以来过滤过多。

  • #6992: Revert“tmpdir:通过工厂配置清理间接寻址” #6767 因为它破坏了pytest xdist。

  • #7061: 当屈服夹具无法产生值时,报告测试设置错误而不是崩溃。

  • #7076: 跳过的文件路径 @pytest.mark.skip 在跳过的报告中,现在是相对于调用目录的。以前它是相对于根目录的。

  • #7110: 固定回归: asyncbase.TestCase 再次正确执行测试。

  • #7126: --setup-show 当字节值用作 parametrize 参数调用Python时使用 -bb 旗帜。

  • #7143: 固定 pytest.File.from_parent() 因此它将额外的关键字参数转发给构造函数。

  • #7145: 带中断的类 __getattribute__ 方法在失败期间正确显示。

  • #7150: 防止在以下情况下隐藏基础异常 ConfTestImportFailure 提高了。

  • #7180: 固定 _is_setup_py 对于编码方式与区域设置不同的文件。

  • #7215: 修复运行时的回归 --pdb 会打电话 unittest.TestCase.tearDown() 对于跳过的测试。

  • #7253: 使用时 pytest.fixture 直接在函数上,如 pytest.fixture(func) ,如果 autouseparams 参数也被传递,函数不再被忽略,而是被标记为fixture。

  • #7360: 修复传递给的字符串表达式的可能不正确的计算 pytest.mark.skipifpytest.mark.xfail ,在极少数情况下,使用完全相同的字符串但引用不同的全局值。

  • #7383: 修复了整个代码库中的异常原因,即使用 raise new_exception from old_exception 包装异常时。

改进的文档

  • #7202: 开发指南现在链接到文档和 RELEASING.rst 在吉瑟布上。

  • #7233: 添加有关的注释 --strict--strict-markers 以及对后者的偏好。

  • #7345: 并解释间接参数化标记。

细微/内部变化

  • #7035: 这个 originalname 属性 _pytest.python.Function 现在默认为 name 如果未显式提供,则始终设置。

  • #7264: 对 wcwidth 包已被删除。

  • #7291: Replaced py.iniconfig with iniconfig .

  • #7295: src/_pytest/config/__init__.py 现在使用 warnings 要报告警告而不是 sys.stderr.write .

  • #7356: 删除已弃用的上次内部使用 奴隶 从古至今 pytest-xdist .

  • #7357: py >=1.8.2现在是必需的。

pytest 5.4.3(2020-06-02)

漏洞修补

  • #6428: 如果当前工作目录自会话启动后发生更改,则错误消息中出现的路径现在是正确的。

  • #6755: 支持删除在tmpdir中创建的windows上超过260个字符的路径。

  • #6956: 防止pytest将ConftestImportFailure回溯打印到stdout。

  • #7150: 防止在以下情况下隐藏基础异常 ConfTestImportFailure 提高了。

  • #7215: 修复运行时的回归 --pdb 会打电话给 tearDown 方法 unittest.TestCase 跳过测试的子类。

pytest 5.4.2(2020-05-08)

漏洞修补

  • #6871: 修复使用捕获的输出时的崩溃 capsysbinary fixture .

  • #6924: 确保 unittest.IsolatedAsyncioTestCase 实际上是在等待。

  • #6925: 修复TerminalRepr实例使其再次可散列。

  • #6947: 修复函数注册到 TestCase.addCleanup 在测试失败时没有被调用。

  • #6951: 允许用户仍设置不推荐使用的 TerminalReporter.writer 属性。

  • #6992: 恢复“tmpdir:clean indirection via config for factories”#6767,因为它破坏了pytest xdist。

  • #7110: 固定回归: asyncbase.TestCase 再次正确执行测试。

  • #7143: 固定 File.from_constructor 因此它将额外的关键字参数转发给构造函数。

  • #7145: 带中断的类 __getattribute__ 方法在失败期间正确显示。

  • #7180: 固定 _is_setup_py 对于编码方式与区域设置不同的文件。

pytest 5.4.1(2020-03-13)

漏洞修补

  • #6909: 恢复由引入的更改 #6330 ,它需要所有参数 @pytest.mark.parametrize 在函数签名中显式定义。

    最初的改变的目的是要消除预期的意外/令人惊讶的行为,但结果发现许多人依赖它,因此限制被恢复。

  • #6910: 修复插件在使用 --reportlog 选择权。

pytest 5.4.0(2020-03-12)

正在中断更改

  • #6316: 匹配 -k EXPRESSION 测试名称现在不区分大小写。

  • #6443: 使用指定的插件 -p 现在在内部插件之后加载,这会导致调用它们的钩子 之前 内部的。

    这使得 -p 行为与 PYTEST_PLUGINS .

  • #6637: 删除了长期弃用的 pytest_itemstart 钩子。

    这个钩子已经被标记为不推荐使用,而且pytest已经有10多年没有调用它了。

  • #6673: 反转/修复错误diffs中“+/-”的含义-“表示结果中缺少所期望的东西,“+”表示结果中有意外的额外内容。

  • #6737: 这个 cached_result 属性 FixtureDef 现在设置为 None 当结果不可用时,而不是被删除。

    如果你的插件执行 hasattr(fixturedef, 'cached_result') ,例如 pytest_fixture_post_finalizer 钩子实现,替换为 fixturedef.cached_result is not None . 如果你 del 属性,将其设置为 None 相反。

贬抑

  • #3238: 期权 --no-print-logs 已弃用,并打算在将来的版本中删除。如果你使用 --no-print-logs ,请试用 --show-capture 并提供反馈。

    --show-capture 命令行选项已添加到中 pytest 3.5.0 并允许指定在测试失败时如何显示捕获的输出: nostdoutstderrlogall (默认值)。

  • #571: 弃用未使用/损坏的 pytest_collect_directory 钩子。自从移除 Directory 2010年的收集器,一旦从测试执行中分离该集合,则该集合不正确/不可用。

  • #5975: 不推荐使用的直接构造函数 Nodes .

    相反,它们现在是通过 Node.from_parent .

    这种过渡机制使我们能够解开非常强烈的纠缠 Node 通过实施更受控制的创建/配置模式来实现关系。

    作为此更改的一部分,session/config已经是不允许的参数,在我们处理细节时,我们可能还需要禁用更多的参数。

    子类应使用 super().from_parent 如果他们打算扩大 Nodes .

  • #6779: 这个 TerminalReporter.writer 属性已被弃用,不应再使用。这是不经意间作为插件的公共API的一部分而暴露出来的,它与 py.io.TerminalWriter .

特征

  • #4597: 新的 --capture=tee-sys 允许实时打印和捕获测试输出的选项。

  • #5712: 现在所有的论点 @pytest.mark.parametrize 需要在函数签名或via中显式声明 indirect . 以前,如果存在同名的fixture,则可以省略一个参数,这只是实现的一个意外,并不是API的一部分。

  • #6454: 已更改的默认值 -rfE ,它在中显示失败和错误 short test summary . -rN 可以用来禁用它(旧的行为)。

  • #6469: 新选项已添加到 junit_logging 选项: logout-errall .

  • #6834: 多余的警告摘要现在按文件折叠,以确保警告摘要的可读显示。

改进

  • #1857: pytest.mark.parametrize 接受整数 ids 再次,将其转换为字符串。

  • #449: 在任何XPASSED测试中使用“黄色”主颜色。

  • #4639: Revert“现在在为 None “。

    事实证明,这一警告没有最初预期的那么有用,而且有不少假阳性病例。

  • #5686: tmpdir_factory.mktemp 现在在给定绝对路径和非规范化路径时失败。

  • #5984: 这个 pytest_warning_captured 钩子现在收到一个 location 参数,其中包含生成警告的代码位置。

  • #6213: pytester:测试者 testdir 设备遵循 monkeypatch 内部管路固定装置。

  • #6247: --fulltrace 因收集错误而感到荣幸。

  • #6384: 制作 --showlocals 同时与 --tb=short .

  • #6653: 使用连续添加对匹配行的支持 LineMatcherfnmatch_lines()re_match_lines() .

  • #6658: 当 pygments 已安装。

    鼓励用户安装 pygments 向他们的环境提供反馈,因为计划是 pygments 未来的正常依赖。

  • #6795: 导入使用错误消息无效 -o 选择权。

  • #759: pytest.mark.parametrize 支持的迭代器和生成器 ids .

漏洞修补

  • #310: 添加对调用的支持 pytest.xfail()pytest.importorskip() 做医生。

  • #3823: --trace 现在可以使用unittests。

  • #4445: 修正了pytest生成的一些警告报告,指出警告在用户代码中的正确位置。

  • #5301: 固定 --last-failed 从已知失败的文件中收集新测试。

  • #5928: 报告 PytestUnknownMarkWarning 在用户代码级别,不是 pytest s。

  • #5991: 修复与的交互 --pdb 和unittests:不要使用unittest的 TestCase.debug() .

  • #6334: 修复出现两次摘要条目的情况 f/Fs/S 报告字符同时在 -r 命令行选项(例如 -rFf

    大写的变体从未被记录在案,首选的形式应该是小写。

  • #6409: 对于最后一个没有黄色指示灯的项目,返回绿色而不是最后一个项目。

  • #6454: --disable-warnings 很荣幸 -ra-rA .

  • #6497: 修复fixture中请求键与缓存键比较中的错误。

    构造 if key == cached_key: 也可能失败,因为 == 显式不允许,或者对于,例如NumPy数组,如果 a == b 通常无法转换为 bool . 已实现的修复替换 == 具有 is .

  • #6557: 生成捕获输出流 .write() 方法从原始流返回相同的返回值。

  • #6566: 固定 EncodedFile.writelines 调用底层缓冲区的 writelines 方法。

  • #6575: 修复内部崩溃时 faulthandler 开始初始化(例如 PYTHONFAULTHANDLER=1 环境变量集)和 faulthandler_timeout 在配置文件中定义。

  • #6597: 修复包含参数化空字符串变量的节点ID。

  • #6646: 断言重写钩子被(重新)存储为当前项,这修复了它们在pytester之后仍在使用 testdir.runpytest 等。

  • #6660: pytest.exit() 当从 pytest_sessionfinish 钩子。调试器包括退出。

  • #6752: 什么时候? pytest.raises() 用作函数(与上下文管理器相反),则 match 关键字参数现在传递给被测试函数。以前它被吞并并忽略(pytest 5.1.0中的回归)。

  • #6801: 对于doctest的意外异常,不要在回溯之间显示空行。

  • #6802: 这个 testdir fixture 现在在医生那里工作。

改进的文档

  • #6696: 将设备列表添加到设备章节的开头。

  • #6742: 把固定装置上的第一句话扩展成一段。

细微/内部变化

  • #6404: 删除的用法 parser 模块,在python3.9中不推荐使用。

pytest 5.3.5(2020-01-29)

漏洞修补

  • #6517: 修复pytest 5.3.4中由于错误断言而导致内部错误的回归。

pytest 5.3.4(2020-01-20)

漏洞修补

  • #6496: Revert #6436 :不幸的是,此更改导致了许多套件中的许多倒退,因此团队决定恢复此更改并在我们继续寻找解决方案的同时发布新版本。

pytest 5.3.3(2020-01-16)

漏洞修补

  • #2780: 拆卸期间捕获的输出显示为 -rP .

  • #5971: 修复一 pytest-xdist 在处理由创建的子进程中引发的异常时发生崩溃 multiprocessing 模块。

  • #6436: FixtureDef 对象现在可以正确地将其终结器注册到fixture堆栈中在它们之前执行的autouse和参数化fixture,以便它们在正确的时间以正确的顺序被拆除。

  • #6532: 使用修复包含多个错误的结果的解析 testdir 结果(5.3.0中的回归)。

细微/内部变化

  • #6350: 优化测试参数ID的自动重命名。

pytest 5.3.2(2019-12-13)

改进

  • #4639: Revert“现在在为 None “。

    事实证明,这一警告没有最初预期的那么有用,而且有不少假阳性病例。

漏洞修补

  • #5430: junitxml:测试失败的日志现在被传递给junit报告,以防测试在调用阶段失败。

  • #6290: 中的支持文件 .pytest_cache 目录保存在 --cache-clear ,现在只清除缓存的值。

  • #6301: 修复基于egg的发行版和 editable 安装 (pip install --editable

pytest 5.3.1(2019-11-25)

改进

漏洞修补

pytest 5.3.0(2019-11-19)

贬抑

  • #6179: 默认值为 junit_family 选项将更改为 "xunit2" 在pytest6.0中,假设这是操作这种类型文件的现代工具默认支持的版本。

    为了平滑转换,pytest将发出警告,以防 --junitxml 选项在命令行中给出,但是 junit_family 未在中显式配置 pytest.ini .

    更多信息, see the docs .

特征

  • #4488: The pytest team has created the pytest-reportlog 插件,它提供了一个新的 --report-log=FILE 写入的选项 报告日志 在测试会话执行时将其保存到文件中。

    报告日志的每一行都包含一个独立的JSON对象,对应于测试事件,例如集合或测试结果报告。文件保证在写入每一行后被刷新,这样系统可以实时读取和处理事件。

    该插件旨在替换 --resultlog 选项,该选项已弃用,打算在将来的版本中删除。如果你使用 --resultlog ,请试用 pytest-reportlog 并提供反馈。

  • #4730: 什么时候? sys.pycache_prefix (python3.8+)设置后,pytest将使用它来缓存由断言重写机制更改的测试文件。

    这使得缓存的好处更容易获得 .pyc 文件,即使在没有权限的文件系统上。

  • #5515: 允许多行日志消息的选择性自动缩进。

    添加命令行选项 --log-auto-indent ,配置选项 log_auto_indent 以及对调用的缩进行为的每项配置的支持 logging.log() .

    更改自动缩进的默认值 "on""off" . 这将恢复v4.6.0之前存在的旧行为。之所以这样做,是因为最好是显式地激活可能导致破坏测试的新特性,而不是隐式地激活这些特性。

  • #5914: testdir 学会了两个新功能, no_fnmatch_line()no_re_match_line() .

    这些函数用于确保捕获的文本 匹配给定的图案。

    以前的习惯用法是 re.match()

    result = testdir.runpytest()
    assert re.match(pat, result.stdout.str()) is None
    

    in 操作员:

    result = testdir.runpytest()
    assert text in result.stdout.str()
    

    但是新函数在失败时产生最好的输出。

  • #6057: 打印时为复杂值添加了公差 pytest.approx .

    例如, repr(pytest.approx(3+4j)) 收益率 (3+4j) ± 5e-06 ±180° . 这是一种极性符号,表示围绕期望值的圆,半径为5e-06。为 approx 返回的比较 True ,实际值应在该圆圈内。

  • #6061: 将pluginmanager作为参数添加到 pytest_addoption 以便在设置命令行选项时可以调用钩子。这对于让一个插件与另一个插件进行通信非常有用,比如默认值或要添加的命令行选项集。

改进

  • #5061: 对终端摘要统计信息使用多种颜色。

  • #5630: 退出调试器现在可以在中正确处理 doctest 项目。

  • #5924: 改进了带有序列的详细diff输出。

    之前:

    E   AssertionError: assert ['version', '...version_info'] == ['version', '...version', ...]
    E     Right contains 3 more items, first extra item: ' '
    E     Full diff:
    E     - ['version', 'version_info', 'sys.version', 'sys.version_info']
    E     + ['version',
    E     +  'version_info',
    E     +  'sys.version',
    E     +  'sys.version_info',
    E     +  ' ',
    E     +  'sys.version',
    E     +  'sys.version_info']
    

    后:

    E   AssertionError: assert ['version', '...version_info'] == ['version', '...version', ...]
    E     Right contains 3 more items, first extra item: ' '
    E     Full diff:
    E       [
    E        'version',
    E        'version_info',
    E        'sys.version',
    E        'sys.version_info',
    E     +  ' ',
    E     +  'sys.version',
    E     +  'sys.version_info',
    E       ]
    
  • #5934: repr 属于 ExceptionInfo 对象已经改进以纪念 __repr__ 基础异常的方法。

  • #5936: 显示不可信的断言消息 -vv .

  • #5990: 修复了测试摘要中的多个不匹配(例如,显示“1个错误”而不是“1个错误”)。

  • #6008: Config.InvocationParams.args 现在总是 tuple 为了更好地传达它应该是不可变的,避免意外的修改。

  • #6023: pytest.main 返回A pytest.ExitCode 实例,除非使用自定义退出代码(它返回 int 然后仍然如此)。

  • #6026: 在pytester的输出中对齐前缀 LineMatcher .

  • #6059: 错误(和错误)不在“测试前”集合中报告。

  • #6069: pytester.spawn 不再无条件跳过/xfail FreeBSD上的测试。

  • #6097: “ [...%] “测试摘要中的指示器现在根据最终(新)多色线的主颜色进行着色。

  • #6116: 补充 --co 作为 --collect-only .

  • #6148: atomicwrites 现在只在Windows上使用,通过在Unix上重写断言来修复性能回归。

  • #6152: 现在参数化将使用 __name__ id的任何对象的属性(如果存在)。以前它只会用 __name__ 函数和类。

  • #6176: 使用pytester改进了故障报告 Hookrecorder.assertoutcome .

  • #6181: 会话停止的原因,例如 --maxfail / -x ,现在将在测试摘要中报告。

  • #6206: 改进 cache.set 鲁棒性和性能。

漏洞修补

  • #2049: 固定的 --setup-plan 显示有关固定装置寿命的不准确信息。

  • #2548: 终端摘要中跳过的测试的固定行偏移量不匹配。

  • #6039: 这个 PytestDoctestRunner 现在在取消配置doctest插件时已正确地失效。

    与一起使用时,这一点很重要 pytesterrunpytest_inprocess .

  • #6047: BaseException现在在中处理 saferepr ,其中包括 pytest.fail.Exception 等。

  • #6074: pytester:中参数的固定顺序 rm_rf 清除临时目录时发出警告,并且不针对 os.open .

  • #6189: 固定结果 getmodpath 方法。

细微/内部变化

  • #4901: RunResultpytester 现在显示助记符 ret 属性 pytest.ExitCode 价值。

pytest 5.2.4(2019-11-15)

漏洞修补

  • #6194: 修复非测试的错误发现 __init__.py 文件夹。

  • #6197: Revert“包中的第一个测试” (__init__. py)标记为 @pytest.mark.skip 现在正确跳过。“。

pytest 5.2.3(2019-11-14)

漏洞修补

  • #5830: 包中的第一个测试 (__init__. py)标记为 @pytest.mark.skip 现在正确跳过。

  • #6099: 固定 --trace 与参数化函数一起使用时。

  • #6183: 使用 request 作为中的参数名 @pytest.mark.parametrize 现在会产生一个更便于用户使用的错误。

pytest 5.2.2(2019-10-24)

漏洞修补

  • #5206: 固定 --nf 不要忘记已知的部分测试选择节点。

  • #5906: 使用修复崩溃 KeyboardInterrupt 在期间 --setup-show .

  • #5946: 修正了用numpy数组(可能还有其他类似序列的类型)参数化fixture时的问题。

  • #6044: 适当忽略 FileNotFoundError 尝试删除旧的临时目录时出现异常,例如多个进程尝试删除同一目录(与 pytest-xdist 例如)。

pytest 5.2.1(2019-10-06)

漏洞修补

  • #5902: 修复有关已弃用的警告 cmp 属性在 attrs>=19.2 .

pytest 5.2.0(2019-09-28)

贬抑

  • #1682: 将参数传递给pytest.夹具()作为位置参数已被弃用-请将它们作为关键字参数传递。

特征

  • #1682: The scope parameter of @pytest.fixture can now be a callable that receives the fixture name and the config object as keyword-only parameters. See the docs 更多信息。

  • #5764: 的新行为 --pastebin 选项:报告连接到pastebin服务器失败,而pytest运行没有失败

漏洞修补

  • #5806: 修复上载到时使用的“lexer”bpaste.net网站从 --pastebin 到“文本”。

  • #5884: 固定 --setup-only--setup-show 用于自定义pytest项。

细微/内部变化

  • #5056: HelpFormatter使用 py.io.get_terminal_width 以便更好地检测宽度。

pytest 5.1.3(2019-09-18)

漏洞修补

  • #5807: 在windows上修复pypy3.6(每晚)。

  • #5811: 把手 --fulltrace 正确的 pytest.raises .

  • #5819: Windows:用conftest修复回归,conftest的限定名包含大写字符(由#5792引入)。

pytest 5.1.2(2019-08-30)

漏洞修补

  • #2270: 固定的 self 函数范围fixture定义的插件类中的引用:以前 self 是指 test 班级,不是 插件 班级。

  • #570: 修复了长期存在的问题,即在参数化过程中使用间接夹具时不考虑夹具范围。

  • #5782: 修复从打印错误响应时的解码错误 --pastebin .

  • #5786: 测试和集合报告中的链式异常现在被正确序列化,允许像 pytest-xdist 正确显示它们。

  • #5792: Windows:修复加载时在某些情况下发生的错误 conftest.py 从文件系统中存储的大小写不同的工作目录(例如。, c:\test 而不是 C:\test

pytest 5.1.1(2019-08-20)

漏洞修补

  • #5751: 固定的 TypeError 在python3.5.0和3.5.1上导入pytest时。

pytest 5.1.0(2019-08-15)

移除

  • #5180: 根据我们的策略,以下功能在4.X系列中已被弃用,现在已被删除:

    • Request.getfuncargvalue 使用 Request.getfixturevalue 相反。

    • pytest.raisespytest.warns 不再支持字符串作为第二个参数。

    • message 参数 pytest.raises .

    • pytest.raisespytest.warnsParameterSet.param 现在使用纯关键字语法。这可能会更改以前版本中的异常消息,但它们仍会引发 TypeError 在未知的关键字参数上。

    • pytest.config 全局变量。

    • tmpdir_factory.ensuretemp 方法。

    • pytest_logwarning 钩子。

    • RemovedInPytest4Warning 警告类型。

    • request 现在是fixture的保留名称。

    更多信息请咨询 Deprecations and Removals 在文件里。

  • #5565: Removed unused support code for unittest2 .

    这个 unittest2 自python3.3+以来,backport模块不再是必需的,而且pytest中支持它的少量代码似乎也没有被使用:删除后,所有的测试仍然没有变化地通过。

    虽然我们的策略是在删除任何特性或对第三方库的支持之前引入一个弃用期,因为显然根本没有使用此代码(即使 unittest2 是由pytest执行的测试套件使用的),因此决定在这个版本中删除它。

    如果你因为这个经历了倒退,请 file an issue .

  • #5615: pytest.failpytest.xfailpytest.skip 不再支持消息参数的字节。

    这在python2中是受支持的,它很容易被使用 "message" 而不是 u"message" .

    python3代码不太可能通过 bytes 这些功能。如果是,请将其解码为 str 事先。

特征

  • #5564: 新的 Config.invocation_args 包含传递给的未更改参数的属性 pytest.main() .

  • #5576: New NUMBER doctest忽略浮点数中不相关差异的选项。灵感来自Sébastien Boisgeérault的 numtest doctest的扩展。

改进

  • #5471: junitxml现在在testsuite标记中包含时间戳和主机名。

  • #5707: 运行测试套件所花费的时间现在包括一个人类可读的表示,当它花费超过60秒时,例如:

    ===== 2 failed in 102.70s (0:01:42) =====
    

漏洞修补

  • #4344: 修复尝试使用收集包时的运行时错误/停止迭代 "__init__. 只有“py”。

  • #5115: 期间发出的警告 pytest_configure 显式地不被视为错误,即使这样配置,因为它会完全破坏pytest。

  • #5477: 生成的XML文件 --junitxml 现在正确地包含 <testsuites> 根元素。

  • #5524: 解决问题的位置 tmp_pathtmpdir 不会删除包含标记为只读的文件的目录,这可能会导致第二次使用 --basetemp 选择权。

  • #5537: 替换 importlib_metadata 后端口 importlib.metadata 来自python3.8+上的标准库。

  • #5578: 改进一些异常引发函数的类型检查 (pytest.xfailpytest.skip ,以便在用户打算使用标记时提供更好的错误消息(例如 @pytest.xfail 而不是 @pytest.mark.xfail

  • #5606: 修正了当测试函数被修补时的内部错误,这些对象不能与其他对象进行比较,比如 numpy 数组。

  • #5634: pytest.exit 现在在中正确处理 unittest 案例。这使得 unittest 案件处理 quit 从pytest的pdb正确地。

  • #5650: 改进了解析ini配置文件失败时的输出。

  • #5701: 修复的集合 staticmethod 使用定义的对象 functools.partial .

  • #5734: 跳过异步生成器测试函数,并更新要引用的警告消息 async def 功能。

改进的文档

  • #5669: 为添加docstring Testdir.copy_example .

细微/内部变化

  • #5095: 的XML文件 xunit2 现在,通过pytest自己的测试套件根据模式验证family,以避免将来的回归。

  • #5516: 缓存节点拆分功能,可以提高超大测试套件的采集性能。

  • #5603: 简化内部 SafeRepr 类并删除了一些死代码。

  • #5664: 调用pytest自己的testsuite时 PYTHONDONTWRITEBYTECODE=1 , the test_xfail_handling 测试不再失败。

  • #5684: 更换手动处理 OSError.errno 在代码库中按new OSError 子类 (PermissionErrorFileNotFoundError 等)。

Pytest 5.0.1(2019-07-04)

漏洞修补

  • #5479: 提高报价 raises 匹配失败消息。

  • #5523: 修复了在命令行中同时使用多个短选项(例如 -vs )在python 3.8+中。

  • #5547: --step-wise 现在处理 xfail(strict=True) 标记正确。

改进的文档

  • #5517: 改进“编写插件”一章中的“声明新钩子”部分

Pytest 5.0.0(2019年6月28日)

重要的

此版本是python3.5+唯一的版本。

有关更多详细信息,请参阅 Python 2.7 and 3.4 support plan .

移除

  • #1149: Pytest no longer accepts prefixes of command-line arguments, for example typing pytest --doctest-mod inplace of --doctest-modules. This was previously allowed where the ArgumentParser thought it was unambiguous, but this could be incorrect due to delayed parsing of options for plugins. See for example issues #1149#3413#4009 .

  • #5402: PytestDeprecationWarning现在默认为错误。

    按照我们的计划,在尽可能减少中断的情况下删除不推荐使用的功能,所有类型的警告 PytestDeprecationWarning 现在生成错误而不是警告消息。

    受影响的特性将在Pytest 5.1中被有效删除。 ,请咨询 Deprecations and Removals 有关如何更新现有代码的说明,请参阅文档中的部分。

    在试题中 5.0.X 系列,将此添加到 pytest.ini 文件:

    [pytest]
    filterwarnings =
        ignore::pytest.PytestDeprecationWarning
    

    但当Pytest 5.1 被释放。

    如果你有顾虑的话 关于删除特定功能,请将注释添加到 #5402 .

  • #5412: ExceptionInfo 对象(返回者 pytest.raises )现在有同样的 str 表示为 repr 避免了用户使用时的一些混淆 print(e) 检查物体。

    这意味着代码如下:

    with pytest.raises(SomeException) as e:
        ...
    assert "some message" in str(e)
    

    需要更改为:

    with pytest.raises(SomeException) as e:
        ...
    assert "some message" in str(e.value)
    

贬抑

  • #4488: 移除 --result-log 选项和模块已经被推迟到(暂时)Pytest 6.0,因为团队还没有为它实现一个好的替代方案。

  • #466: 这个 funcargnames 属性是的别名 fixturenames 因为pytest 2.3,现在在代码中也被弃用。

特征

  • #3457: New pytest_assertion_pass 钩子,在断言时使用上下文信息调用 传球 .

    这个钩子还在 实验的 所以小心使用。

  • #5440: The faulthandler 标准库模块现在默认启用,以帮助用户诊断C模块中的崩溃。

    此功能是通过集成外部 pytest-faulthandler 插件到核心中,因此如果使用插件,用户应该将其从需求中删除。

    有关更多信息,请参阅文档:https://docs.pytest.org/en/stable/usage.html故障-经办人

  • #5452: 当警告配置为错误时,pytest警告现在显示为源自 pytest. 而不是内部 _pytest.warning_types. 模块。

  • #5125: Session.exitcode 值现在编码在 pytest.ExitCode ,一个 IntEnum . 这使得退出代码对使用者代码可用,并且比文档更明确。用户定义的退出代码仍然有效,但应谨慎使用。

    团队不希望这种更改在一般情况下破坏测试套件或插件,除非是在深奥/特定的场景中。

    pytest-xdist 用户应升级到 1.29.0 或以后,如 pytest-xdist 由于此更改,需要兼容性修复程序。

漏洞修补

  • #1403: 从开关 impimportlib .

  • #1671: 的名字 .pyc 断言编写器缓存的文件现在包括pytest版本,以避免缓存过时。

  • #2761: 在不区分大小写的文件系统上执行PEP 235。

  • #5078: 使用时测试模块不再双重导入 --pyargs .

  • #5260: 改进了字节字符串的比较。

    比较字节时,断言消息用于在显示差异时显示字节数值:

        def test():
    >       assert b'spam' == b'eggs'
    E       AssertionError: assert b'spam' == b'eggs'
    E         At index 0 diff: 115 != 101
    E         Use -v to get the full diff
    

    它现在显示实际的ASCII表示,这通常更有用:

        def test():
    >       assert b'spam' == b'eggs'
    E       AssertionError: assert b'spam' == b'eggs'
    E         At index 0 diff: b's' != b'e'
    E         Use -v to get the full diff
    
  • #5335: 当日志格式中的级别使用“%(levelname.xs”(截断的固定宽度对齐方式)格式化时,对级别名称进行着色,其中x是整数。

  • #5354: 固定 pytest.mark.parametrize 当argValues是迭代器时。

  • #5370: 恢复展开 all() 修理 NameError 关于嵌套的理解。

  • #5371: 恢复展开 all() 修复发电机的错误操作 if .

  • #5372: 恢复展开 all() 在使用时修复不正确的断言 all() 在表达式中。

  • #5383: -q 再次影响所收集项目的样式 (--collect-only--log-cli-level 使用。

  • #5389: Fix regressions of #5063 对于 importlib_metadata.PathDistribution 有他们的 files 属性为 None .

  • #5390: 修复回归,其中 obj 属性 TestCase 项不再绑定到方法。

  • #5404: Emit a warning when attempting to unwrap a broken object raises an exception, for easier debugging (#5080

  • #5432: 在多次调用过程中的pytest时,防止断言重写器发出“已导入”警告。

  • #5433: 修复包中的断言重写 (__init__. P)。

  • #5444: 固定 --stepwise 在命令行上传递的第一个文件无法收集时的模式。

  • #5482: 修复4.6.0中引入的错误,当将两个以上的位置参数传递给 pytest.mark.parametrize .

  • #5505: 使用时发现失败时修复崩溃 -p no:terminal .

改进的文档

  • #5315: 扩展模拟类和字典的文档 monkeypatch .

  • #5416: 修复运行/跳过示例中的pytestunknowmarkwarning。

最热4.6.11(2020-06-04)

漏洞修补

  • #6334: 修复出现两次摘要条目的情况 f/Fs/S 报告字符同时在 -r 命令行选项(例如 -rFf

    大写的变体从未被记录在案,首选的形式应该是小写。

  • #7310: 固定 UnboundLocalError: local variable 'letter' referenced before assignment 在里面 _pytest.terminal.pytest_report_teststatus() 当插件以非常规状态返回报表对象时。

    This was making pytest_report_teststatus() skip entering if-block branches that declare the letter variable.

    修复方法是设置 letter 在IF-挡路级联之前,所以它总是有价值的。

最热4.6.10(2020-05-08)

特征

  • #6870: 新的 Config.invocation_args 包含传递给的未更改参数的属性 pytest.main() .

    备注:虽然从技术上讲这是一个新功能,但根据我们的 policy 它不应该是向后移植的,我们在此特定情况下打开了一个异常,因为它修复了与 pytest-xdist ,所以它也可以被认为是一个错误修复。

细微/内部变化

  • #6404: 删除的用法 parser 模块,在python3.9中不推荐使用。

pytest 4.6.9(2020-01-04)

漏洞修补

  • #6301: 修复基于egg的发行版和 editable 安装 (pip install --editable

pytest 4.6.8(2019-12-19)

特征

  • #5471: junitxml现在在testsuite标记中包含时间戳和主机名。

漏洞修补

  • #5430: junitxml:测试失败的日志现在被传递给junit报告,以防测试在调用阶段失败。

细微/内部变化

  • #6345: 销 colorama0.4.1 仅适用于python3.4,因此较新的Python版本仍然可以接收colorama更新。

pytest 4.6.7(2019-12-05)

漏洞修补

  • #5477: 生成的XML文件 --junitxml 现在正确地包含 <testsuites> 根元素。

  • #6044: Properly ignore FileNotFoundError (OSError.errno == NOENT in Python 2) exceptions when trying to remove old temporary directories, for instance when multiple processes try to remove the same directory (common with pytest-xdist for example).

pytest 4.6.6(2019-10-11)

漏洞修补

  • #5523: 修复了在命令行中同时使用多个短选项(例如 -vs )在python 3.8+中。

  • #5537: 替换 importlib_metadata 后端口 importlib.metadata 来自python3.8+上的标准库。

  • #5806: 修复上载到时使用的“lexer”bpaste.net网站从 --pastebin 到“文本”。

  • #5902: 修复有关已弃用的警告 cmp 属性在 attrs>=19.2 .

细微/内部变化

  • #5801: 修复了python版本检查(由 flake8-2020 )以防 Python 变成一个东西。

pytest 4.6.5(2019-08-05)

漏洞修补

  • #4344: 修复尝试使用收集包时的运行时错误/停止迭代 "__init__. 只有“py”。

  • #5478: 修正使用unicode编码字符串时出现的异常 pytest.raises .

  • #5524: 解决问题的位置 tmp_pathtmpdir 不会删除包含标记为只读的文件的目录,这可能会导致第二次使用 --basetemp 选择权。

  • #5547: --step-wise 现在处理 xfail(strict=True) 标记正确。

  • #5650: 改进了解析ini配置文件失败时的输出。

Pytest 4.6.4(2019年6月28日)

漏洞修补

  • #5404: Emit a warning when attempting to unwrap a broken object raises an exception, for easier debugging (#5080

  • #5444: 固定 --stepwise 在命令行上传递的第一个文件无法收集时的模式。

  • #5482: 修复4.6.0中引入的错误,当将两个以上的位置参数传递给 pytest.mark.parametrize .

  • #5505: 使用时发现失败时修复崩溃 -p no:terminal .

Pytest 4.6.3(2019-06-11)

漏洞修补

  • #5383: -q 再次影响所收集项目的样式 (--collect-only--log-cli-level 使用。

  • #5389: Fix regressions of #5063 对于 importlib_metadata.PathDistribution 有他们的 files 属性为 None .

  • #5390: 修复回归,其中 obj 属性 TestCase 项不再绑定到方法。

Pytest 4.6.2(2019-06-03)

漏洞修补

  • #5370: 恢复展开 all() 修理 NameError 关于嵌套的理解。

  • #5371: 恢复展开 all() 修复发电机的错误操作 if .

  • #5372: 恢复展开 all() 在使用时修复不正确的断言 all() 在表达式中。

Pytest 4.6.1(2019-06-02)

漏洞修补

  • #5354: 固定 pytest.mark.parametrize 当argValues是迭代器时。

  • #5358: 修复声明重写 all() 处理非生成器的调用。

Pytest 4.6.0(2019-05-31)

重要的

这个 4.6.X 系列将是最后一个支持的系列 python 2和python 3.4 .

有关更多详细信息,请参阅 Python 2.7 and 3.4 support plan .

特征

  • #4559: 增加了 junit_log_passing_tests 可用于启用或禁用JUnit XML文件中传递测试输出的日志记录的ini值。

  • #4956: 测谎器 testdir.spawn 使用 tmpdir 作为home/userprofile目录。

  • #5062: 将呼叫展开到 all 为了更好的失败消息而重写断言,特别是在使用生成器表达式时。

  • #5063: 从开关 pkg_resourcesimportlib-metadata 用于入口点检测,以提高性能和导入时间。

  • #5091: 中ini选项的输出 --help 已经改进了。

  • #5269: pytest.importorskip 包括 ImportError 现在违约了 reason .

  • #5311: 为每个失败测试输出的捕获日志使用coloredLevelFormatter格式化。

  • #5312: 改进了python 3中多行日志消息的格式设置。

漏洞修补

  • #2064: 调试插件导入包装的 Pdb 类 (--pdbcls )立即按需提供。

  • #4908: 这个 pytest_enter_pdb Hook在死后接到电话 (--pdb

  • #5036: 修正了依赖于其他参数化夹具的夹具将被错误参数化的问题。

  • #5256: 处理内部错误,因为Jython中不能表示一个单独的代理项Unicode字符。

  • #5257: 确保 sys.stdout.mode 不包括 'b' 因为它是一个文本流。

  • #5278: 可以使用禁用pytest的内部python插件 -p no:python 再一次。

  • #5286: 解决问题 disable_test_id_escaping_and_forfeit_all_rights_to_community_support 在参数化测试中使用测试ID列表时,选项不起作用。

  • #5330: 显示发射时采集的测试模块 PytestCollectionWarning 测试类的消息 __init____new__ 方法使问题更容易解决。

  • #5333: 在4.5.0中使用 --lf 未重新运行所有具有来自未选定测试的已知失败的测试。

改进的文档

  • #5250: 使用扩展文档 setenvdelenv 具有 monkeypatch .

Pytest 4.5.0(2019-05-11)

特征

  • #4826: 当未知标记用作修饰符时,将发出警告。这通常是由于一个打字错误,这可能导致无声地破坏测试。

  • #4907: 将Xfail原因显示为JUnitXML消息字段的一部分。

  • #5013: 来自崩溃报告的消息现在显示在测试摘要中,截断到终端宽度。

  • #5023: 新标志 --strict-markers 当未知标记(如未使用 markers option 在配置文件中)在测试套件中使用。

    现有的 --strict 选项当前具有相同的行为,但可以在将来对其进行扩展以进行其他检查。

  • #5026: 序列和dict的断言失败消息现在包含不同项目的数量。

  • #5034: 改进报告 --lf--ff (上次运行失败)。

  • #5035: 这个 --cache-show 选项/操作接受可选的glob以仅显示匹配的缓存项。

  • #5059: 标准输入(stdin)可提供给Pytester的 Testdir.run()Testdir.popen() .

  • #5068: 这个 -r 了解的选项 A 在简短的测试摘要中显示所有报告(包括通过的报告)。

  • #5108: 短测试摘要在输出通过后显示 (-rP

  • #5172: 这个 --last-failed (--lf )选项变得更智能,如果该测试文件的所有测试在以前的运行中都通过,那么现在将跳过整个文件,大大加快了收集速度。

  • #5177: 引入新的特定警告 PytestWarning 子类,以便更容易根据类而不是消息筛选警告。新的子类包括:

    • PytestAssertRewriteWarning

    • PytestCacheWarning

    • PytestCollectionWarning

    • PytestConfigWarning

    • PytestUnhandledCoroutineWarning

    • PytestUnknownMarkWarning

  • #5202: 新的 record_testsuite_property 会话范围的设备允许用户登录 <property> 标签位于 testsuitejunitxml 插件。

    生成的XML与最新的XUnit标准兼容,与 record_propertyrecord_xml_attribute .

  • #5214: 已更改默认日志记录格式以提高可读性。以下是以前日志消息的示例:

    test_log_cli_enabled_disabled.py    3 CRITICAL critical message logged by test
    

    现在变成了:

    CRITICAL root:test_log_cli_enabled_disabled.py:3 critical message logged by test
    

    格式可以通过 log_format 配置选项。

  • #5220: --fixtures 现在还显示了除 "function" .

漏洞修补

  • #5113: 使用从插件中取消选择项目 pytest_collect_modifyitems 因为现在已经正确地报告了一个钩子包装器。

  • #5144: 有使用错误 exitstatus 设置为 EXIT_USAGEERRORpytest_sessionfinish 现在按预期钩住。

  • #5235: outcome.exit 不用于 EOF 在PDB包装器中,但只有 quit .

改进的文档

  • #4935: 扩展文档对注册标记和 --strict .

细微/内部变化

  • #4942: logging.raiseExceptions 未设置为 False 不再。

  • #5013: pytest now depends on wcwidth 为了更精确的终端输出,正确跟踪Unicode字符大小。

  • #5059: 测谎器 Testdir.popen() 使用 stdoutstderr 现在通过具有默认值的关键字参数 (subprocess.PIPE

  • #5069: 终端中的短测试摘要代码已移动到终端插件。

  • #5082: 改进了Pytester插件中各种方法的Kwargs验证。

  • #5202: record_property now emits a PytestWarning when used with junit_family=xunit2: the fixture generates property tags as children of testcase, which is not permitted according to the most recent schema .

  • #5239: 销 pluggy< 1.0 所以我们不更新到 1.0 当它被释放时自动:有计划的中断更改,我们希望确保pytest正确地支持 pluggy 1.0 .

Pytest 4.4.2(2019-05-08)

漏洞修补

  • #5089: 修复由中的错误导致的崩溃 __repr__ 同时具有两个功能 showlocals 并启用详细输出。

  • #5139: 消除对“终端”插件的核心依赖。

  • #5229: 要求 pluggy>=0.11.0 将依赖项恢复为 importlib-metadata 添加到 0.10.0 . 这个 importlib-metadata 包装作为鸡蛋安装时无法导入,并在依赖时导致问题 setup.py 安装测试依赖项。

改进的文档

  • #5171: Doc: pytest_ignore_collect, pytest_collect_directory, pytest_collect_file and pytest_pycollect_makemodule hooks's 'path' parameter documented type is now py.path.local

  • #5188: 改进的帮助 --runxfail 旗帜。

细微/内部变化

  • #5182: 移除内部和未使用 _pytest.deprecated.MARK_INFO_ATTRIBUTE .

Pytest 4.4.1(2019年4月15日)

漏洞修补

  • #5031: 当使用pytester时,环境变量被正确还原 testdir 固定装置。

  • #5039: 修正回归 --pdbcls 已停止使用4.0.0中的本地模块。

  • #5092: 将未知关键字传递给时生成警告 pytest.param(...) .

  • #5098: 使导入缓存无效 monkeypatch.syspath_prepend ,这对于正在使用的命名空间包是必需的。

Pytest 4.4.0(2019年3月29日)

特征

  • #2224: async 当没有安装合适的异步插件(例如 pytest-asynciopytest-trio

    以前 async 函数根本不会执行,但仍标记为“已传递”。

  • #2482: 包括新 disable_test_id_escaping_and_forfeit_all_rights_to_community_support 在参数化值中禁用ASCII转义的选项。这可能会导致一系列的问题,正如名字所表明的那样,使用时要自担风险。

  • #4718: 这个 -p 选项现在可以用于早期加载插件,也可以通过入口点名称,而不仅仅是模块名称。

    这使得尽早加载外部插件成为可能,比如 pytest-cov 在命令行中:

    pytest -p pytest_cov
    
  • #4855: 这个 --pdbcls 选项现在通过模块属性处理类(例如 pdb:pdb.Pdb 具有 pdb++ )并改进了验证。

  • #4875: The testpaths 配置选项现在显示在 rootdirinifile pytest头中的行(如果选项有效),即目录或文件名没有在命令行中显式传递。

    也, inifile 仅当存在配置文件而不是空文件时才显示 inifile: 字符串。

  • #4911: 现在可以使用动态跳过doctests pytest.skip() .

  • #4920: Internal refactorings have been made in order to make the implementation of the pytest-subtests 插件可能,它添加了UnitTest子测试支持和新的 subtests fixture as discussed in #1367 .

    有关内部重构的详细信息,请参阅有关pr的详细信息。

  • #4931: 测谎器 LineMatcher 断言传递的行是序列。

  • #4936: 把手 -p plug 之后 -p no:plug .

    这可用于从命令行等重写阻塞的插件(例如在“addopts”中)。

  • #4951: 只有通过固定装置(绞盘、capfs)捕获 pdb.set_trace() .

  • #4956: pytester 集合 $HOME$USERPROFILE 在测试运行期间转到临时目录。

    这样可以确保不会从实际用户的主目录加载配置文件。

  • #4980: 命名空间包处理得更好 monkeypatch.syspath_prependtestdir.syspathinsert (通过 pkg_resources.fixup_namespace_packages

  • #4993: 逐步插件现在报告状态信息。

  • #5008: 如果A setup.cfg 文件包含 [tool:pytest] 也不再支持 [pytest] 第节,Pytest将使用 [tool:pytest] 忽略 [pytest] . 以前它会无条件出错。

    这使得插件更容易支持旧的Pytest版本。

漏洞修补

  • #1895: 修复通过 request.getfixturevalue() 可能在要求的固定装置之前被拆下。

  • #4851: PyToT偏移 PYTEST_ADDOPTS 现在不使用外部选项 testdir.runpytest() .

  • #4903: 在重写中使用2038年后的正确修改时间 .pyc 文件夹。

  • #4928: 用固定线偏移 ScopeMismatch 错误。

  • #4957: -p no:plugin 已正确处理默认(内部)插件,例如 -p no:capture .

    以前它们总是被加载(导入),例如 capfd 夹具可用。

  • #4968: PDB quit 当命令在 debug 命令与 pdb++ .

  • #4975: 固定的解释 -qq 被视为 -v 相反。

  • #4978: outcomes.Exit 不被吞咽 assertrepr_compare 不再。

  • #4988: 会话结束时显式关闭日志记录的文件处理程序。

  • #5003: 用标记收集错误修复行偏移(关闭一个)。

改进的文档

  • #4974: 更新文档 pytest_cmdline_parse 钩注可用性限制

细微/内部变化

  • #4718: pluggy>=0.9 现在是必需的。

  • #4815: funcsigs>=1.0 现在是python 2.7所必需的。

  • #4829: 一些遗留的内部代码与 yield 测试已删除。

  • #4890: 移除内部未使用的 anypython Pytester插件中的夹具。

  • #4912: 删除已弃用的sphinx指令, add_description_unit() ,销sphinx移除至大于等于0.2.0,以支持sphinx 2.0。

  • #4913: 使用自定义修复pytest测试调用 PYTHONPATH .

  • #4965: 新的 pytest_report_to_serializablepytest_report_from_serializable 实验的 钩子。

    这些钩子将由 pytest-xdistpytest-subtests ,并替换resultlog以序列化和自定义报表。

    它们是实验性的,这意味着它们的细节可能会改变,甚至在未来的补丁发布中被完全删除,而不会发出警告。

    欢迎插件作者和用户提供反馈。

  • #4987: Collector.repr_failure 尊重 --tb 选项,但仅默认为 short 现在(用) auto

Pytest 4.3.1(2019-03-11)

漏洞修补

  • #4810: 在内部记录消息 pytest_runtest_logreport() 现在正确捕获和显示。

  • #4861: 改进对写入捕获输出的内容的验证,使其行为与禁用捕获时相同。

  • #4898: 固定 AttributeError: FixtureRequest has no 'confg' attribute 错误在 testdir.copy_example .

细微/内部变化

  • #4768: 避免在顶层导入pkg_资源。

Pytest 4.3.0(2019年2月16日)

贬抑

  • #4724: pytest.warns() 现在,当它接收到未知的关键字参数时发出警告。

    这在将来会变成一个错误。

特征

  • #2753: argparse的使用错误映射到pytest的 UsageError .

  • #3711: 添加 --ignore-glob 用于排除具有unix shell样式通配符的测试模块的参数。添加 collect_ignore_glob 对于 conftest.py 排除带有unix shell样式通配符的测试模块。

  • #4698: pytest 5.0中不支持关于python 2.7和3.4的警告已被删除。

    最后,它被认为比实际的实用程序更麻烦,而那些Python版本的用户不应该有这样的问题 pip 不会在这些解释程序上安装pytest 5.0。

  • #4707: 在新的帮助下 set_log_path() 方法有一种方法可以设置 log_file 从挂钩的路径。

漏洞修补

  • #4651: --help--version 处理 UsageError .

  • #4782: 固定 AssertionError 与包的断开符号链接的集合。

Pytest 4.2.1(2019年2月12日)

漏洞修补

  • #2895: 这个 pytest_report_collectionfinish 钩子现在也叫做 --collect-only .

  • #3899: 不提高 UsageError 当导入的包具有 pytest_plugins.py 子模块。

  • #4347: 在使用PDB++进行递归调试时修复输出捕获。

  • #4592: 固定处理 collect_ignore 经由父母 conftest.py .

  • #4700: 修正回归式 setUpClass 即使所有测试都被 unittest.skip() 在子类中应用的decorator。

  • #4739: 固定 parametrize(... ids=<function>) 当函数返回非字符串时。

  • #4745: 修复/改进传入时的参数集合 __init__.py 和测试文件。

  • #4770: more_itertools 当需要与Python2.7兼容时,现在限制为<6.0.0。

  • #526: 修复“valueerror:plugin already registered”在符号链接到实际源的生成目录中运行时出现的异常。

改进的文档

  • #3899: 添加注释 plugins.rst 那个 pytest_plugins 不应用作包含插件的用户模块的名称。

  • #4324: 记录如何使用 raisesdoes_not_raise 编写带有条件引发的参数化测试。

  • #4709: 记录使用时如何自定义测试失败消息 pytest.warns .

细微/内部变化

  • #4741: TerminalReporter插件的一些与冗长相关的属性现在是只读属性。

Pytest 4.2.0(2019-01-30)

特征

  • #3094: Classic xunit-style 功能和方法现在遵循 汽车旅馆 固定装置。

    这解决了许多令人惊讶的问题,比如 setup_method being called before session-scoped autouse fixtures (see #517 例如)。

  • #4627: 在Python2.7和3.4下运行时,在测试会话结束时显示一条消息,指出pytest 5.0将不再支持这些Python版本。

  • #4660: 数 挑选出来的-k-m 使用标志。

  • #4688: pytest_report_teststatus 钩子现在也可以接受 config 参数。

  • #4691: pytest_terminal_summary 钩子现在也可以接受 config 参数。

漏洞修补

  • #3547: --junitxml 可以发出与Jenkins Xunit兼容的XML。 junit_family INI选项接受 legacy|xunit1 ,生成旧样式的输出,以及 xunit2 这更严格地符合https://github.com/jenkinsci/xunit-plugin/blob/xunit-2.3.2/src/main/resources/org/jenkinsi/plugins/xunit/types/model/xsd/junit-10.xsd

  • #4280: 改进从PDB退出,尤其是 --trace .

    使用 q[quit] 之后 pdb.set_trace() 也将退出Pytest。

  • #4402: 警告摘要现在按消息而不是按测试ID对警告进行分组。

    这使得输出更加紧凑,更好地传达了实际生成警告的代码数量的一般概念,而不是调用该代码的测试数量。

  • #4536: monkeypatch.delattr handles class descriptors like staticmethod/classmethod .

  • #4649: 还原标记被视为关键字表达式的关键字。

  • #4653: tmp_path fixture和其他相关的工具提供解析路径(也就是实际路径)

  • #4667: pytest_terminal_summary 使用结果来自 pytest_report_teststatus 钩,而不是硬编码字符串。

  • #4669: 正确处理 unittest.SkipTest 在python 2上包含非ASCII字符的异常。

  • #4680: 确保 tmpdir 以及 tmp_path 固定装置是同一个文件夹。

  • #4681: 确保 tmp_path 总是一条真正的路。

细微/内部变化

  • #4643: 使用 a.item() 而不是被否决的 np.asscalar(a) 在里面 pytest.approx .

    np.asscalar has been deprecated 在里面 numpy 1.16. .

  • #4657: 从pylib复制saferepr

  • #4668: teststatus报告中预期失败的详细词从 xfailXFAIL 与其他测试结果一致。

Pytest 4.1.1(2019-01-12)

漏洞修补

  • #2256: 显示完全重复 assert a==b-vv .

  • #3456: 扩展doctest模块以忽略模拟对象。

  • #4617: 固定的 pytest.warns 重新使用上下文管理器时出现错误(例如,多参数化)。

  • #4631: 在以下情况下不要重写断言 __getattr__ 被打破

改进的文档

  • #3375: 使用的文档 setup.cfg 可能会使其他工具崩溃或导致难以跟踪问题,因为它使用的分析器与 pytest.initox.ini 文件夹。

细微/内部变化

  • #4602: 卸载 hypothesis 在再生毒性环境中。

Pytest 4.1.0(2019-01-05)

移除

  • #2169: pytest.mark.parametrize :在以前的版本中,ID函数引发的错误被抑制并更改为警告。现在,异常将被传播,同时会发送一条pytest消息,通知发生异常的节点、参数值和索引。

  • #3078: 删除旧的内部警告系统: config.warnNode.warn . 这个 pytest_logwarning 现在在实现时发出警告。

    看到我们 docs 关于如何更新代码的信息。

  • #3079: 移除了对收益率测试的支持——它们基本上被破坏了,因为它们在收集和测试执行被分离之后不能正确地支持fixture。

    看到我们 docs 关于如何更新代码的信息。

  • #3082: 删除了对中的值直接应用标记的支持 @pytest.mark.parametrize . 使用 pytest.param 相反。

    看到我们 docs 关于如何更新代码的信息。

  • #3083: 远离的 Metafunc.addcall . 这是 @pytest.mark.parametrize .

    看到我们 docs 关于如何更新代码的信息。

  • #3085: 删除了对向传递字符串的支持 pytest.main . 现在,总是传递字符串列表。

    看到我们 docs 关于如何更新代码的信息。

  • #3086: [pytest] 段在 setup.cfg 不再支持文件,请使用 [tool:pytest] 相反。 setup.cfg 文件用于 distutils 和一个名为 pytest 众所周知,它是冲突和错误的根源。

    请注意 pytest.initox.ini 将节保留的文件 [pytest] .

  • #3616: 已删除的不推荐使用的compat属性 node.Class/Function/Module -使用 pytest.Class/Function/Module 现在。

    看到我们 docs 关于如何更新代码的信息。

  • #4421: 删除了 pytest_namespace 钩子。

    看到我们 docs 关于如何更新代码的信息。

  • #4489: 远离的 request.cached_setup . 这是现代装置的前身。

    看到我们 docs 关于如何更新代码的信息。

  • #4535: 删除了已弃用的 PyCollector.makeitem 方法。这种方法很久以前就被错误地公开了。

  • #4543: 移除支架以使用 pytest_funcarg__ 前缀。使用 @pytest.fixture 改为装饰。

    看到我们 docs 关于如何更新代码的信息。

  • #4545: 直接调用fixtures现在总是一个错误而不是一个警告。

    看到我们 docs 关于如何更新代码的信息。

  • #4546: 去除 Node.get_marker(name) 返回值只能用于存在性检查。

    使用 Node.get_closest_marker(name) 作为替代品。

  • #4547: 被蔑视的 record_xml_property 夹具已被移除,使用更通用的 record_property 相反。

    看到我们 docs 更多信息。

  • #4548: 如果 pytest_plugins 变量是在非顶层定义的 conftest.py 文件(即不在 rootdir

    看到我们 docs 更多信息。

  • #891: 去除 testfunction.markername 属性-使用 Node.iter_markers(name=None) 重复它们。

贬抑

  • #3050: 贬低 pytest.config 全球的。

    看到了吗https://docs.pytest.org/en/stable/depressions.htmlpytest-配置全局以了解基本原理。

  • #3974: 路过 message 参数 pytest.raises 现在发布 DeprecationWarning .

    认为这个参数将匹配异常消息是一个常见的错误,而实际上它只在 pytest.raises 检查失败。为了避免这种错误,并且因为人们认为它很少被使用,Pytest正在贬低它,而目前没有提供替代方案。

    如果您对此有任何疑问,请评论 issue #3974 .

  • #4435: 已弃用 raises(..., 'code(as_a_string)')warns(..., 'code(as_a_string)') .

    看到了吗https://docs.pytest.org/en/stable/deprecisions.htmlraises-警告执行官提供基本原理和示例。

特征

  • #3191: 当断言 None .

    这是新用户中常见的混淆源,其中写道:

    assert mocked_object.assert_called_with(3, 4, 5, key="value")
    

    当他们应该写:

    mocked_object.assert_called_with(3, 4, 5, key="value")
    

    因为 assert_called_with 模拟对象的方法已执行断言。

    None 被显式检查。像这样的断言:

    assert variable is None
    

    不会发出警告。

  • #3632: Richer equality comparison introspection on AssertionError for objects created using attrsdataclasses (Python 3.7+, backported to 3.6

  • #4278: CACHEDIR.TAG 文件现在在缓存目录中创建。

    这些文件是 Cache Directory Tagging Standard ,并可由备份或同步程序用于标识pytest的缓存目录。

  • #4292: pytest.outcomes.Exit 来源于 SystemExit 而不是 KeyboardInterrupt . 这使我们能够更好地处理 pdb 退出。

  • #4371: 更新了 --collect-only 使用运行时显示测试描述的选项 --verbose .

  • #4386: 重组 ExceptionInfo object construction and ensure incomplete instances have a repr/str .

  • #4416: pdb:添加了对关键字参数的支持 pdb.set_trace .

    它处理 header 类似于python 3.7,并将任何其他关键字参数转发到 Pdb 建造师。

    这允许 __import__("pdb").set_trace(skip=["foo.*"]) .

  • #4483: 添加了ini参数 junit_duration_report 报告测试调用持续时间(不包括设置和拆卸时间)。

    JUnitXML规范和默认的pytest行为将在测试持续时间报告中包括安装和拆卸时间。您可以将此添加到您的 pytest.ini 文件:

    [pytest]
    junit_duration_report = call
    
  • #4532: -ra 现在将最后显示错误和失败,而不是摘要中的第一项。

    这使得有选择地运行测试更容易获得错误和失败的列表。

  • #4599: pytest.importorskip 现在支持 reason 参数,当无法导入请求的模块时将显示该参数。

漏洞修补

  • #3532: -p 例如,现在接受它的参数而不在值之间留空格 -pmyplugin .

  • #4327: approx 同样适用于更通用的容器,更精确的实例 IterableSized 而不是更严格的限制 Sequence .

  • #4397: 确保节点ID可打印。

  • #4435: 固定的 raises(..., 'code(string)') 框架文件名。

  • #4458: 显示实际测试ID --collect-only .

改进的文档

  • #4557: 标记示例文档页已更新,以支持最新的Pytest版本。

  • #4558: 更新缓存文档示例以正确显示缓存命中和未命中。

  • #4580: 改进了详细的总结报告文档。

细微/内部变化

  • #4447: 已更改的折旧类型 --result-logPytestDeprecationWarning .

    决定在下一个主要版本中删除此功能。

Pytest 4.0.2(2018年12月13日)

漏洞修补

  • #4265: 验证来自的参数 PYTEST_ADDOPTS 环境变量和 addopts 单独的ini选项。

  • #4435: 固定 raises(..., 'code(string)') 框架文件名。

  • #4500: 当夹具生成并在测试运行后进行日志调用时,如果测试被中断,则捕获属性为 None .

  • #4538: 提高 TypeError 对于 with raises(..., match=<non-None falsey value>) .

改进的文档

  • #1495: 文档公共doctest fixture目录树结构缺陷

Pytest 4.0.1(2018-11-23)

漏洞修补

  • #3952: 再次显示“简短测试摘要信息”之前的警告,但最后仍然显示稍后的警告。

  • #4386: 处理repr/str中未初始化的exceptioninfo。

  • #4393: 不要创造 .gitignore/README.md 现有缓存目录中的文件。

  • #4400: 重新安排产量测试错误的警告处理,以便选择退出4.0.x正确工作。

  • #4405: 用修复测试路径集合 --pyargs .

  • #4412: 修复涉及的断言重写 Starred +副作用。

  • #4425: 确保在给定的 --basetemp 是相对路径。

细微/内部变化

  • #4315: 使用 pkg_resources.parse_version 而不是 LooseVersion 在minversion检查中。

  • #4440: 调整一些内部pytest警告的堆栈级别。

Pytest 4.0.0(2018-11-13)

移除

  • #3737: 默认情况下,removedinpytest4警告现在是错误。

    按照我们的计划,在尽可能减少中断的情况下删除不推荐使用的功能,所有类型的警告 RemovedInPytest4Warnings 现在生成错误而不是警告消息。

    受影响的特性将在Pytest 4.1中被有效删除。 ,请咨询 Deprecations and Removals 有关如何更新现有代码的说明,请参阅文档中的部分。

    在试题中 4.0.X 系列,将此添加到 pytest.ini 文件:

    [pytest]
    filterwarnings =
        ignore::pytest.RemovedInPytest4Warning
    

    但当Pytest 4.1 被释放。

    如果你有顾虑的话 关于删除特定功能,请将注释添加到 #4348 .

  • #4358: 移除 ::() 表示节点ID中测试类实例的符号。

    以前,包含测试实例的节点ID将使用 ::() 要这样表示实例:

    test_foo.py::Test::()::test_bar
    

    额外的 ::() 对大多数用户来说都很困惑,已被删除,因此测试ID现在变为:

    test_foo.py::Test::test_bar
    

    当面向用户的功能发生更改时,这种更改不能像通常那样伴随一个取消预测期,因为实际上不可能检测到该功能何时被显式使用。

    额外的 ::() 可能已经在内部的某些地方被移除,然后在预期的地方导致混乱,例如 --deselect (#4127

    测试类实例也不与一起列出 --collect-only 不再。

特征

  • #4270: 这个 cache_dir 选项使用 $TOX_ENV_DIR 作为前缀(如果在环境中设置)。

    默认情况下,每个tox环境使用不同的缓存。

漏洞修补

  • #3554: 固定 CallInfo.__repr__ 因为调用还没结束。

Pytest 3.10.1(2018-11-11)

漏洞修补

  • #4287: 修复调试插件(PDB)的嵌套用法,例如使用pytester testdir.runpytest .

  • #4304: 阻止 stepwise 插件IF cacheprovider 也被阻塞,因为一个依赖于另一个。

  • #4306: 解析 minversion 作为实际版本而不是作为点分隔的字符串。

  • #4310: 修复重复的集合,因为多个参数与同一个包匹配。

  • #4321: 固定 item.nodeid 已解决的符号链接。

  • #4325: 修复目标不匹配的直接符号链接文件的集合 python_files .

  • #4329: 修复报告收集中的typeerror和上次写入的报告收集。

细微/内部变化

  • #4305: 将测试捕获中的byte/unicode助手替换为python级语法。

Pytest 3.10.0(2018年11月3日)

特征

  • #2619: 之后继续捕获输出 continue 具有 __import__("pdb").set_trace() .

    这也增加了一个新的 pytest_leave_pdb 钩住,然后进去 pdb 现有的 pytest_enter_pdb 钩子。

  • #4147: Add --sw, --stepwise as an alternative to --lf -x for stopping at the first failure, but starting the next test invocation from that test. See the documentation 更多信息。

  • #4188: 制作 --color 不在详细模式下运行时发出彩色点。在前面,它只会按测试输出对测试着色,如果 --verbose 也通过了。

  • #4225: 在非安静模式下使用终端提高收集报告的性能。

    “正在收集…”信息仅每0.5秒打印/更新一次。

漏洞修补

  • #2701: 修复错误 RemovedInPytest4Warning: usage of Session... is deprecated, please use pytest 警告。

  • #4046: 修复在包中运行测试的问题 __init__.py 文件夹。

  • #4260: 匿名编译源时吞咽警告。

  • #4262: 修复删除由创建的过时目录时出现的访问被拒绝错误 tmpdir / tmp_path .

  • #611: 命名设备 request 现在将发出警告: request 夹具是内部的,不应被覆盖,因为它会导致内部错误。

  • #4266: 处理(忽略)收集过程中引发的异常,例如使用Django的LazySettings代理类。

改进的文档

  • #4255: 添加了有关传递给筛选器警告的模块名称不是regex转义的缺少的文档。

细微/内部变化

  • #4272: 如果不是默认值,则在非详细模式下显示cachedir。

  • #4277: PDB:改进关于输出捕获的消息 set_trace .

    在以下情况下不显示“IO捕获关闭/打开” -s 用来避免混淆。

  • #4279: 提高由发出的警告的消息和堆栈级别 monkeypatch.setenv 当环境变量的值不是 str .

Pytest 3.9.3(2018年10月27日)

漏洞修补

  • #4174: 修正“valueerror:plugin already registered”与conftest插件通过symlink。

  • #4181: 处理创建和删除临时文件夹之间的竞争条件。

  • #4221: 修复测试会话结束时警告摘要未显示警告发出位置的测试的错误。

  • #4243: 修正回归 stacklevel for warnings在python2上作为位置参数传递。

改进的文档

  • #3851: Add reference to empty_parameter_set_mark ini option in documentation of @pytest.mark.parametrize

细微/内部变化

  • #4028: 恢复修补 sys.breakpointhook 因为它似乎什么都没做。

  • #4233: 应用导入排序器 (reorder-python-imports )到代码库。

  • #4248: 取消使用不必要的兼容垫片,6.binary_型

Pytest 3.9.2(2018年10月22日)

漏洞修补

  • #2909: 当检测到设备之间的递归依赖关系时,改进错误消息。

  • #3340: 修复挂钩中未显示的日志记录消息 pytest_sessionstart()pytest_sessionfinish() .

  • #3533: 修复JUnit报告中跳过测试的未捕获XML原始对象

  • #3691: python 2:安全地格式化有关将unicode字符串传递到的警告消息 warnings.warn 可能会引起意外 MemoryError 猴子修补时出现异常 warnings.warn 本身。

  • #4026: 当无法确定函数的签名时,改进错误消息。

  • #4177: Pin setuptools>=40.0 to support py_modules in setup.cfg

  • #4179: 恢复当前测试运行的符号链接的tmpdir行为。

  • #4192: 修复文件名报告人 warnings.warn 使用时 recwarn 在Python下。

Pytest 3.9.1(2018年10月16日)

特征

  • #4159: 对于包含测试类的测试套件,只有在指定了更高的详细级别(至少是“-vv”)时,才会输出有关子类模块的信息。

Pytest 3.9.0(2018-10-15-由于发布自动化错误未发布)

贬抑

  • #3616: 以下访问已被记录为弃用多年,但现在实际发出了弃用警告。

    • 访问 ModuleFunctionClassInstanceFileItem 通过 Node 实例。现在用户将此警告:

      usage of Function.Module is deprecated, please use pytest.Module instead
      

      用户应该 import pytest 并使用 pytest 模块。

    • request.cached_setup ,这是夹具可用的设置/拆卸机制的前身。你可以咨询 funcarg comparison section in the docs .

    • 使用名为的对象 "Class" 作为自定义在 Collector 子类已被弃用。用户应该使用 pytest_collect_make_item 在收集期间自定义节点类型。

      此问题只会影响创建新集合类型的高级插件,因此如果看到此警告消息,请与作者联系,以便他们更改代码。

    • 生成以下消息的警告已更改为 RemovedInPytest4Warning ::

      getfuncargvalue is deprecated, use getfixturevalue
      
  • #3988: 为pytest.ensuretemp添加一个拒绝声明警告,因为它已经被否决了一段时间。

特征

  • #2293: 通过隐藏内部细节来改进使用错误消息,这些细节可能会分散注意力并产生噪音。

    这有一个副作用,即某些错误条件先前引发了一般性错误(例如 ValueError 对于未注册的标记)正在提高 Failed 例外情况。

  • #3332: 改进当 conftest.py 无法导入文件。

    为了实现这一点,新的 chain 参数已添加到 ExceptionInfo.getrepr 在python 3中显示或隐藏链接的回溯(默认为 True

  • #3849: 添加 empty_parameter_set_mark=fail_at_collect 用于在参数化收集空集时引发异常的ini选项。

  • #3964: 启用实时日志记录和/或将日志记录到文件时,将显示在收集阶段生成的日志消息。

  • #3985: 介绍 tmp_path 作为提供路径对象的固定装置。同时介绍 tmp_path_factory 作为会话范围的fixture,用于从任何其他fixture或test创建任意临时目录。

  • #4013: 即使您自己自定义警告过滤器,也会显示拒绝警告。在以前的版本中,任何定制都会覆盖pytest的过滤器,默认情况下,反预测警告会返回到隐藏状态。

  • #4073: 允许指定超时 Testdir.runpytest_subprocess()Testdir.run() .

  • #4098: 将return code参数添加到pytest.exit()以退出带有特定返回代码的pytest。

  • #4102: 再实施 pytest.deprecated_call 使用 pytest.warns 所以它支持 match='...' 关键字参数。

    这有副作用 pytest.deprecated_call 现在提出 pytest.fail.Exception 而不是 AssertionError .

  • #4149: 需要设置工具>=30.3并将大部分元数据移动到 setup.cfg .

漏洞修补

  • #2535: 在测试函数时改进错误消息 unittest.TestCase 子类使用参数化的fixture。

  • #3057: request.fixturenames 现在正确返回由创建的设备的名称 request.getfixturevalue() .

  • #3946: 作为命令行选项传递的警告筛选器使用 -W 现在优先于中定义的筛选器 ini 配置文件。

  • #4066: 通过使用修复源标识 textwrap.dedent 直接。

  • #4102: pytest.warn 将捕获之前在python 2中发出的警告。以前他们从未被抚养过。

  • #4108: 解析参数的符号链接。

    此修复程序正在运行 pytest tests/test_foo.py::test_bar 在哪里 tests 是一个链接到 project/app/tests 以前 project/app/conftest.py 那就不考虑固定装置了。

  • #4132: 修复使用时内部错误的重复打印 --pdb .

  • #4135: 基于pathlib的tmpdir清理现在可以正确处理文件夹中的符号链接。

  • #4152: 遇到时显示文件名 SyntaxWarning .

改进的文档

  • #3713: 更新usefixtures文档以澄清它不能与fixture函数一起使用。

  • #4058: 更新fixture文档以指定一个fixture可以在其定义的范围内调用两次。

  • #4064: 根据unittest.rst,没有实现setupmodule和teardownmodule,但事实证明它们是。因此更新了UnitTest的文档。

  • #4151: 在contributing.rst指南中添加tempir测试示例

细微/内部变化

  • #2293: 内部 MarkerError 已删除异常。

  • #3988: 将tmpdir的实现移植到pathlib。

  • #4063: 从中排除0.00秒条目 --duration 除非输出 -vv 在命令行上传递。

  • #4093: 修复了内部测试中字符串文本的格式设置。

Pytest 3.8.2(2018-10-02)

弃用和移除

  • #4036: 这个 item 参数 pytest_warning_captured 钩子现在记录为已弃用。我们只有在 3.8 释放此参数与不兼容的 pytest-xdist .

    我们的策略是在bug修复发布期间不否决特性,但是在这种情况下,我们认为这是有意义的,因为我们只是将其记录为不推荐的,而不发出可能破坏测试套件的警告。这将说明钩子实现者根本不应该使用这个参数。

    在未来的版本中 item 将永远 None 当钩子实现使用它时,将发出适当的警告。

漏洞修补

  • #3539: 修复断言重写模块上的重新加载。

  • #4034: 这个 .user_properties 属性 TestReport 对象是(名称、值)元组的列表,但有时可以实例化为元组的元组。它现在总是一个列表。

  • #4039: 不再发出有关使用的警告 pytest_plugins 使用时在非顶级目录中 --pyargs 当前 --pyargs 机制不可靠,可能会产生错误的否定。

  • #4040: 排除通过测试的空报告 -rP 使用选项。

  • #4051: 当将无效的python表达式传递给 -m 选择权。

  • #4056: MonkeyPatch.setenvMonkeyPatch.delenv 如果环境变量名不是 str 在Python 2上。

    在python 2中,添加 unicode 关键 os.environ 导致问题 subprocess (以及可能的其他模块),使这成为一个微妙的bug,当与 from __future__ import unicode_literals .

改进的文档

  • #3928: 将夹具范围的可能值添加到文档中。

Pytest 3.8.1(2018年9月22日)

漏洞修补

  • #3286: .pytest_cache 目录现在被Git自动忽略。希望为其他SCM提供解决方案的用户请就此问题咨询/评论。

  • #3749: 在收集包内的测试期间修复以下错误:

    TypeError: object of type 'Package' has no len()
    
  • #3941: 修复间接参数化将考虑测试函数用于确定参数化范围的所有夹具的范围的错误,而不仅仅是被参数化的夹具的范围。

  • #3973: 修复断言重写器的崩溃,如果测试更改了当前的工作目录,但之后没有还原它。

  • #3998: 修复阻止某些caplog属性的问题(例如 record_tuples )当使用 --pdb .

  • #3999: 固定 UnicodeDecodeError 在python2.x中,当类返回非ASCII二进制时 __repr__ 在包含非ASCII文本的断言中。

改进的文档

  • #3996: 新的 Deprecations and Removals 页面显示了所有当前已弃用的特性、这样做的基本原理以及更新代码的替代方法。它还列出了在过去的主要版本中从pytest中删除的功能,以帮助那些具有古老pytest版本的用户升级。

细微/内部变化

  • #3955: 改进变更日志文件名的预提交检测

  • #3975: 删除im ou func周围的旧代码,因为它只是python2

Pytest 3.8.0(2018-09-05)

弃用和移除

特征

  • #2452: 内部Pytest警告现在使用标准发布 warnings 模块,使使用标准警告过滤器管理这些警告成为可能。这介绍 PytestWarningPytestDeprecationWarningRemovedInPytest4Warning 作为公共API的一部分的警告类型。

    查阅 the documentation 更多信息。

  • #2908: DeprecationWarningPendingDeprecationWarning 如果没有配置其他警告筛选器,则现在默认显示。这使得pytest更符合 PEP-0506 . 见 the docs 更多信息。

  • #3251: 现在在测试收集期间捕获并显示警告。

  • #3784: PYTEST_DISABLE_PLUGIN_AUTOLOAD 环境变量在设置时禁用插件自动加载。

  • #3829: 增加了 count 选择权 console_output_style 启用将进度显示为计数而不是百分比。

  • #3837: 添加了对“xfailed”和“xpassed”结果的支持 pytester.RunResult.assert_outcomes 签名。

漏洞修补

  • #3911: 终端编写器现在在编写进度时考虑到Unicode字符宽度。

  • #3913: 当使用未知参数调用时,pytest现在返回正确的退出代码(exit_sageerrror,4)。

  • #3918: 提高断言重写的性能。

改进的文档

  • #3566: 在usage.rst中为-r标志的用法添加了一个Blurb,用于显示额外的测试摘要信息。

  • #3907: 已更正传递给的异常集合的类型 xfailraises 参数接受 tuple 而不是 list .

细微/内部变化

  • #3853: 远离的 "run all (no recorded failures)" 邮件打印方式 --failed-first--last-failed 当没有失败的测试时。

Pytest 3.7.4(2018年8月29日)

漏洞修补

  • #3506: 在写入时修复可能的无限递归 .pyc 文件夹。

  • #3853: 缓存插件现在遵循 -q 旗时 --last-failed--failed-first 使用标志。

  • #3883: 使用时修复错误的控制台输出 console_output_style=classic .

  • #3888: 使用修复MacOS特定代码 capturemanager doctests中的插件。

改进的文档

  • #3902: 修复pytest.org链接

Pytest 3.7.3(2018年8月26日)

漏洞修补

  • #3033: 拆卸期间的固定装置可再次使用 capsyscapfd 检查测试期间捕获的输出。

  • #3773: 修复来自的测试集合 __init__.py 如果文件与 python_files 配置选项。

  • #3796: 修复在外包装结束时,连续子包装的固定装置拆卸一次的问题。

  • #3816: 修复错误在哪里 --show-capture=no 选项仍然显示夹具拆卸期间打印的日志。

  • #3819: 固定 stdout/stderr 当实时CLI日志记录处于活动状态时未捕获。

  • #3843: 在命令行中直接指定测试函数时,使用 test.py::test 语法与 --doctest-modules .

  • #3848: 修复无法传递Unicode参数的错误 testdir.runpytest 在Python 2上。

  • #3854: 当文件名以大写字母开头时,修复包内测试的双重集合。

改进的文档

  • #3824: 在中添加了多个全局模式匹配的示例 python_files .

  • #3833: 为添加了缺少的文档 pytester.Testdir .

  • #3870: 设置工具集成的正确文档。

细微/内部变化

  • #3826: 用类型注释替换损坏的类型注释。

  • #3845: 删除要发布的引用 #568 从文档中删除,该文档已被修复。

Pytest 3.7.2(2018年8月16日)

漏洞修补

  • #3671: 固定 filterwarnings 未注册为内置标记。

  • #3768, #3789: 修复来自与普通目录混合的包的测试集合。

  • #3771: 在集合期间修复无限递归,如果 pytest_ignore_collect 钩回 False 而不是 None .

  • #3774: 修复装饰设备将失去功能的错误(例如 @mock.patch

  • #3775: 修复导入带有前缀的模块或其他对象的错误 pytest_ 前缀将引发 PluginValidationError .

  • #3788: 固定 AttributeError 在拆卸过程中 TestCase 在期间引发异常的子类 __init__ .

  • #3804: 修复异常的回溯报告 __cause__ 周期。

改进的文档

  • #3746: 为添加文档 metafunc.config 那被错误地隐藏了起来。

Pytest 3.7.1(2018-08-02)

漏洞修补

  • #3473: 如果 approx() 给定了不理解的类型的预期值(例如字符串、嵌套dict等)。

  • #3712: 调用时正确表示numpy数组的维度 repr()approx() .

  • #3742: 修复收集过程中与第三方插件不兼容的问题,从而导致错误 object has no attribute '_collectfile' .

  • #3745: 显示绝对路径如果 cache_dir 不是相对于 rootdir 而不是失败。

  • #3747: 修复插件的兼容性问题以及fixture函数在直接调用插件时发出的警告代码。

  • #3748: 在中修复无限递归 pytest.approx 数组中 numpy<1.13 .

  • #3757: PATILB2到 >=2.2.0 正如我们所要求的 __fspath__ 支持。

  • #3763: 固定 TypeError 当断言消息为 bytes 在Python 3中。

Pytest 3.7.0(2018年7月30日)

弃用和移除

特征

  • #2283: 新的 package 夹具范围:当最后一次测试 包裹 完成。此功能被考虑 实验的 ,所以要谨慎使用。

  • #3576: Node.add_marker 现在支持一个 append=True/False 参数来确定标记是最后一个(默认)还是第一个。

  • #3579: 固定装置 caplog 现在有一个 messages 属性,提供对格式插入日志消息的方便访问,而不需要格式化程序/处理程序提供额外数据。

  • #3610: 新的 --trace 选项在测试开始时输入调试器。

  • #3623: 介绍 pytester.copy_example 作为帮助对项目中的示例进行验收测试的助手。

漏洞修补

  • #2220: 修复一个bug,其中被直接参数(例如参数化)覆盖的设备被实例化,即使它们没有被测试使用。

  • #3695: Fix ApproxNumpy initialisation argument mixup, abs and rel tolerances were flipped causing strange comparison results. Add tests to check abs and rel tolerances for np.array and test for expecting nan with np.array()

  • #980: 修复详细模式下截断的局部变量输出。

改进的文档

  • #3295: 更正的使用文档 --last-failed-no-failures 通过添加缺少的 --last-failed 提出的例子中的论点,因为它们具有误导性,导致认为不需要缺失的论点。

细微/内部变化

  • #3519: 现在A README.md 文件创建于 .pytest_cache 明确目录存在的原因。

Pytest 3.6.4(2018年7月28日)

漏洞修补

  • 使用调用pytest -mpytest 所以 sys.path 不会被安装在 site-packages . (#742

改进的文档

  • 使用 smtp_connection 而不是 smtp 在夹具文档中,以避免可能的混淆。 (#3592

细微/内部变化

  • 删除过时 __future__ 进口。 (#2319

  • 添加引文以提供有关如何正式引用pytest的信息。 (#3402

  • 用类型注释替换损坏的类型注释。 (#3635

  • pluggy<0.8 . (#3727

Pytest 3.6.3(2018-07-04)

漏洞修补

  • 固定 ImportWarning 由断言重写包模块中的显式相对导入触发。 (#3061

  • 修复错误 pytest.approx 处理0维numpy数组时。 (#3593

  • 不再加薪 ValueError 当使用 get_marker 应用程序编程接口。 (#3605

  • 修复输出日志文件中不显示非ASCII字符的日志消息的问题。 (#3630

  • 不再加薪 AttributeError 当旧标记不能存储在函数中时。 (#3631

改进的文档

  • 上述示例的说明 @pytest.mark.skipif 现在更好地匹配代码。 (#3611

细微/内部变化

  • 内部重构:删除未使用的 CallSpec2tox ._globalid_args 属性与 metafunc 参数从 CallSpec2.copy() . (#3598

  • 沉默的使用 reduce python 2中的警告 (#3609

  • 固定使用 attr.ib 贬低 convert 参数。 (#3653

Pytest 3.6.2(2018年6月20日)

漏洞修补

  • 修复回归 Node.add_marker 通过提取 MarkDecorator . (#3555

  • 无警告 location 报告为 None . 这已更正为现在报告 <undetermined location> . (#3563

  • 当前一个作用域中的终结器引发异常时,继续调用堆栈中的终结器。 (#3569

  • 修正编码错误 print 教义中的陈述 (#3583

改进的文档

  • 为添加文档 --strict 旗帜。 (#3549

细微/内部变化

  • 将fixture.rst文档中的旧报价样式更新为parens。 (#3525

  • 改善提示的显示 --fulltrace 具有 KeyboardInterrupt . (#3545

  • pytest的testsuite不再可以运行 python setup.py test --而是调用 pytesttox 直接。 (#3552

  • 修复文档中的拼写错误 (#3567

Pytest 3.6.1(2018-06-05)

漏洞修补

  • 修正了当测试被标记为Xfail时,JUnitXML两次记录stdout和stderr的错误。 (#3491

  • 固定 usefixtures 通过正确实例化应用于UnitTest测试的标记 FixtureInfo . (#3498

  • 修复断言重写器与monkey修补程序库的兼容性 file 物体。 (#3503

改进的文档

  • 在fixture文档中添加了一节,介绍如何将fixture用作工厂。 (#3461

细微/内部变化

  • 为pip/pre-commit启用缓存,以减少travis/appveyor上的生成时间。 (#3502

  • 将pytest切换到src/layout,正如我们已经为良好实践建议的那样——现在我们也实现了它。 (#3513

  • 修复测试中的if以支持3.7.0b5,其中ast中的docstring处理被还原。 (#3530

  • 删除一些python2.5兼容代码。 (#3529

Pytest 3.6.0(2018-05-23)

特征

  • 修改 pytest.mark 每个节点正确处理的实现,它修复了由旧设计引起的一些长期存在的错误。这引入了新的 Node.iter_markers(name)Node.get_closest_marker(name) API。用户是 强烈鼓励 阅读 reasons for the revamp in the docs 或跳到有关的详细信息 updating existing code to use the new APIs . (#3317

  • 现在什么时候 @pytest.fixture 多次应用于同一函数a ValueError 提高了。这种小车行为会导致令人惊讶的问题,如果在测试套件中工作,那么这主要是偶然的。 (#2334

  • 支持python 3.7的内置 breakpoint() 方法,见 Using the builtin breakpoint function 有关详细信息。 (#3180

  • monkeypatch 现在支持 context() 充当上下文管理器的函数,它撤消在 with 块。 (#3290

  • 这个 --pdb 选项现在导致键盘中断进入调试器,而不是停止测试会话。在python 2.7上,再次按下ctrl+c将退出调试器。在python 3.2及更高版本上,使用ctrl+d。 (#3299

  • log-level 参数的数值大于根记录器的级别,这使得它在用户代码中更好地使用自定义日志配置。 (#3307

漏洞修补

  • 可能导致损坏的罕见种族状况 .pyc Windows上的文件有望得到解决。 (#3008

  • 还可以使用iter_marker来发现从cli应用于标记表达式的标记,以避免旧标记存储中的错误数据。 (#3441

  • 当显示内容只包含空白的失败断言的差异时,使用 repr() 首先,让我们更容易发现不同之处。 (#3443

改进的文档

  • 将文档版权年份更改为每次发布时自动更新的范围。 (#3303

细微/内部变化

  • pytest 现在取决于 python-atomicwrites 类库。 (#3008

  • 将所有pypi.python.org URL更新到pypi.org。 (#3431

  • 检测 pytest_ prefixed hooks using the internal plugin manager since pluggy is deprecating the implprefix argument to PluginManager. (#3487

  • 进口 MappingSequence_pytest.compat 而不是直接从 collections 在里面 python_api.py::approx . 添加 Mapping_pytest.compat ,从导入 collections 在python 2上,但来自 collections.abc 在python 3上避免 DeprecationWarning 在python 3.7或更新版本上。 (#3497

Pytest 3.5.1(2018年4月23日)

漏洞修补

  • 重置 sys.last_typesys.last_valuesys.last_traceback 在每个测试执行之前。这些属性是在测试运行期间由pytest添加的,以帮助调试,但从未被重置过,因此它们将创建对最后一个失败测试的框架的泄漏引用,而垃圾收集器又无法回收该框架。 (#2798

  • pytest.raises 现在提出 TypeError 接收未知关键字参数时。 (#3348

  • pytest.raises 现在可以使用类似iterables的异常类。 (#3372

改进的文档

  • 固定键入 caplog 夹具文档,错误地将某些属性标识为方法。 (#3406

细微/内部变化

  • 在参数化参数采用默认值的函数时添加了更具指示性的错误消息。 (#3221

  • 删除内部 _pytest.terminal.flatten 有利于 more_itertools.collapse . (#3330

  • 从导入一些模块 collections.abc 而不是 collections 作为前一个模块触发 DeprecationWarning 在Python 3.7中。 (#3339

  • 记录属性不再是实验性的,删除警告被遗忘。 (#3360

  • 在文档和cli中提到有助于 _ 被打印 pytest --fixtures 只有如果 -v 选项已添加。 (#3398

Pytest 3.5.0(2018-03-21)

弃用和移除

  • record_xml_property 现在不赞成使用fixture,而赞成使用更通用的fixture record_property . (#2770

  • 定义 pytest_plugins 现在不推荐在非顶级conftest.py文件中使用,因为它们会“泄漏”到整个目录树。 See the docs 因为这个决定背后的理由 (#3084

特征

  • 新的 --show-capture 命令行选项,用于指定当测试失败时如何显示捕获的输出: nostdoutstderrlogall (默认值)。 (#1478

  • 新的 --rootdir 命令行选项重写用于发现根目录的规则。见 customize 在文档中获取详细信息。 (#1642

  • 现在,fixture根据其作用域进行实例化,使用更高作用域的fixture(例如 session )首先被实例化,而不是在较低范围内的设备(例如 function )同一范围内的设备的相对顺序保持不变,这取决于它们的声明顺序和依赖关系。 (#2405

  • record_xml_property 重命名为 record_property 现在可以兼容xdist、markers和任何记者。 record_xml_property 名称现在已弃用。 (#2770

  • 新的 --nf--new-first 选项:首先运行新的测试,然后运行其余的测试,在这两种情况下,测试也按文件修改时间排序,最新的文件排在第一位。 (#3034

  • 新的 --last-failed-no-failures 命令行选项,用于指定缓存插件的行为 `--last-failed 上次运行中没有测试失败(或找不到缓存)时的功能: noneall (默认值)。 (#3139

  • 新的 --doctest-continue-on-failure 命令行选项,使doctests能够为每个代码段显示多个失败,而不是在第一个失败时停止。 (#3149

  • 捕获的日志消息将添加到 <system-out> 生成的JUnit XML文件中的标记,如果 junit_logging ini选项设置为 system-out . 如果此ini选项的值为 system-err ,日志将写入 <system-err> . 的默认值 junit_loggingno ,表示捕获的日志不会写入输出文件。 (#3156

  • 允许日志插件处理 pytest_runtest_logstartpytest_runtest_logfinish 启用活动日志时挂钩。 (#3189

  • 经过 --log-cli-level 在命令行中,现在自动激活实时日志记录。 (#3190

  • 添加命令行选项 --deselect 允许在收集时取消选择单个测试。 (#3198

  • 在进入PDB之前打印捕获的日志。 (#3204

  • 取消选择的项计数现在在运行测试之前显示,例如 collected X items / Y deselected . (#3213

  • 内置模块 platform 现在可用于中的表达式 pytest.mark . (#3236

  • 这个 简短测试摘要信息 区段现在显示在终端中的回溯和警告之后。 (#3255

  • 新的 --verbosity 用于显式设置详细级别的标志。 (#3296

  • pytest.approx 现在接受比较numpy数组和标量。 (#3312

漏洞修补

  • 抑制 IOError 关闭用于在python 2.7中捕获流的临时文件时。 (#2370

  • 固定的 clear() 方法对 caplog 清除的夹具 records ,但不是 text 财产。 (#3297

  • 在测试收集期间,当不允许读取stdin时, DontReadFromStdin 对象仍然允许它自己是可迭代的,并在不崩溃的情况下解析为迭代器。 (#3314

改进的文档

细微/内部变化

  • 更改的最低要求 attrs17.4.0 . (#3228

  • 已重命名示例目录,以便从基目录运行时所有测试都通过。 (#3245

  • 内部的 mark.py 模块已转换为一个包。 (#3250

  • pytest 现在取决于 more-itertools 包裹。 (#3265

  • 添加警告时间 [pytest] 节用于 .cfg 通过的文件 -c (#3268

  • nodeids 现在可以显式传递给 FSCollectorNode 构造函数。 (#3291

  • 内部重构 FormattedExcinfo 使用 attrs 为旧的python版本提供工具并删除旧的支持代码。 (#3292

  • 重构以统一内部如何处理冗长的内容。 (#3296

  • 内部重构以更好地与argparse集成。 (#3304

  • 在doc/en/usage.rst中调用fixture时修复python示例 (#3308

Pytest 3.4.2(2018-03-04)

漏洞修补

  • 当捕获选项为 no . (#3203

  • 从中重构bindir检查 existsisdir . (#3241

  • 固定 TypeError 使用时发出 approx 用一个 Decimal 价值。 (#3247

  • 修复使用时生成的引用循环 request 固定装置。 (#3249

  • [tool:pytest] 章节在 *.cfg 文件通过 -c 选项现在被正确识别。 (#3260

改进的文档

  • 将日志插件添加到插件列表。 (#3209

细微/内部变化

  • 在fixture.rst中修复次要的拼写错误 (#3259

Pytest 3.4.1(2018-02-20)

漏洞修补

  • 移动导入 doctest.UnexpectedException 到顶层,以避免使用时可能出现的错误 --pdb . (#1810

  • 在输入pdb之前添加了捕获的stdout/stderr的打印,并改进了一个关于输出捕获的错误否定测试。 (#3052

  • 修正了使用参数化夹具进行测试的顺序,这可能导致夹具的创建超出了必要的范围。 (#3161

  • 修复在“测试运行”钩子之外的钩子上发生日志记录会导致内部错误的错误。 (#3184

  • 检测由注入的参数 unittest.mock.patch 当pypi正确的修饰 mock.patch 已安装并导入。 (#3206

  • pytest.raises() 具有 match= 失败现在更清楚发生了什么:当没有引发异常时,“匹配的”…“”部分被移除,因为它错误地表示引发了异常,但不匹配。当一个错误的异常被引发时,它现在被抛出(就像 pytest.raised() 没有 match= 而不是抱怨不匹配的文本。 (#3222

  • 修正了macos上doctests中的输出捕获处理。 (#985

改进的文档

  • 为添加sphinx参数文档 matchmessage ARGS到 pytest.raises . (#3202

细微/内部变化

  • Pytest更改了发布过程,现在正从Travis直接发布到Pypi。 (#3060

  • 重命名 ParameterSet._for_parameterize()_for_parametrize() 以符合命名约定。 (#3166

  • 跳过Mac上未通过的PDB/Doctest测试。 (#985

Pytest 3.4.0(2018-01-30)

弃用和移除

  • 所有的pytest类现在都是子类 object 为了更好地兼容python 2/3。这不应该影响用户代码,除非在极少数的边缘情况下。 (#2147

特征

  • 介绍 empty_parameter_set_mark ini选项,用于选择要应用的标记 @pytest.mark.parametrize 提供了一组空参数。有效选项包括 skip (默认) xfail . 请注意,计划将默认值更改为 xfail 在未来的版本中,这被认为不太容易出错。 (#2527

  • 不兼容的更改 :社区反馈后 logging 功能发生了一些变化。请咨询 logging documentation 有关详细信息。 (#3013

  • 当禁用捕获时,控制台输出返回到“经典”模式 (-s 否则,输出会被干扰到无用的程度。 (#3038

  • 新的 pytest_runtest_logfinish 钩子,当测试项完成执行时调用,类似于 pytest_runtest_logstart . (#3101

  • 使用许多夹具收集测试时提高性能。 (#3107

  • 新的 caplog.get_records(when) 方法,该方法提供对 "setup""call""teardown" 测试阶段。 (#3117

  • 新型夹具 record_xml_attribute 允许修改和插入 <testcase> JUnit报表中的XML节点。 (#3130

  • 默认缓存目录已从重命名 .cache.pytest_cache 在社区反馈之后 .cache 没有明确指出它是Pytest使用的。 (#3138

  • 对实时日志输出中的LevelName列进行着色。 (#3142

漏洞修补

  • 通过使用flush()而不是wait()修复MacOS上挂起的pexpect测试。 (#2022

  • 修复在进程内pytest使用 pytester 插件;这可能会破坏使用多个进程内pytest运行的测试,如果后面的测试依赖于前面泄漏全局解释器更改的测试。 (#3016

  • 修复了在插件安装挂钩之前中止测试时跳过插件报告挂钩的问题。 (#3074

  • 修复在拆卸过程中测试失败时报告的进度百分比。 (#3088

  • 不兼容的更改-o/--override 选项不再吞噬所有剩余的选项,这会导致令人惊讶的行为:例如, pytest -o foo=1 /path/to/test.py 会失败,因为 /path/to/test.py 将被视为 -o 命令行参数。这样做的一个结果是,现在多个配置覆盖需要多个 -o 旗帜: pytest -o foo=1 -o bar=2 . (#3103

改进的文档

  • 文档挂钩(定义为 historic=True )不能用于 hookwrapper=True . (#2423

  • 请澄清,默认情况下,捕获警告不会更改警告筛选器。 (#2457

  • 澄清在使用Pytest_fixture_设置时可能出现的混淆,其中fixture函数不返回任何值。 (#2698

  • 在pytest中使用的doctest标志上修复语句的措辞。 (#3076

  • 喜欢 https://*.readthedocs.io 结束 http://*.rtfd.org 文档中的链接。 (#3092

  • 提高入门指南的可读性(措辞、语法) (#3131

  • 添加注意,由于导入缓存,不建议从同一进程多次调用pytest.main。 (#3143

细微/内部变化

  • 当关键字表达式触发语法错误(例如, "-k foo and import" 将显示无法使用的错误 import 表达式中的关键字)。 (#2953

  • 将参数化的自动测试ID生成更改为使用 __name__ 函数的属性,而不是回退参数名称加计数器。 (#2976

  • 用stdlib导入替换py.std。 (#3067

  • 在日志文档中将“You”更正为“Your”。 (#3129

Pytest 3.3.2(2017-12-25)

漏洞修补

  • pytester:忽略用于在fd泄漏检测器中获取当前用户元数据的文件。 (#2784

  • 固定 内存泄漏 其中由设备返回的对象从未被垃圾收集器破坏。 (#2981

  • 修复pyargs到文件名的转换,以避免在python 2上转换符号链接。 (#2985

  • PYTEST_DONT_REWRITE 现在也检查插件,而不仅仅是测试模块。 (#2995

改进的文档

  • 添加关于多个参数化参数行为的说明 (#3001

细微/内部变化

  • 代码清理。 (#3015#3021

  • 通过替换的导入和引用来清除代码 _astast . (#3018

Pytest 3.3.1(2017-12-05)

漏洞修补

  • 解决有关问题 -p no:<plugin> 没有效果。 (#2920

  • 修复带有警告的回归,这些警告在python 2的参数中包含非字符串。 (#2956

  • 设置时始终转义空字节 PYTEST_CURRENT_TEST . (#2957

  • 固定 ZeroDivisionError 当使用 testmon 当没有实际收集测试时的插件。 (#2971

  • 带回 TerminalReporter.writer 作为别名 TerminalReporter._tw . 这个别名是在 3.3.0 释放。 (#2984

  • 这个 pytest-capturelog 插件现在也被列入黑名单,以避免在仍然安装的情况下运行pytest时出错。 (#3004

改进的文档

  • 修复到插件的断开链接 pytest-localserver . (#2963

细微/内部变化

  • 在中更新github“bugs”链接 CONTRIBUTING.rst (#2949

Pytest 3.3.0(2017-11-23)

弃用和移除

  • pytest不再支持python 2.63.3 . 这些python版本现在是eol一段时间了,在pytest核心团队中会产生维护和兼容性成本,我们决定从这个版本开始不再支持它们。仍需要这些版本的用户应将pytest固定到 <3.3 . (#2812

  • 删除内部 _preloadplugins() 功能。此删除是 pytest_namespace() 挂钩折旧。 (#2636

  • 内部变更 CallSpec2 有一个标记列表,而不是一个损坏的关键字映射。这将删除内部的关键字属性 CallSpec2 类。 (#2672

  • remove parameterset.deprecated_arg_dict-它不是公共API,缺少下划线是一个命名错误。 (#2675

  • 删除内部多类型属性 Node._evalskip 并将其替换为布尔值 Node._skipped_by_mark . (#2767

  • 这个 params 传递到列表 pytest.fixture 现在对于所有被认为是不可变和冻结的效果 pytest.fixture 调用。以前,列表可以在第一次调用fixture之前更改,允许动态参数化(例如,从命令行选项更新),但这是一个不需要的实现细节,它使内部复杂化,并阻止了一些内部清理。见问题 #2959 有关详细信息和建议的解决方法。

特征

  • pytest_fixture_post_finalizer 钩子现在可以接收 request 参数。 (#2124

  • 将compat.py中的旧自省代码替换为python 3上的inspect.signature和python 2上的funcsigs.signature,以确定fixture的可用参数。这应该尊重 __signature__ 函数声明。 (#2267

  • 向全局报告测试 pytestmark 变量仅一次。 (#2549

  • 现在,pytest显示运行测试时的总进度百分比。可以通过配置 console_output_style 设置为 classic . (#2657

  • 比赛 warns 签名到 raises 通过添加 match 关键字。 (#2708

  • Pytest现在捕获并显示来自标准的输出 logging 模块。用户可以通过在中指定选项来控制要捕获的日志级别。 pytest.ini ,命令行,以及在使用标记的单个测试期间。另外,A caplog 夹具可供用户在特定测试期间测试捕获的日志(类似于 capsys 例如)。有关详细信息,请参阅 logging docs . 这个功能是通过合并流行的 pytest-catchlog 插件,感谢 Thomas Hisch . 请注意,在将向后兼容接口与不起作用的接口合并期间 pytest-capturelog 已删除。 (#2794

  • 添加 allow_module_level 克瓦格 pytest.skip() ,可以跳过整个模块。 (#2808

  • 允许设置 file_or_dir-c-o 在Pytest中。 (#2824

  • 将stdout/stderr捕获结果作为 namedtuple 如此 outerr 可以通过属性访问。 (#2879

  • 添加 capfdbinary 一个版本 capfd 从中返回字节 readouterr() . (#2923

  • 添加 capsysbinary 一个版本 capsys 从中返回字节 readouterr() . (#2934

  • 实现要跳过的功能 setup.py 使用运行时的文件 --doctest-modules . (#502

漏洞修补

  • 之后恢复输出捕获 capsys/capfd.disabled() 上下文管理器。 (#1993

  • pytest_fixture_setuppytest_fixture_post_finalizer 现在所有人都需要钩子 conftest.py 文件夹。 (#2124

  • 如果在加载插件时发生异常,pytest将不再隐藏原始的回溯。在python 2中,它将用一条新消息显示原始的回溯,该消息解释了哪个插件。在python 3中,它将显示2个规范化的异常,即加载插件时的原始异常,以及pytest在加载插件时抛出的异常。 (#2491

  • capsyscapfd 现在可以被其他装置使用。 (#2709

  • 内部的 pytester 插件正确编码 bytes 论据 utf-8 . (#2738

  • testdir 现在使用的方法与 tmpdir 创建临时目录。这改变了 testdir 目录有点小,但不应影响正常情况下的使用,并避免一些潜在的问题。 (#2751

  • Pytest不再抱怨Unicode消息与ASCII不兼容的警告,即使是与ASCII兼容的消息。因此,为了安全起见,使用Unicode消息的警告首先转换为ASCII表示形式。 (#2809

  • 更改pytest命令的返回值 --maxfail 是从 2 (中断)至 1 (失败)。 (#2845

  • 修复断言重写中的问题,这可能导致重写不应重写的模块。 (#2939

  • 处理中没有说明的标记 pytest.ini . (#2942

细微/内部变化

  • Pytest现在取决于 attrs 用于内部结构以简化代码可维护性。 (#2641

  • 重构内部python 2/3兼容性代码以使用 six . (#2642

  • 停止出售 pluggy -我们错过了它的最新变化,但没什么好处 (#2719

  • 内部重构:通过在更新的Python3版本中使用反斜杠替换错误处理程序来简化ASCII字符串转义。 (#2734

  • 删除UnitTest插件中不必要的标记计算器 (#2767

  • 调用 Metafunc.addcall 现在发出拒绝警告。此功能计划在中删除 pytest-4.0 . (#2876

  • 参数集提取的内部移动到更可维护的位置。 (#2877

  • 内部重构以简化范围节点查找。 (#2910

  • 配置 pytest 以防止PIP在不受支持的Python版本中安装pytest。 (#2922

Pytest 3.2.5(2017-11-15)

漏洞修补

  • 去除 py<1.5 限制来自 pytest 因为这可能会导致某些安装中的版本冲突。 (#2926

Pytest 3.2.4(2017-11-13)

漏洞修补

  • 修复运行时的错误 --pyargs 将导致项目为空 parent.nodeid 如果从其他根目录运行。 (#2775

  • 解决问题 @pytest.parametrize 如果argnames被指定为关键字参数。 (#2819

  • 从ini配置中读取标记名时,从标记名中删除空白。 (#2856

  • 如果docstring中失败示例的行号小于9,则在pytest输出中显示doctest源的完整上下文。 (#2882

  • 将设备路径与实际路径段匹配,以避免匹配共享前缀的文件夹。 (#2836

改进的文档

  • 介绍一个关于conftest.py的专门部分。 (#1505

  • 明确提及 xpass 在文件中 xfail . (#1997

  • 在示例/参数化文档中附加pytest.param的示例。 (#2658

  • 澄清夹具参数的建议语言 (#2893

  • 将python 3.6列在入门文档中文档化的支持版本中。 (#2903

  • 澄清可用夹具范围的文件。 (#538

  • 添加有关 python -m pytest 将当前目录添加到sys.path的调用。 (#911

Pytest 3.2.3(2017-10-03)

漏洞修补

  • 修复在没有给定前缀的情况下标签完成的崩溃。 (#2748

  • 相等检查函数 (__eq__ 的) MarkDecorator 收益率 False 如果一个对象不是 MarkDecorator . (#2758

  • 运行时 pytest --fixtures-per-test :如果项没有fixtureinfo属性(例如doctests),则不要崩溃。 (#2788

改进的文档

  • 在帮助文本中 -k 选项,添加使用示例 not 不选择名称与提供的表达式匹配的某些测试。 (#1442

  • 添加注释 parametrize.rst 关于通话 metafunc.parametrize 多次。 (#1548

细微/内部变化

  • 集合 xfail_strict=True 在Pytest自己的测试套件中,可以在预期的失败开始通过时立即捕获它们。 (#2722

  • 修复传递可调用到标记的示例中的拼写错误(在example/markers.rst中) (#2765

Pytest 3.2.2(2017-09-06)

漏洞修补

  • 调用已弃用的 request.getfuncargvalue() 现在显示调用源。 (#2681

  • 允许声明为的测试 @staticmethod 使用固定装置。 (#2699

  • 集合期间的固定边缘大小写:引发 pytest.fail 访问时将中止整个集合。 (#2707

  • 固定 ReprFuncArgs 混合使用unicode和utf-8参数。 (#2731

改进的文档

  • 在使用自定义标记的示例中,添加演示 pytest.mark.MARKER_NAME.with_args 与…相比 pytest.mark.MARKER_NAME.__call__ (#2604

  • 在一个简单的例子中,使用 pytest_collection_modifyitems() 跳过基于命令行选项的测试,允许其共享,同时防止访问时出现用户错误 pytest.config 在参数解析之前。 (#2653

细微/内部变化

  • 修复了“良好实践/手动集成”代码段中的小错误。 (#2691

  • 修正了goodpractices.rst中的拼写错误。 (#2721

  • 改进用户指导 --resultlog 贬低。 (#2739

Pytest 3.2.1(2017-08-08)

漏洞修补

  • 修复了采集单个测试项目时出现的小型终端故障。 (#2579

  • 正确考虑 / 作为文件分隔符自动标记插件文件以便在Windows上重写。 (#2591

  • 设置时正确转义测试名称 PYTEST_CURRENT_TEST 环境变量。 (#2644

  • 在Windows和Python 3.6+上修复错误 sys.stdout 已替换为不实现完整 io 模块缓冲协议。尤其是这种影响 pytest-xdist 上述平台上的用户。 (#2666

改进的文档

  • 明确记录哪些pytest特性可以使用 unittest . (#2626

Pytest 3.2.0(2017-07-30)

弃用和移除

  • pytest.approx 不再支持 >>=<<= 避免意外/不一致行为的运算符。见 the approx docs 更多信息。 (#2003

  • 此时,Pytest API中当前类中所有旧的特定于样式的行为都被视为已弃用,并将在将来的版本中删除。这只影响python 2用户,而且在极少数情况下。 (#2147

  • 在中为参数使用标记时,现在将引发一个取消预测警告。 pytest.mark.parametrize . 使用 pytest.param 将标记应用于参数。 (#2427

特征

  • 将对numpy数组(和dict)的支持添加到大约。 (#1994

  • 现在测试函数对象有一个 pytestmark 包含直接应用于测试函数的标记列表的属性,而不是从父类或模块继承的标记。 (#2516

  • 集合默认忽略本地virtualenv; --collect-in-virtualenv 重写此行为。 (#2518

  • 允许类方法修饰为 @staticmethod 作为一个测试函数作为集合的候选者。(仅适用于python 2.7及更高版本。python 2.6仍将忽略静态方法。) (#2528

  • 介绍 mark.with_args 以便允许将函数/类作为唯一参数传递给标记。 (#2540

  • 新的 cache_dir ini选项:设置存储缓存插件内容的目录。目录可以是相对路径或绝对路径:如果是相对路径,则目录是相对于 rootdir ,否则按原样使用。另外,路径可能包含在运行时展开的环境变量。 (#2543

  • 介绍 PYTEST_CURRENT_TEST 使用设置的环境变量 nodeid 阶段 (setupcallteardown )当前正在执行的测试。见 documentation 更多信息。 (#2583

  • 介绍 @pytest.mark.filterwarnings 标记允许覆盖每个测试、类或模块级别上的警告筛选器。见 docs 更多信息。 (#2598

  • --last-failed 现在永远记住当一个测试失败时,只有当它再次通过时才会忘记它。这使得通过有选择地运行文件和增量地修复测试套件变得容易。 (#2621

  • 新的 pytest_report_collectionfinish 钩子,允许插件在成功完成收集后向终端报告添加消息。 (#2622

  • 为添加了支持 PEP-415's Exception.__suppress_context__ . 现在如果 raise exception from None 被pytest捕获,pytest将不再链接测试报告中的上下文。该行为现在与Python的回溯行为相匹配。 (#2631

  • 由引发的异常 pytest.failpytest.skippytest.xfail 现在将baseexception子类化,这使得它们很难被正常代码无意中捕获。 (#580

漏洞修补

  • 集合 stdin 关闭 PIPE 在里面 pytester.py.Testdir.popen() 避免不必要的互动 pdb (#2023

  • 添加缺失 encoding 属性到 sys.std* 使用时流 capsys 捕获模式。 (#2375

  • 在Windows上将终端颜色更改为黑色 colorama 在中导入 conftest.py 文件。 (#2510

  • 在报告跳过的测试的摘要时修复行号。 (#2548

  • 捕获:确保encodedfile.name是字符串。 (#2555

  • 选项 --fixtures--fixtures-per-test 现在将在docstring中保留缩进。 (#2574

  • doctests行号现在报告正确,正在修复 pytest-sugar#122 . (#2610

  • 按照fixture集合的顺序修复不确定性。为python 2.6添加新的依赖项(ordereddict)。 (#920

改进的文档

  • 澄清 pytest_configure 挂接调用指令。 (#2539

  • 用扩展文档来测试插件代码 pytester 插件。 (#971

细微/内部变化

  • 更新的帮助消息 --strict 为了清楚起见,它只处理未注册的标记,而不是警告。 (#2444

  • 内部代码移动:将pytest.about/pytest.raises的代码移动到自己的文件中,以减小python.py的大小。 (#2489

  • 已重命名实用程序函数 _pytest.compat._escape_strings_ascii_escaped 更好地传达功能的目的。 (#2533

  • 使用skip/skipif改进CollectError的错误消息。 (#2546

  • 发出关于的警告 yield 每个生成器只否决一次测试。 (#2562

  • 确保最终收集的行不包括以前写入的工件。 (#2571

  • 已修复所有薄片8错误和警告。 (#2581

  • 补充 fix-lint 在tox环境下运行pep8自动修复代码。 (#2582

  • 将警告转换为pytest自己的测试套件中的错误,以便更迅速地捕获由于降级而导致的回归。 (#2588

  • 在changelog条目中显示多个问题链接。 (#2620

Pytest 3.1.3(2017-07-03)

漏洞修补

  • 修复python 2中doctests在docstrings中的解码错误。 (#2434

  • 终结器在拆卸期间引发的异常现在被抑制,直到调用所有终结器,并重新引发初始异常。 (#2440

  • 在命令行上指定测试时,修复错误的“收集的项目”报告。 (#2464

  • deprecated_call 现在,在上下文管理器窗体中,即使已经发出了相同的警告,也会捕获拒绝警告。也, deprecated_call 将始终生成相同的错误消息(以前它将在上下文管理器和函数调用模式中生成不同的消息)。 (#2469

  • 修复Pytest收集的路径可能具有三个前导的问题 / 字符。 (#2475

  • 在尝试检测递归回溯的开始时修复内部错误。 (#2486

改进的文档

  • 显式声明调用在第一个非无结果之后停止。 (#2493

细微/内部变化

  • 创建用于更新自动添加的包的调用任务。 (#2474

  • 在license、readme.rst和文档中更新版权日期。 (#2499

Pytest 3.1.2(2017-06-08)

漏洞修补

  • 通过添加所需选项 pytest_addoption 将不再阻止使用——帮助而不传递它们。(1999)

  • 尊重 python_files 在断言重写中。(2121)

  • 修复跟踪中的帧包含无法比较的对象(如 numpy 数组)。(2459)

  • UnicodeWarning 仅当消息包含非ASCII Unicode(仅限python 2)时才从内部pytest warnings插件发出。(2463)

  • 为python 3.6添加了一个变通方法 WindowsConsoleIO 因Pytests而断裂 FDCapture . 使用控制台句柄的其他代码可能仍然受到非常相同的问题的影响,可能需要进一步的解决方法/修复,即。 colorama . (2467)

改进的文档

  • 修复内部API链接到 pluggy 物体。(2331)

  • 清楚地表明 pytest.xfail 在调用点停止测试执行并改进 skipping 博士学位。(810)

Pytest 3.1.1(2017-05-30)

漏洞修补

  • pytest警告捕获不再覆盖现有的警告筛选器。先前的行为将覆盖所有过滤器,并导致测试套件中的回归,这些测试套件配置警告过滤器以满足其需求。注意,作为副作用,这是 DeprecationWarningPendingDeprecationWarning 默认情况下不再显示。(2430)

  • 修复doctest文本文件中非ASCII内容的问题。(2434)

  • 修复python 2中unicode警告的编码错误。(2436)

  • pytest.deprecated_call 现在捕捉 PendingDeprecationWarning 在上下文管理器窗体中。(2441)

改进的文档

  • 为变更日志管理添加Towncrier。(2390)

3.1.0(2017-05-22)

新特点

  • 这个 pytest-warnings 插件已经集成到核心中,现在 pytest 在测试会话结束时自动捕获并显示警告。

    警告

    此功能可能会中断应用和处理警告本身的测试套件,并且可以在 pytest.ini

    [pytest]
    addopts = -p no:warnings
    

    warnings documentation page 更多信息。

    谢谢 @nicoddemus 为了PR.

  • 补充 junit_suite_name 指定根目录的ini选项 <testsuite> JUnit XML报告的名称 (#533) .

  • 添加了一个ini选项 doctest_encoding 指定用于doctest文件的编码。谢谢 @wheerd 对于公关 (#2101) .

  • pytest.warns 现在检查子类关系,而不是类相等。谢谢 @lesteve 对于公关 (#2166)

  • pytest.raises 现在断言错误消息将文本或regex与 match 关键字参数。谢谢 @Kriechi 为了PR.

  • pytest.param 可用于用标记和测试ID声明测试参数集。谢谢 @RonnyPfannschmidt 为了PR.

变化

  • 删除pytest_名称空间钩子的所有内部使用,这是为了准备在pytest 4.0中删除preloadconfig,因为 @RonnyPfannschmidt 为了PR.

  • 当可调用ID在参数化测试中出现时,pytest会发出警告。谢谢 @fogo 为了PR.

  • 现在可以通过设置 __test__ 属性到 False 在课堂上 (#2007) . 多亏了 @syre 报告和 @lwm 为了PR.

  • 更改junitxml.py以生成符合junitxml模式的报告。如果相同的测试在调用中失败,然后在拆卸中出错,那么我们将testcase元素分为两部分,一部分包含错误,另一部分包含失败。 (#2228) 多亏了 @kkoukiou 为了PR.

  • 带有 url 属性现在将正确地将其写入JUnitXML。谢谢 @fushi 对于公关 (#1874) .

  • 当verbosity=1时,从dict比较输出中删除公共项。同时更新截断消息,以更清楚地表明,如果详细性<2,pytest将截断所有断言消息。 (#1512) . 谢谢 @mattduck 对于公关

  • --pdbcls 不再暗示 --pdb . 这样就可以使用 addopts=--pdbcls=module.SomeClasspytest.ini . 谢谢 @davidszotten 对于公关 (#1952) .

  • 修理 #2013 :将记录转换为 namedtuple 在防止不必要的修改的同时,给它一个可理解的报告。

  • 修理 #2208 :确保u pytest.compat.get u real u func的迭代限制。谢谢 @RonnyPfannschmidt 报告和公关。

  • 钩子现在在收集完成后进行验证,而不是在加载已安装的插件后立即进行验证。这使得为将在收集期间加载的插件编写钩子变得容易,例如使用 pytest_plugins 特殊变量 (#1821) . 谢谢 @nicoddemus 为了PR.

  • 修改 pytest_make_parametrize_id() 钩子接受 argname 作为附加参数。谢谢 @unsignedint 为了PR.

  • 添加 venv 默认情况下 norecursedirs 设置。谢谢 @The-Compiler 为了PR.

  • PluginManager.import_plugin 现在接受Python2中的Unicode插件名称。谢谢 @reutsharabani 为了PR.

  • 修理 #2308 :同时使用两者时 --lf--ff ,只运行上次失败的测试。谢谢 @ojii 为了PR.

  • 用占位符替换文档中的次要/补丁级别版本号。这显著降低了变更噪音,因为不同的贡献者在不同的平台上重新生成文档。谢谢 @RonnyPfannschmidt 为了PR.

  • 修理 #2391 :考虑所有插件模块上的pytest插件谢谢 @RonnyPfannschmidt 为了PR.

漏洞修补

  • 固定 AttributeErrorsys.stdout.buffer / sys.stderr.buffer 使用时 capsys python 3中的fixture。 (#1407) . 多亏了 @asottile .

  • 更改捕获.py DontReadFromInput 类投掷 io.UnsupportedOperation 错误而不是值错误 fileno 方法 (#2276) . 谢谢 @metasyn@vlad-dragos 为了PR.

  • 当异常消息包含非ASCII字符时,在导入模块时修复异常格式 (#2336) . 谢谢 @fabioz 报告和 @nicoddemus 为了PR.

  • 添加了与问题相关的文档 (#1937) 谢谢 @skylarjhdownes 为了PR.

  • 允许以python模块的形式收集具有任何文件扩展名的文件 (#2369) . 谢谢 @Kodiologist 为了PR.

  • 收集带有错误参数的“参数化”func时显示正确的错误消息 (#2383) . 谢谢 @The-Compiler 报告和 @robin0371 为了PR.

3.0.7(2017年3月14日)

  • 修复由于模块在导入失败时自动放弃其他模块而导致断言重写中断的问题,尤其是导入 anydbm 模块是固定的。 (#2248) . 谢谢 @pfhayes 为了PR.

  • JUnitXML:修复有问题的情况,其中XML报告中每个testcase元素出现两次system out标记。谢谢 @kkoukiou 为了PR.

  • 修复回归,如果使用 --pdb (#2137) . 多亏了 @gst 报告和 @mbyt 为了PR.

  • 忽略在Python测试收集期间从描述符(例如属性)引发的异常 (#2234) . 多亏了 @bluetech .

  • --override-ini 现在正确地覆盖一些基本选项,比如 python_files (#2238) . 谢谢 @sirex 报告和 @nicoddemus 为了PR.

  • 替换 raise StopIteration 代码中的用法 returns 按照 PEP-479 (#2160) . 多亏了 @nicoddemus 为了PR.

  • 修复无法打印时的内部错误 AssertionError 在测试中引发。谢谢 @omerhadari 为了PR.

  • 跳过插件现在也可以使用自定义收集器生成的测试项 (#2231) . 多亏了 @vidartf .

  • 如果没有显示.ini文件,请修复控制台输出中的尾随空格 (#2281) . 谢谢 @fbjorn 为了PR.

  • 无条件的 xfail 标记不再依赖作为实例的基础测试项 PyobjMixin 因此,可以应用于未由内置的Python测试收集器收集的测试。谢谢 @barneygale 为了PR.

3.0.6(2017-01-22)

  • pytest不再生成 PendingDeprecationWarning 从它自己的操作中,在版本中被错误地引入 3.0.5 (#2118) . 多亏了 @nicoddemus 报告和 @RonnyPfannschmidt 为了PR.

  • Pytest不再将协同作用识别为产量测试。 (#2129) . 多亏了 @malinoff 为了PR.

  • 插件由加载 PYTEST_PLUGINS 环境变量现在自动考虑用于断言重写 (#2185) . 谢谢 @nicoddemus 为了PR.

  • 改进pytest.warning失败时的错误消息 (#2150) . 预期警告的类型和捕获的警告列表将添加到错误消息中。谢谢 @lesteve 为了PR.

  • 固定 pytester 内部插件可与最新版本的 zope.interface (#1989) . 谢谢 @nicoddemus 为了PR.

  • 断言的语句 pytester 插件再次受益于断言重写 (#1920) . 谢谢 @RonnyPfannschmidt 报告和 @nicoddemus 为了PR.

  • 使用冒号指定测试 test_foo.py::test_bar 对于具有ini配置文件的子目录中的测试,现在使用正确的ini文件 (#2148) . 谢谢 @pelme .

  • 失败 testdir.runpytest().assert_outcomes() 显式地,如果它所依赖的pytest终端输出丢失。多亏了 @eli-b 为了PR.

3.0.5(2016年12月5日)

  • 不通过时添加警告 option=value 正确地 -o/--override-ini (#2105) . 还改进了帮助文档。多亏了 @mbukatov 报告和 @lwm 为了PR.

  • 现在 --confcutdir--junit-xml 如果它们分别是目录和文件名,则被正确验证 (#2089#2078 )多亏了 @lwm 为了PR.

  • 向错误消息添加提示提示可能丢失 __init__.py (#478) . 谢谢 @DuncanBetts .

  • 在文档中更准确地描述夹具定型的时间 (#687) . 谢谢 @DuncanBetts .

  • 提供 :ref: 目标 recwarn.rst 所以我们可以使用intersphinx引用。多亏了 @dupuy 报告和 @lwm 为了PR.

  • 在python 2中,使用一个简单的 +- 字符串表示形式中的ASCII字符串 pytest.approx (例如 "4 +- 4.0e-06" )因为在Pytest中,在不同的上下文和内部表示中处理它是很脆弱的,这会导致诸如 #2111 . 在python 3中,表示仍然使用 ± (例如 4 ± 4.0e-06 )谢谢 @kerrick-lyft 报告和 @nicoddemus 为了PR.

  • 使用 item.Functionitem.Module 等,现在正在发布弃用警告,首选 pytest.Functionpytest.Module 等,而不是 (#2034) . 谢谢 @nmundar 为了PR.

  • 使用修复错误消息 approx 带复数 (#2082) . 谢谢 @adler-j 报告和 @nicoddemus 为了PR.

  • 修正了断言重写钩子对由 pytest_plugins 机制。谢谢 @nicoddemus 为了PR.

  • 删除可能导致挂接的内部缓存 conftest.py 子目录中的文件在其他目录中被错误调用 (#2016) . 谢谢 @d-b-w 报告和 @nicoddemus 为了PR.

  • 删除旨在支持早期python 3版本的内部代码,这些版本产生了离开的副作用。 None 在里面 sys.modules 当表达式由pytest计算时(例如,将条件作为字符串传递给 pytest.mark.skipif ) (#2103 )谢谢 @jaraco 报告和 @nicoddemus 为了PR.

  • 优雅地处理没有匹配.py文件的.pyc文件 (#2038) . 谢谢 @nedbat .

3.0.4(2016年11月9日)

  • 收集测试模块时的导入错误现在显示完整的回溯 (#1976) . 谢谢 @cwitty 报告和 @nicoddemus 为了PR.

  • 用两个或多个自定义选项修复混淆的命令行帮助消息 metavar 性质 (#2004) . 谢谢 @okulynyak@davehunt 报告和 @nicoddemus 为了PR.

  • 加载插件时,包含非ASCII消息的导入错误现在可以在python 2中正确处理。 (#1998) . 谢谢 @nicoddemus 为了PR.

  • 固定循环引用 pytest.raises 在上下文管理器窗体中使用 (#1965) . 同样,由于此修复, sys.exc_info() 在上下文管理器和函数调用用法中都保留为空。以前, sys.exc_info 将包含上下文管理器捕获的异常,即使在发生预期的异常时也是如此。谢谢 @MSeifert04 报告和公关。

  • 修正了断言重写钩子对被重写但后来被显式标记的模块发出的误报警告。 pytest.register_assert_rewrite 或隐式作为插件 (#2005) . 谢谢 @RonnyPfannschmidt 报告和 @nicoddemus 为了PR.

  • 测试失败时报告拆卸输出 (#442) . 谢谢 @matclab 为了PR.

  • 修复生成的XUnit XML中的拆卸错误消息。谢谢 @gdyuldin 为了PR.

  • 正确处理中的异常 multiprocessing 任务 (#1984) . 谢谢 @adborden 报告和 @nicoddemus 为了PR.

  • 测试完成后清理UnitTest测试用例对象 (#1649) . 谢谢 @d_b_w 报告和公关。

3.0.3(2016年9月28日)

  • 这个 ids 参数 parametrize 再次接受 unicode python 2中的字符串 (#1905) . 谢谢 @philpep 报告和 @nicoddemus 为了PR.

  • 现在正在为开发模式中的插件重写断言。 (pip install -e ) (#1934) . 谢谢 @nicoddemus 为了PR.

  • 修复Jython项目中的pkg_资源导入错误 (#1853) . 谢谢 @raquel-ucl 为了PR.

  • 摆脱 AttributeError: 'Module' object has no attribute '_obj' python 3中的异常 (#1944) . 谢谢 @axil 为了PR.

  • 解释传递给 @fixture 声明或 MetaFunc.parametrize() 打电话。

  • 此版本包括 pluggy-0.4.0 ,正确处理 VersionConflict 插件中的错误 (#704) . 谢谢 @nicoddemus 为了PR.

3.0.2(2016年9月1日)

  • 在向传递非字符串ID时改进错误消息 pytest.mark.parametrize (#1857) . 谢谢 @okken 报告和 @nicoddemus 为了PR.

  • 添加 buffer 属性到stdin stub类 pytest.capture.DontReadFromInput 谢谢 @joguSD 为了PR.

  • 固定 UnicodeEncodeError 当与Unicode的字符串比较失败时。 (#1864) 谢谢 @AiOO 为了PR.

  • pytest_plugins 如果定义为字符串(而不是字符串序列),则在考虑模块进行断言重写时正确处理。由于这个错误,如果测试套件使用 pytest_plugins (#1888) . 谢谢 @jaraco 报告和 @nicoddemus 对于公关 (#1891) .

  • 从运行测试时不要调用拆卸和清理 unittest.TestCase 子类 --pdb 启用。这允许对所有在拆卸机器中具有重要逻辑的应用程序进行适当的事后调试。 (#1890) . 谢谢 @mbyt 为了PR.

  • 修复已弃用的 getfuncargvalue 内部doctest插件中的方法。谢谢 @ViviCoder 对于报告 (#1898) .

3.0.1(2016年8月23日)

3.0.0(2016年8月18日)

不兼容的更改

在此版本中进行了许多不兼容的更改,目的是删除长期以来不推荐使用的功能,或更改现有行为,以使它们不那么令人惊讶/更有用。

  • 现在已删除重新解释模式。只有纯模式和重写模式可用,因此 --assert=reinterp 选项不再可用。这也意味着从插件或 conftest.py 默认情况下不会从改进的断言中受益,您应该使用 pytest.register_assert_rewrite() 为这些文件显式打开断言重写。谢谢 @flub 为了PR.

  • 已删除以下不推荐使用的命令行选项:

    • --genscript :不再支持;

    • --no-assert 使用 --assert=plain 相反;

    • --nomagic 使用 --assert=plain 相反;

    • --report 使用 -r 相反;

    多亏了 @RedBeardCode 对于公关 (#1664) .

  • 插件中的importErrors现在是一个致命错误,而不是发出pytest警告 (#1479) . 多亏了 @The-Compiler 为了PR.

  • 删除了python 3版本<3.3的支持代码 (#1627) .

  • 全部删除 py.test-X* 入口点。版本化、后缀化的入口点从未被记录下来,并且是前virtualenv时代遗留下来的。这些入口点也会在轮子中创建断开的入口点,因此移除它们也会为用户消除混淆。 (#1632) . 谢谢 @obestwalter 为了PR.

  • pytest.skip() 现在,当用于修饰测试函数时,会引发一个错误,而不是它的原始意图(强制跳过测试函数内部的测试)。以前这种用法会导致跳过整个模块 (#607) . 谢谢 @omarkohl 对于完整的公关 (#1519) .

  • 如果发生集合错误,则退出测试。一项民意调查显示,大多数用户一看到收集错误就会立刻点击ctrl-c,所以pytest也可以将其设为默认行为。 (#1421) . 一 --continue-on-collection-errors 已添加选项以恢复以前的行为。谢谢 @olegpidsadnyi@omarkohl 对于完整的公关 (#1628) .

  • 已重命名pytest pdb 模块(插件)到 debugging 以避免与内置设备发生冲突 pdb 模块。

  • 在运行时请求参数化夹具时发出有用的故障消息,例如 request.getfixturevalue . 以前,这些参数从未被定义过,所以一个固定装置被装饰成 @pytest.fixture(params=[0, 1, 2]) 只运行一次 (#460) . 多亏了 @nikratio 对于错误报告, @RedBeardCode@tomviner 为了PR.

  • _pytest.monkeypatch.monkeypatch 类已重命名为 _pytest.monkeypatch.MonkeyPatch 所以它不会与 monkeypatch 固定装置。

  • --exitfirst / -x 现在可以被以下内容覆盖 --maxfail=N 只是 --maxfail=1 .

新特点

  • 支持鼻型 __test__ 类方法的属性,包括UnitTest样式类。如果设置为 False ,将不收集测试。

  • 新的 doctest_namespace 用于将名称插入运行doctest的命名空间的设备。谢谢 @milliams 对于完整的公关 (#1428) .

  • 新的 --doctest-report 选项,用于在运行(失败)doctests(implements)时更改diff的输出格式 #1749 )谢谢 @hartym 为了PR.

  • 新的 name 参数 pytest.fixture decorator,它允许为fixture自定义名称(以解决funcard阴影fixture问题)。谢谢 @novas0x2a 对于完整的公关 (#1444) .

  • 新的 approx() 用于在测试中轻松比较浮点数的函数。谢谢 @kalekundert 对于完整的公关 (#1441) .

  • 通过访问内部 junitxml 插件(实验)。谢谢 @tareqalayan 对于完整的公关 #1454

  • 新的 ExceptionInfo.match() 方法以匹配异常的字符串表示形式上的正则表达式 (#372) . 谢谢 @omarkohl 对于完整的公关 (#1502) .

  • __tracebackhide__ 现在也可以设置为一个可调用的,然后可以决定是否根据 ExceptionInfo 对象传递给它。谢谢 @The-Compiler 对于完整的公关 (#1526) .

  • 新的 pytest_make_parametrize_id(config, val) 钩子,插件可以使用它为自定义类型提供友好的字符串。谢谢 @palaviv 为了PR.

  • capsyscapfd 现在有一个 disabled() 上下文管理器方法,可用于临时禁用测试中的捕获。谢谢 @nicoddemus 为了PR.

  • 新CLI标志 --fixtures-per-test :显示每个所选测试项使用的夹具。默认情况下具有装置的文档字符串。如果与 -v . 谢谢 @hackebrot 为了PR.

  • 介绍 pytest 命令作为建议的入口点。注意 py.test 仍在工作,未计划移除。关闭提议 #1629 . 谢谢 @obestwalter@davehunt 对于完整的公关 (#1633) .

  • 新CLI标志:

    • --setup-plan :执行正常收集并报告潜在的设置和拆卸,不执行任何装置和测试;

    • --setup-only :执行正常收集,执行设备的设置和拆卸并报告它们;

    • --setup-show :执行正常的测试执行,并额外显示夹具的设置和拆卸;

    • --keep-duplicates :py.test现在忽略命令行中给定的重复路径。若要通过在命令行中多次指定相同的测试来保留以前的行为,请通过 --keep-duplicates 参数 (#1609) ;

    谢谢 @d6e@kvas-it@sallner@ioggstream@omarkohl 对于PRS。

  • 新CLI标志 --override-ini/-o :覆盖ini文件中的值。例如: "-o xfail_strict=True" '.谢谢 @blueyed@fengxx 为了PR.

  • 新钩子:

    • pytest_fixture_setup(fixturedef, request) :执行夹具设置;

    • pytest_fixture_post_finalizer(fixturedef) :在设备的终结器之后调用,并且可以访问设备的结果缓存。

    谢谢 @d6e@sallner .

  • 为测试为元组文本的断言发出警告。这种断言永远不会失败,因为元组总是正确的,而且通常是错误的(见 #1562 )谢谢 @kvas-it 为了PR.

  • 允许传递自定义调试器类(例如 --pdbcls=IPython.core.debugger:Pdb )多亏了 @anntzer 为了PR.

Changes

  • 插件现在受益于断言重写。谢谢 @sober7@nicoddemus@flub 为了PR.

  • 变化 report.outcome 对于 xpassed 测试到 "passed" 在非严格模式和 "failed" 在严格模式下。多亏了 @hackebrot 对于公关 (#1795) 和 @gprasad84 作为报告 (#1546) .

  • 测试标记为 xfail(strict=False) (默认)现在在JUnitXML报告中显示为通过测试而不是跳过。多亏了 @hackebrot 对于公关 (#1795) .

  • 突出显示错误报告中文件位置的路径,以便于复制/粘贴。谢谢 @suzaku 对于公关 (#1778) .

  • 有标记的固定装置 @pytest.fixture 现在可以使用 yield 语句与标记为 @pytest.yield_fixture 装饰符。此更改呈现 @pytest.yield_fixture 已弃用并使 @pytest.fixture 具有 yield 语句编写拆卸代码的首选方法 (#1461) . 谢谢 @csaftoiu 为了引起注意和 @nicoddemus 为了PR.

  • 显式传递的参数化ID不会转义到ASCII (#1351) . 谢谢 @ceridwen 为了PR.

  • 当在测试函数中声明未知设备时,设备现在在显示的错误消息中排序。谢谢 @nicoddemus 为了PR.

  • pytest_terminal_summary 钩子现在接受 exitstatus 作为参数的测试会话。谢谢 @blueyed 对于公关 (#1809) .

  • 参数化ID可以接受 None 作为特定的测试ID,在这种情况下,将使用为该参数自动生成的ID。谢谢 @palaviv 对于完整的公关 (#1468) .

  • XUnit样式设置/拆卸方法的参数 (setup_methodsetup_module 等)现在是可选的,可以省略。谢谢 @okken 为了引起注意和 @nicoddemus 为了PR.

  • 改进了参数化中出现重复ID时的自动ID生成选择。谢谢 @palaviv 对于完整的公关 (#1474) .

  • 现在,默认情况下会显示pytest警告摘要。添加了新标志 --disable-pytest-warnings 显式禁用警告摘要 (#1668) .

  • 通过提醒用户检查测试模块/包的名称,使收集过程中的导入错误更加明确。 (#1426) . 谢谢 @omarkohl 对于完整的公关 (#1520) .

  • 添加 build/dist/ 默认情况下 --norecursedirs 名单。谢谢 @mikofski 报告和 @tomviner 对于公关 (#1544) .

  • pytest.raises 在上下文管理器窗体中接受自定义 message 在没有发生异常时引发。谢谢 @palaviv 对于完整的公关 (#1616) .

  • conftest.py 文件现在受益于断言重写;以前它只对测试模块可用。谢谢 @flub@sober7@nicoddemus 对于公关 (#1619) .

  • 没有任何教义的文本文档不再显示为“跳过”。谢谢 @graingert 用于报告和提供完整的公关 (#1580) .

  • 确保在命令行上指定命名空间包中的模块时,可以与 --pyargs 选择权。多亏了 @taschini 对于公关 (#1597) .

  • 在断言重写期间始终包括完整的断言解释。以前的行为隐藏了 False ,假设这是冗余信息。谢谢 @bagerard 报告 (#1503) . 多亏了 @davehunt@tomviner 为了PR.

  • OptionGroup.addoption() 现在检查之前是否已经添加了选项名,以便更容易跟踪问题,如 #1618 . 以前,你只在以后收到例外 argparse 库,不提供有关双重添加选项的实际原因的线索。

  • yield -基于测试被视为已弃用,将在Pytest-4.0中删除。谢谢 @nicoddemus 为了PR.

  • [pytest] 章节在 setup.cfg 现在应命名文件 [tool:pytest] 要避免与其他distutils命令冲突(请参见 #567[pytest] 章节在 pytest.initox.ini 文件受支持且未更改。谢谢 @nicoddemus 为了PR.

  • 使用 pytest_funcarg__ 声明设备的前缀被视为已弃用,将在pytest-4.0中删除。 (#1684) . 谢谢 @nicoddemus 为了PR.

  • 将命令行字符串传递给 pytest.main() 在Pytest-4.0中被视为已弃用并计划删除。建议改为传递参数列表 (#1723) .

  • 重命名 getfuncargvaluegetfixturevalue . getfuncargvalue 仍然存在,但现在被视为已弃用。多亏了 @RedBeardCode@tomviner 对于公关 (#1626) .

  • optparse 类型使用现在触发拒绝警告 (#1740) .

  • optparse 向后兼容性支持浮点/复杂类型 (#457) .

  • 用于确定 rootdir ,只考虑修复许多问题的有效路径: #1594#1435#1471 . 根据当前行为更新文档。多亏了 @blueyed@davehunt@matthiasha 为了PR.

  • 始终包括完整的断言解释。先前的行为是隐藏恰好是假的子表达式,假设这是多余的信息。谢谢 @bagerard 报告 (#1503) . 多亏了 @davehunt@tomviner 为PR.

  • 如果不使用参数化变量,则显示更好的消息(请参见 #1539 )多亏了 @tramwaj29 为了PR.

  • 以更统一的样式更新了docstring。

  • 为添加stderr write pytest.exit(msg) 启动期间。以前从未显示消息。谢谢 @BeyondEvil 报告 #1210 . 感谢@jgsonesen和 @tomviner 为了PR.

  • 不再显示错误的测试取消选择原因 (#1372) . 谢谢 @ronnypfannschmidt 为了PR.

  • 这个 --resultlog 命令行选项已被弃用:它很少被使用,而且有更多的现代和更好的选项(请参见 #830 )谢谢 @nicoddemus 为了PR.

  • 改进fixture查找错误的错误消息:在第一行添加“e”,在其余行添加“>”。修正 #717 . 谢谢 @blueyed 对于报告和公关, @eolo999 对于初始PR和 @tomviner 为他在2016年欧洲短运行中的指导。

漏洞修补

  • 参数化现在正确处理重复的测试ID。

  • 修复内部错误问题 method 缺少参数 teardown_method() (#1605) .

  • 修复异常可视化,以防在测试期间删除当前工作目录(CWD) (#1235) . 谢谢 @bukzor 用于报告。公关 @marscher .

  • 改进带括号逻辑表达式的测试输出 (#925) . 谢谢 @DRMacIver 用于报告和 @RedBeardCode 为了PR.

  • 为以换行符结尾的字符串创建正确的diff (#1553) . 谢谢 @Vogtinator 用于报告和 @RedBeardCode@tomviner 为了PR.

  • ConftestImportFailure 现在显示了回溯,使在 conftest.py 文件夹 (#1516) . 谢谢 @txomon 为了PR.

  • 没有任何教义的文本文档不再显示为“跳过”。谢谢 @graingert 用于报告和提供完整的公关 (#1580) .

  • 固定的自定义类集合 __new__ 方法。修正 #1579 . 多亏了 @Stranger6667 为了PR.

  • metafunc.parameterize内的固定范围重写 (#634) . 多亏了 @Stranger6667 为了PR.

  • 修复了JUnit XML输出中的总测试计数 (#1798) . 多亏了 @cboelsen 为了PR.

  • 修正了一个错误,行来自 request.node.warn . 多亏了 @blueyed 为了PR.

2.9.2(2016年5月31日)

漏洞修补

  • 修理 #510 :跳过一个参数化维度为空的测试,感谢Alex Stapleton提供的报告和 @RonnyPfannschmidt 对于公关

  • 修复xfail不适用于条件关键字参数。谢谢 @astraw38 用于报告问题 (#1496) 和 @tomviner 对于公关 (#1524) .

  • 在将具有绝对路径的自定义配置文件放入时修复Win32路径问题 pytest.main("-c your_absolute_path") .

  • 修复引发的错误类不知道Unicode/编码字节时的最大递归深度检测。谢谢 @prusse-martin 对于公关 (#1506) .

  • 固定 pytest.mark.skip 在严格模式下使用时标记。谢谢 @pquentin 对于公关和 @RonnyPfannschmidt 显示如何修复错误。

  • 对文档的细微改进和修复。谢谢 @omarkohl 为了PR.

  • 固定 --fixtures 显示所有设备定义,而不是每个设备名称只显示一个。多亏了 @hackebrot 为了PR.

2.9.1(2016年3月17日)

漏洞修补

  • 改进插件加载失败时的错误消息。谢谢 @nicoddemus 为了PR.

  • 固定 (#1178 ): pytest.fail 使用非ASCII字符会引发内部Pytest错误。谢谢 @nicoddemus 为了PR.

  • 固定 (#469) :当params id包含时,junit不正确地分析report.nodeid :: . 谢谢 @tomviner 对于公关 (#1431) .

  • 固定 (#578 ):在故障点包含非ASCII行的syntaxerrors生成了一个内部py.test错误。谢谢 @asottile 报告和 @nicoddemus 为了PR.

  • 固定 (#1437) :传递bytestring regex模式以参数化时,尝试将其解码为utf-8,忽略错误。

  • 固定 (#649) :无法指定参数化测试节点在命令行上运行。

  • 固定 (#138) :更好地报告python 3.3+链接异常

2.9.0(2016年2月29日)

新特点

  • 新的 pytest.mark.skip 标记,无条件跳过标记的测试。谢谢 @MichaelAquilina 对于完整的公关 (#1040) .

  • --doctest-glob 现在可以在命令行中多次传递。谢谢 @jab@nicoddemus 为了PR.

  • 新的 -rp-rP 报告选项分别提供通过测试的摘要和完整输出。多亏了 @codewarrior0 为了PR.

  • pytest.mark.xfail 现在有一个 strict 选项,使 XPASS 测试套件失败的测试(默认为 False )还有一个 xfail_strict 可用于按项目配置的ini选项。谢谢 @rabbbit 请求和 @nicoddemus 对于公关 (#1355) .

  • Parser.addini 现在支持类型的选项 bool . 谢谢 @nicoddemus 为了PR.

  • 新的 ALLOW_BYTES doctest选项。这条 b doctest输出中字节字符串的前缀(类似于 ALLOW_UNICODE )谢谢 @jaraco 请求和 @nicoddemus 对于公关 (#1287) .

  • 暗示 KeyboardInterrupt 使用 --fulltrace 显示错误的选项。修正 #1366 . 多亏了 @hpk42 报告和 @RonnyPfannschmidt 为了PR.

  • 捕捉 IndexError 获取异常源位置时出现异常。修复了动态生成的代码(fixture和tests)的pytest内部错误,其中源代码行是有意伪造的。

Changes

  • 重要的py.code 已合并到 pytest 仓库作为 pytest._code . 这个决定是因为 py.code 在外面很少用 pytest 而且,由于它位于不同的存储库中,所以很难及时地修复其代码上的错误。团队希望这样能够更好地重构和改进代码。这种改变不应该影响用户,但是如果用户遇到任何奇怪的行为,让他们知道这是有用的。

    请记住 pytest._code私有的实验的 ,所以您绝对不应该显式导入它!

    请注意原件 py.code 在中仍然可用 pylib .

  • pytest_enter_pdb 现在可以选择接收pytest配置对象。谢谢 @nicoddemus 为了PR.

  • 删除了python 2.5或更低版本的代码和文档,包括删除过时的 _pytest.assertion.oldinterpret 模块。谢谢 @nicoddemus 对于公关 (#1226) .

  • CIBUILD_NUMBER 在环境中发现,即使在 -vv 没有被使用。谢谢 @The-Compiler 为了PR.

  • --lf--ff 现在支持长名称: --last-failed--failed-first 分别。谢谢 @MichaelAquilina 为了PR.

  • 向添加了预期的异常 pytest.raises 失败消息。

  • 在终端中,collection仅显示进度(“collection x items”)。这样可以避免在使用时混淆输出 --color=yes 在CI集成系统中获取颜色 (#1397) .

漏洞修补

  • 这个 -s-c 选项现在应该在 xdistConfig.fromdictargs 现在更忠实地代表了它的输入。多亏了 @bukzor 对于完整的公关 (#680) .

  • 固定 (#1290) :支持python 3.5 @ 断言重写中的运算符。谢谢 @Shinkenjoe 用于报告测试用例和 @tomviner 为了PR.

  • 修复格式化UTF-8解释消息 (#1379) . 谢谢 @biern 为了PR.

  • 固定 traceback style docs 描述所有可用选项(auto/long/short/line/native/no),使用 auto 是2.6版以后的默认设置。谢谢 @hackebrot 为了PR.

  • 固定 (#1422) :junit record_xml_属性不允许多个同名记录。

2.8.7(2016-01-24)

  • 修复1338:对monkeypatch使用可预测的对象分辨率

2.8.6(2016-01-21)

  • fix 1259:在junitxml中允许双节点,这是一个回归失败的插件组合,如pytest-pep8+pytest flakes

  • 使用Pyreadline时发生异常的解决方法 --pdb 启用标准I/O捕获。谢谢埃里克·M·布雷的公关。

  • 修复900:如果目标是 monkeypatch 调用引发 ImportError .

  • 修复1292:monkeypatch调用(setattr、setenv等)现在为o(1)。感谢大卫·R·麦克维尔的报告和布鲁诺·奥利维拉的公关。

  • 修正1223:捕获的stdout和stderr现在在进入pdb之前正确显示,当 --pdb 是用来代替被丢弃的。谢谢卡尔·利明的公关。

  • 修复1305:过程中发出的Pytest警告 pytest_terminal_summary 现在正确显示。感谢IONEL Maries Cristian的报告和布鲁诺奥利维拉的公关。

  • 修正628:修正了当doctest包含unicode时的内部unicodedecode错误。感谢Jason R.Coombs的报告和Bruno Oliveira的公关。

  • 修复1334:将捕获的stdout添加到JUnit XML报告中,报告安装错误。感谢乔治迪尔丁的公关。

2.8.5(2015年12月11日)

  • 修复1243:修复了在收集过程中注入的类属性可能会破坏pytest的问题。公关:Alexei Kozlenok,感谢Ronny Pfanschmidt和Bruno Oliveira的评论和帮助。

  • 修复1074:预计算junitxml块,而不是将整个树存储在对象中,感谢Bruno Oliveira提供的报告和Ronny Pfanschmidt提供的pr

  • Fixy 1238:FIX pytest.deprecated_call() 接收多个参数(2.8.4中引入回归)。感谢亚历克斯·加诺的报告和布鲁诺·奥利维拉的公关。

2.8.4(2015年12月6日)

  • Fixy: 1190: deprecated_call() 当同一模块中的另一个测试已经调用了弃用的函数时,现在可以工作了。感谢Mikhail Chernykh的报告和Bruno Oliveira的公关。

  • Fixy: 1198: --pastebin 选项现在可以在python 3上工作。感谢Mehdy Khoshnody的公关。

  • Fixy: 1219: --pastebin 当捕获的输出包含非ASCII字符时,现在工作正常。感谢布鲁诺·奥利维拉的公关。

  • 修复1204:使用讨厌的getattr_uuuu()收集时的另一个错误。感谢Florian Bruhin的公关。

  • 修复未运行测试时打印的摘要。感谢Florian Bruhin的公关。

  • 修复1185-确保manifest.in完全匹配应转到sdist的内容

  • 许多文档的现代化都与良好实践有关。感谢布鲁诺·奥利维拉的公关。

2.8.3(2015年11月18日)

  • Fixy 1169:添加 __name__ testcasefunction中的testcases属性,以支持函数和方法上的@unittest.skip修饰符。感谢李卡门斯基的公关。

  • 修正1035:如果测试模块级别obj有uuGetAttr_uuuu(),则收集测试。感谢Suor的报告和Bruno Oliveira/Tom Viner的公关。

  • 修复331:如果无法正确报告失败,则不要收集测试,例如,它们是类的可调用实例。

  • 修正1133:修正了过滤一个条目属于不再可用的文件的回溯时的内部错误。感谢布鲁诺·奥利维拉的公关。

  • 增强以红色突出显示失败测试的名称,使它们在输出中脱颖而出。感谢Gabriel Reis的公关。

  • 在文档中添加更多对话

  • 扩展--ignore cli选项上的文档

  • 使用Pytest Runner进行安装工具集成

  • 与OS X El Capitan系统完整性保护交互的小修补程序(感谢Florian)

2.8.2(2015年10月7日)

  • fix 1085:在python 2中将编码的字节字符串传递给pytest.parameterize时,正确处理编码错误。感谢他们的报道,感谢他们的报道,感谢布鲁诺·奥利维拉的公关。

  • 修复1087:在python 3中向pytest.parameterize传递空字节字符串时处理系统错误。感谢保罗·凯勒的报告和布鲁诺·奥利维拉的公关。

  • fix 995:修正了过滤由exec()语句生成一个条目的回溯时的内部错误。感谢丹尼尔·哈勒、阿什利·C·斯特劳、菲利普·高蒂尔和帕维尔·萨夫琴科的贡献以及布鲁诺·奥利维拉的公关。

  • 修复1100和1057:使用Autouse夹具和Doctest模块时出错。感谢谢尔盖B基尔皮切夫和重要的库兹尔卡的贡献和布鲁诺奥利维拉的公关。

2.8.1(2015年9月29日)

  • 修复1034:在addhook中的pytest_logwarning调用上添加缺少的nodeid。感谢西蒙·戈梅泽尔的公关。

  • “deprecated”现在只满足于deprecationwarning或pendingdeprecationwarning。在2.8.0之前,它接受了任何警告,2.8.0使它只接受拒绝警告(但不接受挂起的拒绝警告)。感谢Alex Gaynor和Eric Hunsberger的公关。

  • 解决问题1073:避免致电 __getattr__ 在可能的插件对象上。这修复了与Pytest Django的不兼容性。感谢Andreas Pelme、Bruno Oliveira和Ronny Pfanschmidt的贡献和Holger Krekel的修复。

  • 修复问题704:在插件加载过程中更优雅地处理版本冲突。感谢布鲁诺·奥利维拉的公关。

  • 当与“pytest xdist”插件一起使用时,修复问题1064:“--junitxml”回归,并将测试报告分配给错误的测试。感谢Daniel Grunwald的报告和Bruno Oliveira的公关。

  • (实验性的)在git repo中采用更多SEMVER风格的版本控制并更改主分支的含义:“master”分支现在保留了bug修复,针对微版本的更改。”features”分支将只与次要或主要的pytest版本一起发布。

  • 通过删除对distutils的文档引用来修复问题766。谢谢罗素·温德尔。

  • 修复问题1030:现在,字节字符串被转义以生成项节点ID,以使它们始终可序列化。感谢安迪·弗里兰的报告和布鲁诺·奥利维拉的公关。

  • python 2:如果unicode参数化值可以转换为ascii,那么它们的ascii表示法将用于节点ID。

  • 修复问题411:添加 __eq__ 断言比较示例的方法。谢谢本·韦伯。

  • 修复问题653:不推荐使用的_调用可以用作上下文管理器。

  • 修正问题877:正确处理断言解释与非ASCII代表感谢马修阿戈皮安的报告和罗尼普凡施密特的公关。

  • 修复问题1029:将缓存值写入pytest警告时转换错误

2.8.0(2015年9月18日)

  • 新的 --lf-ff 选项仅运行上次失败的测试或上次运行后的“先失败的测试”。此功能是通过将以前的外部pytest缓存插件移植到pytest核心来提供的。向后不兼容:如果您使用pytest缓存的功能来在测试运行之间持久化数据,请注意我们不再序列化集。感谢RonnyPfanschmidt的大部分合并工作。

  • “-r”选项现在接受“a”以包含所有可能的报告,类似于显式传递“fEsxXw”(issue960)。感谢阿比吉特·卡苏德的公关。

  • 通过引入特定于版本的检查助手,避免python3.5拒绝警告,谢谢Michael Droettboom。

  • 修复问题562:@nose.tools.istest现在完全尊重。

  • 修正问题934:当字符串比较失败,并且diff太大而无法在不传递-vv的情况下显示时,仍然会显示几行diff。感谢Florian Bruhin提供的报告和Bruno Oliveira提供的pr。

  • 修正问题736:修正一个错误,当与参数化标记结合时,夹具参数将被丢弃。感谢Markus Unterwaditzer的公关。

  • 修复问题110:引入allow_unicode doctest选项:启用时, u 前缀从预期doctest输出中的unicode字符串中剥离。这允许使用unicode的doctests在python 2和3中运行,而不更改。感谢JasonR.Coombs的报告和BrunoOliveira的公关。

  • 参数化现在还为枚举、regex和类对象(与类实例相反)生成有意义的测试ID。感谢Florian Bruhin的公关。

  • 添加“warning”以声明引发了警告(如“raises”)。感谢埃里克·亨斯伯格的公关。

  • 解决问题683:不要应用已经应用的标记。感谢Ojake的公关。

  • 更好地处理捕获失败的问题,以便减少丢失到/dev/null的异常。感谢大卫·斯佐顿的公关。

  • 修复问题730:取消预测并警告--genscript选项。感谢罗尼·普芬施密特的报告和克里斯蒂安·波姆兰兹的公关。

  • 修复问题751:如果用两个或更多的测试方法参数化类,则使用IDS bug进行多个参数化。感谢谢尔盖·奇皮加的报道和扬·贝德纳里克的公关。

  • 修复问题82:默认情况下,避免从setup.cfg/pytest.ini/tox.ini文件和向上加载conftest文件(--confcutdir仍可以设置为覆盖此项)。感谢布鲁诺·奥利维拉的公关。

  • 修复问题768:在python模块中找到的docstring未设置会话设备。感谢Jason R.Coombs的报道和Bruno Oliveira的公关。

  • 补充 tmpdir_factory ,一个会话范围的设备,可用于在基本临时目录下创建目录。以前此对象安装为 _tmpdirhandler 的属性 config 对象,但现在它是官方API的一部分并使用 config._tmpdirhandler 被贬低。感谢布鲁诺·奥利维拉的公关。

  • 修复问题808:pytest的内部断言重写挂钩现在实现了可选的pep302 get_data api,这样测试就可以访问它们旁边的数据文件。感谢Xmo Odoo的请求和示例,感谢Bruno Oliveira的公关。

  • rootdir和inifile现在在使用错误期间显示,以帮助用户诊断问题,例如意外的ini文件,这些文件添加了pytest正在获取的未知选项。多亏了帕维尔·萨文科在821年把这个问题引起了人们的注意,布鲁诺·奥利维拉在公共关系中也引起了人们的注意。

  • 摘要栏现在为黄色,用于警告情况,例如:跳过所有测试或xpass/xfailed,或者根本没有运行任何测试(这是对issue500的部分修复)。

  • 修复问题812:pytest现在退出,状态代码为5,在没有运行任何测试的情况下,例如命令行中给定的目录不包含任何测试,或者由于命令行选项过滤了所有测试(例如,k)。感谢埃里克·西格曼(第812期)和布鲁诺·奥利维拉的公关。

  • 摘要栏现在为黄色,用于警告情况,例如:跳过所有测试或xpass/xfailed,或者根本没有运行任何测试(与issue500相关)。谢谢埃里克·西格曼。

  • 新的 testpaths ini选项:从根目录执行pytest时要搜索测试的目录列表。当一个项目有指定好的测试目录时,这可以用来加速测试收集,这通常比为不包含测试的所有目录配置norecursedirs更实用。多亏了阿德里安的创意和布鲁诺·奥利维拉的公关。

  • 修复问题713:JUnit XML报告doctest失败。感谢Punyashloka Biswal。

  • 修复问题970:内部pytest警告现在在终端中显示为“pytest warnings”,而不是“warnings”,因此用户可以清楚地看到这些警告来自pytest而不是内置的“warnings”模块。谢谢布鲁诺·奥利维拉。

  • 在JUnitXML测试持续时间中包括安装和拆卸。谢谢Janne Vanhala。

  • 修复问题735:调试版本的python 3.4上的断言失败+

  • 新选项 --import-mode 允许更改测试模块导入行为以附加到sys.path而不是预先准备。这更好地允许对已安装的包版本运行测试模块,即使正在测试的包具有相同的导入根。在本例中:

    testing/__init__.py
    testing/test_pkg_under_test.py
    pkg_under_test/
    

    --import-mode=append 使用,而在默认情况下,它们将始终获取本地版本。感谢霍尔格·克里克。

  • Pytester:添加方法 TmpTestdir.delete_loaded_modules() ,从 inline_run() 允许重新加载临时模块。谢谢爱德华多·谢蒂诺。

  • 在内部重构PluginManager API和代码,以便在不区分pytest、相当简单的PluginManager和pytestpluginManager之间有明确的区别,后者在处理本地conftest文件时添加了许多行为。在文档方法方面,这是一个向后兼容的更改,但它仍然可能破坏依赖于细节的第三方插件,特别是pluginmanager.add_shutdown()api。谢谢霍尔格·克里克。

  • 插件管理:介绍 pytest.hookimplpytest.hookspec 用于设置impl/spec特定参数的修饰符。这替代了以前现在不赞成使用的 pytest.mark 它只包含测试函数的标记。

  • 为“编写插件”编写/优化文档,这些插件现在有自己的页面,并与“使用/安装插件”页面分开。

  • 修复问题732:正确地从任何钩子调用站点注销插件,允许在测试执行期间拥有临时插件。

  • 贬低并警告 __multicall__ hook实现中的参数。使用 hookwrapper 机制已经与Pytest-2.7一起引入。

  • 默认情况下,通过使用进程内测试,可以大大加快pytest自己的测试套件的速度(可以使用--runpytest=subprocess修改testrun,从而在许多地方创建子进程)。在测试中运行pytest的主要API是“run pytest()”或“run pytest_subprocess”和“run pytest_inprocess”(如果需要特定的测试运行方式)。在所有情况下,您都会返回一个runresult,但在进程中的这个函数也将具有一个“reprec”属性,其中包含记录的事件/报告。

  • 如果“y”不是预先存在的属性,则将monkeypatch.setattr(“x.y”,raising=false)修复为实际不提升。谢谢弗洛里安·布鲁恩。

  • 修正问题741:运行testdir.run copy/pasteable的输出,谢谢布鲁诺奥利维拉。

  • 添加新的 --noconftest 忽略一切的论点 conftest.py 文件夹。

  • 添加 fileline JUnit XML输出的属性。

  • 修复问题890:更改了所有文档文件的扩展名 txtrst . 多亏了Abhijeet的公关。

  • 修复问题114:添加在特定参数名上应用间接=真参数的功能。谢谢Elizaveta239。

  • 修复问题890:更改了所有文档文件的扩展名 txtrst . 多亏了Abhijeet的公关。

  • 修复问题957:“doctest:skip”选项现在将把doctest注册为skipped而不是passed。感谢托马斯·格雷格的报告和布鲁诺·奥利维拉的公关。

  • 问题951:添加新的记录_XML_属性fixture,它支持记录有关XML输出的附加信息。感谢大卫·迪亚兹的公关。

  • 问题949:普通选项后的路径(例如 -s-v 等)现在被正确地用于发现 rootdirini 文件夹。感谢彼得·劳里的报告和布鲁诺·奥利维拉的公关。

2.7.3(2015年9月15日)

  • 允许在中使用“dev”、“rc”或其他非整数版本字符串 importorskip . 感谢埃里克·亨斯伯格的公关。

  • 修正问题856:在所有输出中考虑--color参数(例如--fixtures)。感谢巴尼盖尔的报告和布鲁诺奥利维拉的公关。

  • 修复问题855:将str对象作为 plugins pytest.main的参数现在被解释为要导入并注册为插件的模块名,而不是静默地不起作用。感谢xmo odoo的报告和bruno oliveria的公关。

  • 修复问题744:修复ast。调用python 3.5+中的更改。感谢Guido van Rossum、Matthias Bussonnier、Stefan Zimmermann和Thomas Kluyver。

  • 修复问题842:在类中应用标记不再将此标记传播到也有标记的超类。感谢xmo odoo的报告和bruno oliveria的公关。

  • 调用pytest.deprecated后保留警告函数。感谢彼得穆德的公关。

  • 修复问题854:autouse yield_fixtures定义为unittest.testcase子类的类成员,现在按预期工作。桑克斯-克莫-奥多为报告,布鲁诺-奥利维拉为公关。

  • fix issue833:--fixtures现在显示收集的测试文件的所有fixture,而不仅仅是第一个fixture上声明的fixture。感谢弗洛里安·布鲁欣的报道和布鲁诺·奥利维拉的公关。

  • 修正问题863:当使用多个标记时满足Skip/XFail条件时,跳过的测试现在报告正确的原因。感谢拉斐尔·皮耶齐纳的报道和布鲁诺·奥利维拉的公关。

  • 优化的tmpdir夹具初始化,这将使测试会话更快(特别是在使用pytest xdist时)。唯一可见的效果是,现在pytest在$temp目录中为这个fixture创建的所有目录使用一个子目录(默认为$temp/pytest-$user)。感谢布鲁诺·奥利维拉的公关。

2.7.2(2015年6月23日)

  • 修复问题677:pytest.raisses value属性不包含python 2.6上的异常实例。感谢EricSiegerman为公共关系提供了测试用例和BrunoOliveira。

  • 自动为JUnitXML和结果日志创建目录。谢谢Aron Curzon。

  • 修复问题713:JUnit XML报告doctest失败。感谢Punyashloka Biswal。

  • 修正了问题735:调试版本的python 3.4+上的断言失败,谢谢Benjamin Peterson。

  • 修正问题114:skipif标记报告到内部跳过插件;感谢FlorisBruynooghe报告和BrunoOliveira的公关。

  • 修复问题248:UnitTest.SkipTest报告到内部Pytest UnitTest插件。感谢Thomas de Schampheleire的报道和Bruno Oliveira的公关。

  • 修复问题718:未能在python 2中创建包含不可排序元素的集合的表示形式。谢谢爱迪生·古斯塔沃·穆恩斯。

  • 修正问题756,修正问题752(和类似的问题):依赖于PY-1.4.29,它有一个改进的回溯生成算法。

2.7.1(2015年5月19日)

  • 解决问题731:不要被折叠错误解释时对象repr中可能存在且不平衡的大括号混淆。感谢CarlMeyer提供的报告和测试用例。

  • 修复问题553:正确处理fixtureLookupError中的inspect.getSourceLines故障,这将导致内部错误,使原始问题变得模糊。感谢Talljosh的初始诊断/修补程序和Bruno Oliveira的最终修补程序。

  • 修复问题660:独立于fixture参数的排序,正确报告范围不匹配访问错误。另外,还要避免不向用户提供信息的pytest内部回溯。感谢霍尔格·克里克。

  • 简化并记录发布过程。此外,现在还可以从中读取所有版本(在setup.py和文档生成中) _pytest/__init__. Py。感谢霍尔格·克里克。

  • 固定文件删除了生产夹具是实验性的概念。他们在这里待着:)谢谢布鲁诺·奥利维拉。

  • 根据要求使用环境标记来支持建筑车轮。谢谢伊奥内尔·玛丽斯·克里斯蒂安。

  • 修正了回归到2.6.4的问题,例如在测试引发SystemExit时丢失stdout捕获打印。感谢霍尔格·克里克。

  • 重新引入了Pytester插件的Pytest夹具,该插件至少由Pytest xdist使用。

2.7.0(2015年3月26日)

  • 修复问题435:当断言重写活动时使reload()工作。谢谢丹尼尔·哈勒。

  • 修复问题616:conftest.py文件及其包含的装置现在被适当地考虑为可见性,独立于确切的当前工作目录和所使用的测试参数。非常感谢ericsiegerman和他的PR235,其中包含了conftest可见性的系统测试,现在通过了。此更改还引入了 rootdir 它作为新的Pytest头文件打印,并记录在Pytest自定义网页中。

  • “转移”测试的更改报告,即在一个文件中收集但实际上来自另一个文件的测试(例如,当测试类中的测试来自不同文件中的基类时)。我们现在显示nodeid,并通过后缀指示另一个文件。

  • 添加通过环境变量pytest_addopts设置命令行选项的功能。

  • 添加了关于bitbucket和github上新的pytest开发团队的文档。看到了吗https://pytest.org/en/stable/contribution.html. 感谢阿纳托利的推动和初步工作。

  • 修复问题650:新选项 --docttest-ignore-import-errors 这将把doctest中的导入错误转换成skips。感谢Charles Cloud提供完整的公关服务。

  • 修复问题555:以不同方式解决导致python2/3将sys.exc_信息泄漏到设备/测试中导致第三方代码故障的问题。

  • 修复问题115:设置布尔运算格式时,断言重写未正确转义%符号,这是由于布尔运算与模运算符混合而触发的。感谢TomViner的报告,会诊和修复。

  • 实现issue351:添加将参数化ID指定为可调用的以生成自定义测试ID的功能。感谢BriannaLauher的想法和实施。

  • 介绍并记录新的HookWrapper机制,该机制对于希望为其目的包装某些钩子的执行的插件很有用。这将取代未登记的 __multicall__ pytest本身和一些外部插件使用的协议。注意,Pytest-2.8计划放弃支持旧的 __multicall__ 只支持HookWrapper协议。

  • 主要加快插件挂钩的调用

  • 在内置Pytest插件中使用HookWrapper机制。

  • 为doctest标志添加doctest ini选项,谢谢holger peters。

  • 向文档添加注意事项,如果您想要标记一个参数,并且该参数是可调用的,那么您还需要传递一个原因,以便将其从“decorator”案例中消除歧义。谢谢汤姆·维纳。

  • “python-classes”和“python-functions”选项现在支持用于测试发现的glob模式,如在issue600中所讨论的。谢谢你的翻译。

  • 允许用非参数化的夹具替代参数化的夹具,反之亦然(Bubenkoff)。

  • 修复问题463:“参数化”拼写错误(pfctdayelise)引发特定错误。

  • 失败论 sys.last_valuesys.last_typesys.last_traceback 设置,以便用户可以通过后期调试(almarklein)检查错误。

2.6.4(2014年10月24日)

  • 通过使用ndiff和pprint,改进iterables上的断言失败报告。

  • 已从源树中删除过期的日文文档。

  • 文件为“pytest_addhooks”钩子。谢谢布鲁诺·奥利维拉。

  • 更新了插件索引文档。谢谢布鲁诺·奥利维拉。

  • 修正问题557:使用“-k”我们只允许使用旧样式“—”在字符串的开头进行否定,甚至不推荐使用这种样式。用“not”代替。这将允许选择参数化测试,其中参数中出现“-”。

  • 修复问题604:声明消息中的转义%字符。

  • 修复问题620:在--genscript目标中添加关于二进制blob的含义的解释。谢谢迪努·盖曼。

  • 固定问题114:固定胶盒支架。

  • 修复问题620:在--genscript目标中添加关于二进制blob的含义的解释。谢谢迪努·盖曼。

  • 固定问题114:固定胶盒支架。

2.6.3(2014年9月24日)

  • 修复问题575:Xunit XML将收集错误报告为失败而不是错误,感谢Oleg Sinyavskiy。

  • 修复问题582:修复安装工具示例,感谢laszlo papp和ronny pfannschmidt。

  • 在pickle capture.encodedfile时修复无限递归错误,谢谢uwe schmitt。

  • 修复问题589:在显示异常时修复与numpy和其他人的不良交互。检查是否有精确的“最大递归深度超过”异常,而不是假定任何运行时错误是该异常(在py dep中实现)。感谢查尔斯·克劳德分析这个问题。

  • 修复与conftest相关的fixture可见性问题:当在测试包外运行CWD时,pytest将导致fixture发现错误。多亏了沃尔夫冈·施奈林想出了一个可复制的例子。

  • 引入pytest_enter_pdb hook(例如,通过pytest_timeout取消交互输入pdb时的超时)。感谢Wolfgang Schnerling。

  • 使用非python函数测试项检查xfail/skip。谢谢弗洛里斯·布鲁恩。

2.6.2(2014年9月5日)

  • 添加了函数pytest.freeze-includes(),这使得使用诸如cx-freeze这样的工具很容易将pytest嵌入到可执行文件中。有关示例和理由,请参阅文档。谢谢布鲁诺·奥利维拉。

  • 提高断言重写缓存无效精度。

  • 修正了问题561:适用于python3的自动夹具示例。

  • 修正了问题453:断言重写问题 __repr__ 包含“n”、“n”和“n~”。

  • 修复问题560:如果“else:”或“finally:”后面跟同一行的语句,则正确显示代码。

  • 修复MonkeyPatch文档中的示例,谢谢T-8ch。

  • 修正问题572:修正针对python3的tmpdir-doc示例。

  • 不要标记为通用轮,因为python 2.6由于额外的argparse依赖性而不同于其他版本。修复了问题566。谢谢桑德克。

  • 实现issue549:用户提供的断言消息现在不再替换py.test自省消息,而是显示在它们之外。

2.6.1(2014年8月7日)

  • 不再在--verbose输出中显示行号,输出现在纯粹是nodeid。行编号仍显示在故障报告中。谢谢弗洛里斯·布鲁恩。

  • 修复断言重写可能导致pytest xdist worker节点收集不同测试的问题437。谢谢布鲁诺·奥利维拉。

  • 修复问题555:添加“errors”属性以捕获流,以满足某些distuils和可能访问sys.stdout.errors的其他代码。

  • 修复问题547 capsys/capfd在禁用输出捕获(“-s”)时也可以工作。

  • 地址issue170:允许pytest.mark.xfail(…)通过可选的“raises=exc”参数指定预期的异常,其中exc可以是单个异常或异常类的元组。感谢大卫·莫尔的全面公关。

  • 修复使用“new”参数时pytest与unittest.mock.patch decorator的集成。感谢Nicolas Delaby的测试和公关。

  • 如果参数包含“::”节点ID规范(从“-v”输出粘贴副本),则修复检测conftest文件的问题。

  • 修复问题544,只需删除“::”结尾处的“@num”,如果部件扩展名为“.py”

  • 不要使用py.std导入助手,而是直接导入。谢谢布鲁诺·奥利维拉。

2.6

  • 根据范围缓存设备的异常(问题467)。

  • 修复问题537:默认情况下避免导入旧的断言重新解释代码。

  • 修复问题364:默认情况下缩短和增强回溯表示。新的“-tb=auto”选项(默认)将只显示第一个和最后一个条目的长跟踪。您可以使用“-tb=long”得到打印所有条目的旧行为。默认情况下,短条目的打印方式与“-tb=native”非常相似。

  • 修复问题514:教授断言重新解释私有类属性

  • 将-v输出更改为包含测试的完整节点ID。用户可以从测试运行中复制节点ID(包括行号),并将其用作位置参数,以便仅运行单个测试。

  • 修复问题475:如果使用错误的异常类型调用pytest.raises,则提前失败并易于理解。

  • 修复问题516:告诉您有关当前依赖项的入门知识。

  • 稍微清理setup.py并指定支持的版本。感谢Jurko Gospodnetic的公关。

  • 使用-v运行测试时,将xpass颜色更改为黄色,而不是红色。

  • 解决问题473:在双重修补时模拟将未绑定的方法放入类dict。

  • 修复问题498:如果夹具终结器失败,请确保该夹具仍然无效。

  • 修正问题453:Pytest断言比较挂钩的结果现在得到了新行转义,这样格式异常就不会爆炸。

  • 内部新的警告系统:当Pytest检测到您的测试集合或执行中的异常时,它现在将生成警告。警告最终被发送到一个新的pytest_logwarning hook,该钩子当前仅由终端插件实现,该插件在摘要行中显示警告,并在指定-rw(警告报告)时显示更多详细信息。

  • 将跳过更改为带有 __init__ 和测试模块中的可调用文件,它们看起来像一个测试,但不是函数。

  • 修复问题436:通过使用parse_known_参数的结果而不是以前的脆弱的启发式,改进了从命令行参数中查找初始conftest文件的过程。感谢Marc Abramowitz在这一领域的测试和初步固定方法。

  • 修复问题479:在收集/加载测试模块期间正确处理nose/unittest(2)skiptest异常。感谢马克·施莱奇的全面公关。

  • 修复问题490:在文档中包含pytest加载初始conftests并改进docstring。

  • 解决问题472:澄清 pytest.config.getvalue() 如果在命令行分析之前触发,则无法工作。

  • 合并pr123:在测试中改进了与mock.patch decorator的集成。

  • 修复问题412:现在捕获与stdout/stderr fd级别流发生冲突而没有崩溃。

  • 解决问题483:trial/py33现在工作正常。感谢丹尼尔·格拉纳的公关。

  • 改进Pytest与“python setup.py test”的集成示例,该测试现在有一个通用的“-a”或“-py test args”选项,您可以在其中以带引号的字符串形式传递其他选项。谢谢特雷弗·贝科莱。

  • 简化了内部捕获机制,使其对更改fd1/fd2的测试或设置更为强大,现在在单个测试中也更好地与pytest.pdb()集成。

  • 由Marc Abramowitz提供的PRS改进了Pytest自己的测试套件泄漏检测

  • 修复问题492:避免测试写入组织中的泄漏。谢谢马克·阿布拉莫维茨。

  • 修复问题493:不要在文档目录中运行测试 python setup.py test (用毒物检测法)

  • 修复问题486:更好地报告和处理早期conftest加载失败

  • 一些内部conftest处理的清理和简化。

  • 在捕获异常时,要更努力地打破引用循环。感谢Jurko Gospodnetic。

  • 修复问题443:修复跳过示例以使用适当的比较。感谢亚历克斯·格罗恩霍姆。

  • 支持鼻型 __test__ 模块、类和函数的属性,包括UnitTest样式类。如果设置为假,则不会收集测试。

  • 修复问题512:show“<not set>”for arguments which may not be set in monkeypatch plugin.改进了文档中的输出。

2.5.2(2014-01-29)

  • 修复问题409——通过不尝试从collections.abc导入,更好地与cx-freeze进行互操作,这会导致py27/cx-freeze出现问题。感谢Wolfgang L.的报告和跟踪。

  • 修正了几乎所有地方使用“py test”而不是“py.test”的文档和代码。感谢Jurko Gospodnetic的完整公关。

  • 修正问题425:在“py.test-h”末尾提到——标记和——夹具根据指定的测试路径(或当前目录)工作。

  • 修正问题413:带有unicode属性的异常现在也正确地打印在python2和pytest xdist运行中。(修复需要PY-1.4.20)

  • 从pylib 1.4.20.dev2复制、清理和集成py.io捕获(rev 13d9af95547e)

  • 解决问题416:根据conftest.py加载语义澄清文档

  • 修正问题429:在断言表达式中比较字节字符串和非ASCII字符现在效果更好。谢谢弗洛里斯·布鲁恩。

  • 将capfd/capsys.capture设为私有,其未使用且不应暴露

2.5.1(2013年12月17日)

  • 合并来自Tobias Bieniek的新文档样式pr。

  • 修复问题403:允许对集合节点内的多个同名函数进行参数化。感谢Andreas Kloeckner和Alex Gaynor的报告和分析。

  • 允许参数化的fixture通过向pytest.fixture()和pytest.yield_fixture()添加id参数来指定参数的ID。谢谢弗洛里斯·布鲁恩。

  • 通过始终使用JUnitXML插件中的二进制XML转义来修复问题404。谢谢罗尼·普芬施密特。

  • 修正问题407:修正addoption docstring指向argparse而不是optparse。谢谢丹尼尔D赖特。

2.5.0(2013年12月12日)

  • 将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,但从第一个失败的终结器中保存异常并重新引发异常,以便拆卸仍将失败。我们重新评估第一个失败的异常,因为它可能是其他终结器失败的原因。

  • 当mock.patch或其他标准装饰包装与测试方法一起使用时,修复排序。此修复程序发出346,应该有助于处理随机的“xdist”收集失败。感谢罗尼·普芬施密特和唐纳德·斯塔夫帮助将其隔离。

  • 修复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测试函数的详细报告

2.4.2(2013年10月4日)

  • 在Windows上需要colorama和更新的py lib,这样py.io.terminalwriter()现在使用colorama而不是自己的ctypes黑客。(修正了问题365)感谢保罗·摩尔提出。

  • 修复“-k”匹配的测试,其中“repr”和“attr”以及其他名称将导致错误的匹配,因为现在已正确实现了一个内部实现怪癖(不要问)。修正发行345。

  • 避免tmpdir fixture创建太长的文件名,尤其是在使用参数化时(issue354)

  • 修复pytest-pep8和pytest flakes/pytest交互(mark plugin中的集合名称假设某个项始终具有这些插件不正确的函数等),谢谢andi ze惰轮。

  • 为pytest-pep8和pytest flakes等插件引入node.get_marker/node.add_marker api,以避免node.keywords伪dicts的混乱细节。适应文档。

  • 在启动时删除“dup”stdout的尝试,因为它很恶心。正常捕获应该捕获足够多的可能导致标准FDS混乱的测试。

  • 添加pluginmanager.do_configure(config)作为指向config.do_configure()的链接,以实现插件兼容性

2.4.1(2013年10月2日)

  • 使用parser.addoption()时,“type”关键字的unicode参数也应转换为相应的类型。多谢弗洛里斯·布吕诺基,@dnozay。(修复了问题360和问题362)

  • 使用argcomplete时修复点式文件名完成,谢谢anthon van der neuth。(修复了问题361)

  • 修复使用1元组(“arg”)指定参数化(参数化的值嵌套在元组中传递)时的回归。多谢唐纳德·斯塔夫。

  • 合并文件错别字修复,谢谢安迪·德恩伯格

2.4

已知的不相容性:

  • 如果从python2.7或更高版本调用--genscript,则只能获得一个在python2.7或更高版本上工作的独立脚本。使用python2.6还可以获得python2.5兼容版本。

  • 如果相应的设置方法失败,则不会调用所有XUnit样式的TearDown方法(nose样式、pytest样式、unittest样式),请参见下面的issue322。

  • pytest-plugin-unregister钩子从来没有被正确调用过,钩子也没有已知的实现,所以它被删除了。

  • pytest.fixture-decorated函数不再是生成器(即使用yield)。如果这一变化导致不可预见的现实问题,那么在2.4.1中可以逆转。但是,您始终可以编写和返回一个内部函数/生成器,并更改fixture使用者以迭代返回的生成器。这一变化是代替新的 pytest.yield_fixture 装饰符,见下文。

新特点:

  • 实验性地介绍一种新的 pytest.yield_fixture decorator,它接受与pytest.fixture完全相同的参数,但要求 yield 语句而不是 return statement 来自fixture函数。这允许在fixture函数中与“with-style”上下文管理器直接集成,并且通常避免注册终结回调,而将“after yield”视为拆卸代码。感谢Andreas Pelme、Vladimir Keleshev、Floris Bruynooghe、Ronny Pfanschmidt和许多其他人的讨论。

  • 如果还指定了“原因”,则允许使用skipif/xfail直接使用布尔表达式。重写跳过文档以推荐“条件为布尔值”,因为它可以防止在模块之间导入标记时出现意外。将条件指定为字符串将保持完全支持。

  • 报告:根据发生的故障/错误或通过的所有内容,将最后一行涂成红色或绿色。谢谢克里斯蒂安·休纳。

  • 使“import pdb;pdb.set_trace()”以本机方式工作(不再需要“-s”),使 pytest.set_trace() 只是一条捷径。

  • 修复问题181:--pdb现在还可以处理收集错误(以及内部错误)。这是通过一个轻微的内部重构和引入一个新的钩子来实现的。 pytest_exception_interact 钩子(见下一项)。

  • 解决问题341:引入新的IDES/终端实验钩子进行拦截调试: pytest_exception_interact(node, call, report) .

  • 新的monkeypatch.setattr()变量提供了一个较短的调用,用于修补模块中的类/函数:

    monkeypatch.setattr(“requests.get”,myfunc)

    将“请求”模块的“获取”功能替换为 myfunc .

  • 修复问题322:如果SetupClass失败,则不会运行TearDowNClass。感谢马修·阿戈皮安的首次修复。另外,让所有pytest/nose终结器模拟相同的一般行为:如果安装程序存在并且失败,则不要运行teardownx。这在内部引入了一个新方法“node.addFinalizer()”helper,它只能在节点的安装阶段调用。

  • 简化pytest.mark.parameterize()签名:允许传递一个csv分隔字符串来指定参数名。例如: pytest.mark.parametrize("input,expected",  [(1,2), (2,3)]) 与上一个一样有效: pytest.mark.parametrize(("input", "expected"), ...) .

  • 添加对设置模块/拆卸模块检测的支持,谢谢Brian Okken。

  • 通过使用“argcomplete”,集成选项的选项卡完成。感谢Anthon van der Neut的公关。

  • 将选项名更改为连字符分隔的长选项,但保持旧拼写向后兼容。py.test-h将只显示连字符版本,例如“-collect only”但是“-collect only”也将保持有效(出于向后兼容的原因)。多亏了Anthon van der Neut的实施和Hynek Schlawack的推动。

  • 修复问题308-允许在参数化时标记/xfail/跳过单个参数集。谢谢布丽安娜·劳尔。

  • 调用新的Experimental Pytest_Load_Initial_ConfTests钩子,允许第三方插件在加载ConfTest之前执行某些操作。

错误修复:

  • 修复问题358-捕获选项现在通过使用新的parser.parse已知的u args方法进行更正确的分析。

  • pytest现在使用argparse而不是optparse(感谢anthon),这意味着如果安装到python2.6或更低的环境中,将添加“argparse”作为依赖项。

  • 修复问题33:修复UnitTest/Pytest钩子交互错误的情况。

  • 在收集过程中正确处理nose.skiptest。谢谢安东尼奥·库尼,罗尼·普凡施密特。

  • 修复问题355:junitxml将name=“pytest”属性放入testsuite标记。

  • 修复问题336:插件中的自动使用夹具应该可以再次工作。

  • 修复问题279:改进标准数据类型断言失败时的对象比较,并识别collections.abc。多亏了布丽安娜·劳杰和马修·阿戈皮安。

  • 修复问题117:对is-package方法的断言重写器支持

  • 修复问题335:文档py.code.exceptioninfo()对象从pytest.raises()返回,谢谢Mathieu Agopian。

  • 从setup.py中删除隐式分发安装支持。

  • 修复问题305:写入PYC文件时忽略任何问题。

  • SO-17664702:调用fixture终结器,即使fixture函数部分失败(终结器不会总是在之前调用)

  • fix issue320-当与模块级函数混合时,修复fixture的类范围。谢谢阿纳特里·布班科夫。

  • 您可以指定“-q”或“-q q”以获得不同级别的“更安静”报告(感谢Katarzyna Jachim)

  • 修复问题300-在子目录中启动py.test时修复conftest加载顺序。

  • 修复问题123-对多个模块范围的arg参数化排序

  • 使sessionfinish hook在会话开始时使用与会话开始时相同的CWD上下文执行(有助于修复插件行为,该行为使用相对路径(如pytest cov)写入输出文件)

  • 修复问题316-正确引用文档中的收集挂钩

  • 修复问题306-清理-k/-m选项以分别匹配标记/测试名称/关键字。谢谢沃特·范·阿克伊。

  • 改进了python模块中doctest的计数——没有任何doctest项的文件将不再显示,doctest示例将作为单独的测试项计数。谢谢丹尼尔·贝里尼。

  • 根据发布的py-1.4.14修复问题245,该版本将py.io.dupfile修复为不使用模式的文件。谢谢Jason R.Coombs。

  • 当测试输出包含控制字符时修复JUnitXML生成,解决问题267,谢谢jaap broekhuizen

  • 修复问题338:荣誉——同样适用于设置/拆卸错误的TB样式。谢谢Maho。

  • 修复问题307-在示例中使用yaml.safe_load,谢谢Mark Eichin。

  • 更好的参数化错误信息,谢谢Brianna Lauher

  • pytest_terminal_summary(terminalreporter)钩子现在可以使用“.section(title)”和“.line(msg)”方法在测试运行结束时打印额外的信息。

2.3.5(2013年4月30日)

  • 修复问题169:respect--tb=同时具有设置/拆卸错误的样式。

  • 从不考虑测试函数集合的fixture函数

  • 允许重新运行测试项/帮助修复pytest reruntests插件,并帮助保持较少的fixture/resource引用活动

  • 即使通过测试,也要将捕获的stdout/stderr放入JUnitXML输出中(谢谢Adam Goucher)

  • 问题265-将鼻设置/拆卸与设置状态集成,以便在未设置时不尝试拆卸。

  • 问题271-不要在工作节点上编写junitxml

  • 问题274-当doctest不知道示例位置时,不要尝试显示完整的doctest示例

  • 问题280-禁用Buggy CPython 2.6.0上的断言重写

  • 注入“getfixture()”助手以从doctests中检索fixture,谢谢Andreas Ze惰轮

  • 问题259-重写断言时,请与Python2上的默认ASCII源代码保持一致。

  • 问题251-报告跳过而不是忽略带有init的类

  • issue250 unicode/str在参数化名称和值中混合现在起作用

  • 问题257,断言触发的源代码编译以注释行结尾,不会在python2.5中爆炸(通过py>=1.4.13.dev6修复)

  • fix--genscript选项,用于生成独立脚本,该脚本也可与python3.3(导入程序排序)一起使用。

  • 在断言重写中,显示一些全局变量的repr

  • 修复“-k”的选项帮助

  • 将分发的详细描述移到readme.rst中

  • 改进metafunc.parametrize()的docstring

  • 修复在测试函数中使用capsys和pytest.set_trace()在查看capsys.readouterr()时会中断的错误。

  • 在自定义python函数测试发现时,允许指定以“u”开头的前缀。(谢谢格雷厄姆·霍勒)

  • 通过将额外数据放在具有额外缩进的新行上,改进pytest调试跟踪输出

  • 确保outcomeExceptions(如skip/fail)已初始化异常属性

  • 问题260-不要在普通单元测试用例上使用鼻特殊设置

  • 修复问题134-打印阻止运行指定测试项的收集错误

  • 修复问题266-接受MarkEvaluator表达式中的Unicode

2.3.4(2012年11月20日)

  • 生成的测试函数现在将激活autouse fixtures,但不能将fixture作为functarg接受-无论如何,建议使用post-2.0参数化功能,而不是yield,请参见:http://pytest.org/en/stable/example/parametrize.html

  • 修复自动使用问题,如果在a/conftest.py文件中定义了自动使用装置,并且在a/tests/testu some.py中进行了测试,则不会发现自动使用装置。

  • 修复问题226-夹具拆卸的后进先出订单

  • 修复问题244-参数大于256个字符的调用现在可以工作了

  • 修复问题91-在示例中添加/讨论包/目录级设置

  • 允许通过item.keywords动态定义标记 [...] =与“-m”选项集成的赋值

  • 使“-k”接受与“-m”相同的表达式,以便可以写入:-k“name1或name2”等。如果使用诸如“test class.testu method”之类的特殊语法,这是一个轻微的不兼容性,现在需要将其作为-k“test class和testu method”写入以匹配某个测试类中的某个方法。

2.3.3(2012年11月6日)

  • 修复问题214-分析包含特殊对象的模块,例如flask的请求对象,如果没有激活的请求,则在getattr访问时会爆炸。谢谢托马斯·瓦尔德曼。

  • 修复问题213-允许使用不支持 __eq__ 操作人员

  • 修复问题215-将test_python.org拆分为多个文件

  • 修复issue148-@unittest.skip on类现在可以识别并避免调用setupclass/teardownclass,谢谢pavel repin

  • 修复问题209-通过依赖于更新的pylib重新引入了对pre-ast解释器的语句查找,重新引入python2.4支持

  • 鼻子支持:只有在可以调用的情况下才调用安装程序,谢谢Andrew Taumoefolau。

  • 修复问题219-将py2.4-3.3分类器添加到trove列表

  • 追溯中 , *arg值现在显示在正常参数旁边(感谢manuel jacob)

  • 修复问题217-使用pytest的fixtures支持mock.patch-请注意,您需要mock-1.0.1或python3.3内置unittest.mock。

  • 修复问题127-改进pytest_addoption()的文档并添加 config.getoption(name) 帮助器函数的一致性。

2.3.2(2012年10月25日)

  • 修复问题208和修复问题29使用新的PY版本以避免在长模块中打印跟踪时长时间暂停

  • 修复问题205-自定义pytest_pycollect_makemodule和pytest_pycollect_makeitem的子目录中的confsets现在正常工作

  • 修复参数化设置的拆卸顺序

  • 修复问题127-更好的pytest_addoption和相关对象文档。

  • 修复UnitTest行为:仅当定义了测试方法时才调用TestCase.RunTest

  • 改进试用支持:不要收集其空的unittest.testcase.runtest()方法

  • “python setup.py test”现在与py test本身一起工作

  • 修复/改进内部/包装相关位:

    • 测试鼻子的异常消息检查。py现在也通过python33。

    • issue206-当存在全局pythondontwritebytecode=1时,将test_assertrewrite.py修复为工作状态

    • 将tox.ini添加到pytest分发中,以便为运行pytest自己的测试的维护人员正确分发ignore dirs和其他配置位

2.3.1(2012年10月20日)

  • 修复问题202-修复回归:使用fixture函数中的“self”现在可以按预期工作(使用fixture的测试方法看到的是相同的“self”实例)

  • 由于pexpect不正确地支持它(挂起),所以在freebsd*系统上跳过pexpect使用测试(主要是test pdb.py)

  • 从--markers输出链接到网页,该输出为pytest.mark.*用法提供帮助。

2.3.0(2012年10月19日)

  • 修复问题202-参数化测试函数的更好的自动名称

  • 修复问题139-引入@pytest.fixture,允许直接对Funcarg工厂进行范围界定和参数化。

  • 修复问题198-由于路径操作问题,在某些嵌套目录结构的情况下,在Windows32上找不到ConfTest设备

  • 修复问题193跳过测试函数的参数化为空参数集

  • 修复python3.3 compat,主要报告以前依赖于dict排序的位

  • 介绍按资源和参数化设置重新排序测试,该设置优先于常规的文件排序

  • 修复问题185 monkeypatching time.time不会导致pytest失败

  • 修复问题172重复调用pytest.fixture修饰的安装模块函数

  • 修复junitxml=path构造,这样,如果测试更改了当前工作目录,并且路径是相对路径,则可以从原始的当前工作目录正确构造该路径。

  • 修复“python setup.py test”示例,以导致正确的“errno”返回

  • 修复问题165-修复断开的文档链接并提到stackoverflow以获取常见问题解答

  • 在向终端写入故障表示形式以防止整个会话崩溃时捕获Unicode问题

  • 修复xfail/skip混淆:跳过标记或强制pytest.skip现在将优先于xfail标记,因为在跳过时我们无法确定xfail/xpass状态。另请参见:http://stackoverflow.com/questions/11105828/in-py-test-when-i-explicit-skip-a-test-that-is-marked-as-xfail-how-can-i-get

  • 总是在测试运行的头部报告已安装的第三方插件

  • 修复问题160:xfail标记测试的失败设置应报告为xfail(而不是xpass)

  • 修复问题128:使用capsys/capfd时显示捕获的输出

  • 修复问题179:正确显示工厂的依赖链

  • PluginManager.Register(…)现在在插件已经注册或名称被占用时引发ValueError。

  • 修正问题159:改进https://docs.pytest.org/en/6.0.1/faq.html特别是关于“神奇”的历史,还提到了pytest django、trial和unittest集成。

  • 使request.keywords和node.keywords可写。所有子代集合节点都将看到关键字值。关键字是包含标记和其他信息的字典。

  • 修正问题178:XML二进制转义现在被包装在py.xml.raw中。

  • 修复问题176:即使我们用Python级别的子类替换断言错误,也能正确捕获内置断言错误。

  • 工厂发现不再失败,因为提供不健全的magic global可调用文件 __code__ 对象(例如mock.call)

  • 修复问题182:testdir.inprocess_run now考虑通过的插件

  • 解决问题188:确保在python2上明确sys.exc_信息

    在进行测试之前

  • 修复问题191:添加UnitTest测试用例运行测试方法支持

  • 修复问题156:MonkeyPatch正确处理类级描述符

  • 报告改进:

    • pytest_report_header现在接收到一个“startdir”,这样您就可以使用startdir.bestrelpath(yourpath)来显示好的相对路径。

    • 允许插件实现pytest_report_header和pytest_sessionstart(首先调用sessionstart)。

    • 如果没有取消选择的原因行,则不显示

    • py.test-vv将显示所有断言比较,而不是截断

2.2.4(2012年5月22日)

  • 修复涉及%运算符的重写断言的错误消息

  • 修复问题126:正确匹配JUnitXML二进制转义的所有无效XML字符

  • 解决unittest的问题:现在@unittest.expectedfailure标记应该正确处理(您也可以使用@pytest.mark标记)

  • 与扩展的分发/设置工具测试命令的文档集成

  • 解决问题140:正确获取安装/拆卸类的绑定类方法的实际函数

  • 修复问题141:从已故的paste.pocoo.org切换到bpaste.net

  • 修复问题143:调用unconfigure/sessionfinish时始终调用configure/sessionstart when called

  • 修复问题144:更好地将测试ID管理为JUnitXML类名

  • 将distribute_setup.py升级至0.6.27

2.2.3(2012-02-05)

  • 修复上载的包,使其仅包含必要的文件

2.2.2(2012年2月5日)

  • 修复问题101:UnitTest.TestCase测试函数的参数错误,现在可以产生更好的输出

  • 修复问题102:报告更有用的错误和提示,说明何时重命名测试目录以及某些 pyc/__pycache__ 保持

  • 修复问题106:允许多次应用参数化,例如从模块、类和功能级别。

  • 修复问题107:实际执行会话作用域终结

  • 如果间接参数是函数名,则不要签入参数化

  • 将chdir方法添加到monkeypatch funcard

  • 修复因再次调用monkeypatch undo而导致的崩溃

  • 修复问题115:make——对早期故障(丢失的文件/目录)的CollectOnly健壮性

  • “-qq--collectonly”现在只显示文件和其中的测试数量。

  • “-q--collectonly”现在显示测试ID

  • 允许向测试报告添加属性,这样它也可以与分布式测试一起工作(不需要升级pytest xdist)

2.2.1(2011年12月16日)

  • 使用resultlog修复issue99(在pytest和py中)internallerrors现在可以产生更好的输出-通过规范化pytest_internalerror输入参数修复。

  • 修复问题97/回溯问题(在pytest和py中),与jinja2和cython一起改进回溯输出,后者对回溯进行了黑客攻击

  • 修复问题93(在pytest和pytest xdist中)避免“延迟的拆卸”:测试节点中的最终测试现在将直接运行其拆卸,而不是等待会话结束。感谢Dave Hunt提供的良好报告和反馈。Pytest_run test_协议以及Pytest_run test_teardown钩子现在有“nextitem”可用,这将是无表示测试运行结束。

  • 修复由于未知源收集项导致的收集崩溃,这要归功于Ralf Schmitt(取决于最近的Pylib)

2.2.0(2011年11月18日)

  • 修复问题90:引入对测试项的热切分解,以便更早地调用TearDown函数。

  • 添加一个功能强大的metafunc.parameterize函数,该函数允许在多个步骤中参数化测试函数参数,因此可以从独立的插件和位置进行参数化。

  • 添加一个@pytest.mark.parameterize helper,它允许使用不同的参数值轻松调用测试函数

  • 向“参数化”示例页面添加示例,包括测试场景的快速端口以及新的参数化函数和修饰器。

  • 引入“注册”pytest.mark.*“通过ini文件或通过插件挂钩的帮助程序。还引入一个“--strict”选项,该选项将未注册的标记视为错误,从而避免键入错误,并为测试套件维护一组描述良好的标记。参见示例http://pytest.org/en/stable/mark.html以及它的联系。

  • 问题50:引入“-m marker”选项以基于标记选择测试(这是一个更严格和更可预测的“-k”版本,因为“-m”只匹配完整的标记,并具有更明显的和/或语义规则。

  • 帮助优化测试速度的新功能:--durations=n选项,用于显示n个最慢的测试调用和安装/拆卸方法。

  • 修复问题87:--Pastebin现在与python3一起使用

  • 修复问题89:--在doctest工作中出现意外异常的pdb更加敏感。

  • 修复并清理Pytest自己的测试套件以防FDS泄漏

  • 修正问题83:链接到生成的功能列表

  • 修正问题74:Pyarg模块名现在根据imp.find_模块误报进行检查

  • 修复与Twisted/Trial-11.1.0用例的兼容性

  • 简化node.listchain

  • 通过依赖py.xml简化junitxml输出代码

  • 添加对UnitTest类和函数的跳过属性的支持

2.1.3(2011年10月18日)

  • 修复问题79:在boolops中进行某些比较时断言重写失败

  • 正确处理零长度参数(la pytest“”)

  • 修复问题67/junitxml现在包含正确的测试持续时间,谢谢ronny

  • 修复问题75/跳过Jython上的测试失败

  • 修复问题77/allow assertrepr_compare hook以应用于测试的子集

2.1.2(2011年9月24日)

  • 修复在某些Python版本上使用Windows换行符重写文件的断言

  • 通过包/模块名(--pyargs)优化测试发现,谢谢Florian Mayer

  • 修复问题69/在某些布尔操作上修复断言重写

  • 修复问题68/包现在可用于断言重写

  • 修复问题66:传递-o选项时使用不同的断言重写缓存

  • 不要尝试在Jython上重写断言,使用reinterp

2.1.1

  • 修复issue64/pytest.set_trace现在在pytest_generate_tests hook内工作

  • 修复问题60/修复涉及创建 __pycache__

  • 修复问题63/涉及包含“%”的字符串的插入的断言重写

  • 修复对使用**参数的调用的断言重写

  • 如果禁用字节码生成,则不缓存重写模块

  • 修复只读目录中的断言重写

  • 修复问题59:为JUnitXML输出提供系统输出/错误标记

  • 修复问题61:用3个或更多操作数重写布尔运算的断言

  • 现在您可以用“cd-doc;make-man”构建一个手册页。

2.1.0(2011年7月9日)

  • 修复问题53调用鼻样式设置函数的正确顺序

  • 修复问题58和问题59:新的断言代码修复

  • 合并Benjamin的断言重写分支:现在,通过重写AST并在导入测试模块之前保存pyc文件,可以在python 2.6及更高版本上对测试模块进行断言。有关详细信息,请参阅doc/assert.txt。

  • 修复问题43:改进doctests,更好地跟踪意外异常的报告

  • 修复问题47:JUnitXML中测试用例的定时输出现在是正确的

  • 修复问题48:markinfo repr中导致异常的拼写错误

  • 修复问题49:避免在初始化部分失败时出现混淆错误

  • 修复问题44:junitxml文件路径的env/username扩展

  • 在Pypy的测试运行中显示ReleaseLevel信息

  • 为更好地导航和生成PDF而重新编写文档页

  • 即使在会话启动期间中断,也报告键盘中断

  • 修复问题35-提供PDF文档版本并从索引页下载链接

2.0.3(2011年5月11日)

  • 修复问题38:更好地跟踪对钩子的调用,特别是早期的configure/sessionstart调用

  • 修复junitxml文件中缺少的跳过原因/元信息,通过http://lists.idyll.org/pipermail/testing-in-python/2011-march/003928.html报告

  • 修复问题34:避免集合失败,使用从对象派生的带有“test”前缀的类。

  • 在没有实际使用genscript的情况下,不需要为genscript插件使用zlib(和其他libs)。

  • 加快跳过速度(不在内部进行完整的回溯表示)

  • 修复问题37:避免JUnitXML输出中的无效字符

2.0.2(2011年3月9日)

  • 解决问题32-通过减少相对开销,加快非常快速测试功能的测试运行

  • 修复问题30-扩展xfail/skipif处理和改进报告。如果您的skip/xfail表达式中有语法错误,那么现在您可以得到很好的错误报告。

    此外,您现在还可以从xfail/skipif表达式访问模块全局,例如现在就可以工作了:

    import pytest
    import mymodule
    @pytest.mark.skipif("mymodule.__version__[0] == "1")
    def test_function():
        pass
    

    如果模块的版本字符串不是以“1”开头,则不会运行测试函数。请注意,指定字符串而不是布尔表达式允许py.test在汇总测试运行时报告有意义的信息,说明哪些条件会导致跳过(或xfail)测试。

  • fix issue28-安装方法和pytest生成测试一起工作。安装方法fixture方法现在也被调用,用于从pytest生成测试挂钩生成的测试函数调用。

  • 修复issue27-collectonly和关键字选择(-k)现在也可以一起工作,如果您执行“py.test-collectonly-q”,现在您将得到一个简单的测试ID列表,可以使用它粘贴到py.test命令行以执行特定的测试。

  • 修复问题25避免报告--pdb和python3.2/encodings输出的问题

  • 修复问题23-tmpdir参数现在可以在python3.2和windowsxp上工作,从python3.2开始可能支持os.symlink。通过要求更新的py-lib版本,py.path.local()实现承认了这一点。

  • 修正了文档中的拼写错误(感谢维克多·加西亚、布丽安娜·劳赫),特别是感谢劳拉·克里顿,她还审阅了部分文档。

  • 修复类详细进度报告的稍微错误输出(谢谢Amaury)

  • 对node.class函数访问更精确(避免)的拒绝警告

  • 在回溯中避免std unittest断言帮助程序代码(谢谢ronny)

2.0.1(2011年2月7日)

  • 优化和统一初始捕获,这样即使日志模块用于早期加载的conftest.py文件或插件,它也能很好地工作。

  • 允许省略测试ID中的“()”,以允许使用Alfredo的nice pytest.vim插件生成的统一测试ID。

  • 修复问题12-显示带有“-version”和“-traceconfig”的插件版本,并记录如何向报告测试头添加额外信息

  • 通过要求py>1.4.0(1.4.1将包括它),修复问题17(导入-*报告python3上的问题)

  • 通过改进py lib中的断言解释来修复问题10(numpy数组真值检查)

  • 修复问题15:使鼻兼容性测试与python3兼容(现在nose-1.0支持python3)

  • 删除一些令人惊讶的“相同的conftest”检测,因为当它们出现在几个子目录中时,它会忽略conftest.py。

  • 改进断言(“不在”),谢谢Floris Bruynooghe

  • 在“python-oo”上运行时改进行为/警告(断言和docstring被关闭,导致潜在的误报)

  • 引入pytest-cmdline-processargs(args)钩子,允许动态计算命令行参数。这修复了回归,因为2.0之前的py.test允许从conftest.py文件设置命令行选项,到目前为止,py test-2.0只允许从ini文件设置命令行选项。

  • 修复问题7:在doctest模块中断言失败。doctest中的意外失败通常不会显示得更好,即在doctest失败上下文中。

  • 修复问题9:xfail标记的测试的设置/拆卸功能如果失败,将报告为xfail;如果成功,则报告为正常通过(而不是xpassing)。这只适用于“直接”设置/拆卸调用,因为拆卸模块不能与单个测试紧密相关。

  • 修复问题14:进程退出时没有日志记录错误

  • 对非TTY“收集”输出的改进

  • 优化内部插件注册并--traceconfig输出

  • 引入一种从命令行阻止/注销插件的机制,请参阅http://pytest.org/en/stable/plugins.htmlcmdunregister

  • 默认情况下激活结果日志插件

  • 修复回归WRT生成了一些测试,这些测试是由于运行语义之前的集合没有像pytest 1.3.4那样设置的。但是,请注意,推荐的、更清洁的测试参数化方法仍然是“pytest_generate_tests”机制,请参阅文档。

2.0.0(2010年11月25日)

  • pytest-2.0现在是它自己的包,依赖于pylib-2.0

  • 新能力:python-m pytest/python-m pytest.main能力

  • 新的python调用:pytest.main(args,plugins)来提前加载一些自定义插件。

  • 通过将安装/拆卸语义延迟到UnitTest包,尝试更难以更兼容的方式运行UnitTest测试套件。此外,还要更加努力地运行twisted/trial和django测试,这些测试现在基本上可以默认工作。

  • 介绍一种通过ini样式文件设置配置选项的新方法,默认情况下会搜索setup.cfg和tox.ini文件。旧方法(删除某些环境变量,dynamic conftest.py reading)。

  • 添加一个新的“-q”选项,它可以减少冗长的内容并打印更多的鼻/单元测试样式的“点”输出。

  • 修复问题135-现在标记也可用于UnitTest测试用例

  • 修复问题126-在测试运行期间引入py.test.set_trace()以通过pdb跟踪执行,即使捕获正在进行。

  • 修复issue123-py.test的新“python-m py.test”调用(需要python 2.5或更高版本)

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

  • 修复问题109-将不加载同级conftest.py文件。(目录收集器不能再从目录的conftest.py中定制了——这至少需要在一个级别上进行)。

  • 引入(可定制的)断言失败表示,并增强断言失败的输出,用于比较和其他情况(FlorisBruynooghe)

  • 鼻插件:在安装/拆卸函数中传递类型签名失败,而不是不调用它们(ed singleton)

  • 删除py.test.collect.directory(以下是对收集过程的主要重构和简化)

  • 主要减少py.test核心代码,将函数/python测试转换为自己的插件

  • 修复问题88(从命令行arg中查找自定义测试节点)

  • 改进“tmpdir”创建,现在将创建更好地与测试名称关联的基名称(谢谢Ronny)

  • “xpass”(意外通过)测试不会导致exitcode!= 0

  • 修复issue131/issue60-导入doctests __init__ 用作命名空间包的文件

  • 修复问题93导入conftest.py时捕获stdout/stderr

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

  • 为缓存的安装助手添加使用“class”级别的功能

  • 修复奇怪:mark.*对象现在不可变,创建新实例

1.3.4(2010-09-14)

  • 修复问题11:改进Windows安装文档

  • 修复问题119:修复的自定义可收集性 __init__. 作为模块的Py

  • 修复问题116:--doctestmodules使用 __init__. 也可以复制文件

  • 修复问题115:统一内部异常passthrough/catching/generatorexit

  • 修复问题118:new--tb=native用于显示cpython标准异常

1.3.3(2010年7月30日)

  • 修复问题113:三重引号字符串的断言表示问题(可能还有其他情况)

  • 使conftest加载检测到已经加载了具有相同内容的conftest文件,从而避免了嵌套目录结构(例如由hudson生成)中的意外。在大多数情况下,它可能不需要使用--confcutdir。

  • 修复Win32的终端着色(感谢Michael Foord报告)

  • 解决奇怪:使终端宽度检测工作在stdout而不是stdin(感谢Armin Ronacher的报告)

  • 删除所有py/text分发文件中的尾随空格

1.3.2(2010-07-08)

新特点

  • 修复问题103:介绍py.test.raises作为上下文管理器,示例:

    with py.test.raises(ZeroDivisionError):
        x = 0
        1 / x
    
    with py.test.raises(RuntimeError) as excinfo:
        call_something()
    
    # you may do extra checks on excinfo.value|type|traceback here
    

    (谢谢罗尼·普芬施密特)

  • Funcarg工厂现在可以动态地将标记应用于测试调用。例如,如果工厂为预期失败的测试提供参数,则此选项很有用:

    def pytest_funcarg__arg(request):
        request.applymarker(py.test.mark.xfail(reason="flaky config"))
        ...
    
    def test_function(arg):
        ...
    
  • 改进了收集和导入错误的错误报告。这就使用了一种更通用的机制,即定制测试项/收集节点的机制。 node.repr_failure(excinfo) 现在统一调用,以便您可以重写它以返回所选的字符串错误表示形式,并将其报告为(红色)字符串。

  • 引入“--junitprefix=str”选项,为junitxml文件中的所有报告添加前缀。

错误修复

  • 做测试和 pytest_recwarn 特别是与python2.7完全兼容的插件(如果使用 recwarn 将启用funcarg警告,以便您能够以跨python的方式正确检查它们的存在。

  • 优化--pdb:忽略xfailed测试,统一它的tb报告,并且在最后不再显示失败。

  • 使用**运算符修复断言解释(感谢Benjamin Peterson)

  • 修复问题105分配与失败断言在同一行上的问题(感谢Benjamin Peterson)

  • 修复了JUnitXML插件中测试名称的问题104正确转义(感谢匿名)

  • 修复问题57-f--looponfail用于扩展测试(谢谢ronny)

  • 解决问题92大学记者和--巴斯汀(谢谢本杰明·彼得森)

  • 修复py.code.compile(source)以生成唯一的文件名

  • 通过将代码编译延迟到(可重写的)frame.eval类,修复pypy上的断言重新插入问题。(感谢Amaury Forgot)

  • 修复py.path.local.pyimport()以使用目录

  • 简化py.path.local.mkdtemp的实现和使用

  • 显示JUnitXML文件名时不打印空行

  • 向py.path.local.remove添加可选的布尔值ignore_errors参数

  • 修复win32/python2.4上的终端写入

  • py.process.cmdexec()现在更难在所有Python版本上返回正确编码的Unicode对象。

  • 安装plain py.test/py.which脚本也适用于Jython,这有助于在virtualenv情况下获得规范的脚本路径。

  • make path.bestrelpath(path)返回“.”,注意调用x.bestrelpath时,假设x是一个目录。

  • 使初始ConfTest发现忽略带“—”前缀的参数

  • 在多CPU/多主机xdist情况下使用时修复resultlog插件(感谢Jakub Gustak)

  • 在xdist插件中执行分布式测试相关报告,而不是在通用py.test分发中使用与dist相关的代码。

  • 修复Windows上的homedir检测

  • Ship Distribute_Setup.py版本0.6.13

1.3.1(2010-05-25)

新特点

  • 问题91:引入新的py.test.xfail(reason)助手,强制将测试标记为预期的失败。可以从设置和测试功能中使用。当某些配置预期会失败时,这对于参数化测试尤其有用。在这种情况下,不能使用@py.test.mark.xfail的声明性方法,因为它会将所有配置标记为xfail。

  • issue102:引入new--maxfail=num选项以在num失败后停止测试运行。这是对“-x”或“--exitfirst”选项的概括,该选项现在等效于“--maxfail=1”。“-x”和“--maxfail”现在也将在结尾处打印一行,指示中断。

  • 问题89:允许在类上使用py.test.mark修饰符(类修饰符与python2.6一起引入),还允许通过指定列表在类/模块级别应用多个标记。

  • 改进和完善进度栏中的信函报告:。通过F失败的测试S跳过的测试(提醒:仅用于依赖项/平台不匹配)X X失败的测试(预期失败的测试)X通过的测试(预期失败但通过的测试)

    您可以使用“fsxx”和“-r”扩展报告选项的任意组合。xfail/xpass结果将在junitxml输出中显示为跳过的测试,这也修复了问题99。

  • make py.test.cmdline.main()返回exitstatus,而不是提升systemeexit,还允许多次调用它。当然,这要求您的应用程序和测试被正确地分解,并且没有全局状态。

漏洞修补

  • 改进的回溯演示:改进和统一的--tb=short选项报告-测试模块导入过程中的错误要短得多,(使用--tb=short-style)-提升显示更短的相关回溯--fulltrace现在更系统地使跟踪更长/禁止切割

  • 通过操作python的linecache.cache来改进对提升和其他动态编译的代码的支持,而不是以前创建自定义代码对象的方式。这使得它在Jython和Pypy上看起来毫无效果,而以前它没有。

  • 修复问题96:使捕获对Control-C中断更有弹性(涉及到对底层捕获功能进行一些实质性的重构以避免竞争条件)。

  • 修复条件skipif/xfail修饰符的链接-因此它现在可以像预期的那样使用多个@py.test.mark.skipif(条件)修饰符,包括特定的报告哪些条件导致跳过。

  • 修复问题95:延迟导入zlib,这样一般py.test启动就不需要它。

  • 修正问题94:使报告对伪造的源代码更加可靠(并且在呈现意外的字节序列时在内部更加小心)

1.3.0(2010-05-05)

  • deprecate——report选项,支持一个新的更短、更容易记住的-r选项:它采用由'xfsx'字符的任意组合组成的字符串参数。它们与您在点式进度打印过程中看到的单个字符相关,并将在测试运行结束时为每个测试额外打印一行。此额外行指示直接粘贴到py.test命令行以重新运行特定测试的确切位置或测试ID。

  • 允许外部插件通过新的pytest_addhooks(pluginmanager)钩子注册新的钩子。用于分布式和循环失败测试的pytest xdist插件的新版本需要此功能。

  • 添加一个新的pytest_ignore_collect(path,config)钩子,允许项目和插件为其目录结构定义排除行为-例如,您可以在conftest.py中定义此方法:

    def pytest_ignore_collect(path):
        return path.check(link=1)
    

    为了防止收集,尝试在symlinked dirs中进行任何测试。

  • 新的pytest-pycollect-makemodule(path,parent)钩子,允许为匹配的测试模块自定义模块集合对象。

  • 扩展和完善Xfail机制: @py.test.mark.xfail(run=False) 不要运行装饰测试 @py.test.mark.xfail(reason="...") 在xfail摘要中打印原因字符串,指定 --runxfail 在命令行上,实际上忽略了XFAIL标记

  • 公开(以前是内部的)常用方法:py.io.get_terminal_with()->返回终端宽度py.io.ansi_print(…)->在Linux/win32 py.io.saferepr(obj)->返回有限的表示字符串

  • 将与测试结果相关的异常公开为py.test.skip.exception、py.test.raises.exception等,这对于执行特殊结果解释/调整的插件非常有用。

  • (问题85)修复junitxml插件以处理具有非ASCII输出的测试

  • 修复/改进python3兼容性(感谢Benjamin Peterson)

  • 修复了使Jython/win32组合工作的问题,但是请注意:Jython2.5.1/win32不提供命令行启动程序,请参阅http://bugs.jython.org/issue1491。有关如何解决问题,请参阅pylib安装文档。

  • 处理Unicode异常值和不可打印对象的修复程序

  • (issue87)修复断言代码中未绑定的本地错误

  • (问题86)改进循环失败的文档

  • 优化IO捕获:stdin重定向伪文件现在有nop close()方法

  • Ship Distribute_Setup.py版本0.6.10

  • 添加到新CaptureLog和Coverage插件的链接

1.2.0(2010-01-18)

  • “py.cleanup”的改进用法和选项:

    py.cleanup     # remove "*.pyc" and "*$py.class" (jython) files
    py.cleanup -e .swp -e .cache # also remove files with these extensions
    py.cleanup -s  # remove "build" and "dist" directory next to setup.py files
    py.cleanup -d  # also remove empty directories
    py.cleanup -a  # synonym for "-s -d -e 'pip-log.txt'"
    py.cleanup -n  # dry run, only show what would be removed
    
  • 添加一个新选项“py.test--funcargs”,显示给定测试路径的可用funcargs及其帮助字符串(各自工厂函数上的docstrings)

  • 如果Funcarg查找失败,则显示简短的回溯

  • 早期将“conftest.py”文件加载到非点一级子目录中。允许在 test 并仍然添加命令行选项。

  • 修复问题67:新的超短回溯打印选项:“--tb=line”将为每个失败(python)测试打印一行,指示其文件名、行号和失败值。

  • 修复问题78:即使相应的设置失败,也始终调用python级别的拆卸函数。这包括对调用安装模块/类函数的改进,现在只调用一次,而不是以前的行为,如果它们引发异常(包括跳过的异常),则会多次调用它们。任何异常都将重新记录并与相应模块/类范围内的所有测试关联。

  • 修正问题63:假设<40列为假终端宽度,默认为80

  • 修复PDB调试在引发相关错误时处于正确的帧中

  • 更新apipkg.py以修复递归导入可能不必要地中断导入的问题

  • 修复插件链接

1.1.1(2009-11-24)

  • 将dist/looponfailing从py.test核心移动到一个新的单独发布的py test xdist插件中。

  • 新的junit xml插件:--junit xml=path将生成一个junit风格的XML文件,该文件可以处理,例如由Hudson CI系统处理。

  • 新选项:--genscript=path将生成一个独立的py.test脚本,不需要安装任何库。感谢拉尔夫·施密特。

  • 新选项:--忽略将阻止收集指定的路径。可以多次指定。

  • 新选项:--confcutdir=dir将使py.test只考虑与指定dir相关的conftest文件。

  • new funcarg:“pytest config”是用于访问命令行参数的pytest config对象,现在可以在测试中轻松使用。

  • 安装 py.testpy.which 用一个 -$VERSION 在python3、python2.x、jython和pypy安装的版本之间消除歧义的后缀。

  • 新的“pytestconfig”函数卡允许访问测试配置对象

  • 新的“pytest-report-header”钩子可以返回额外的行,显示在测试运行的头上。

  • (实验)允许“py.test path::name1::name2::…”直接指向测试集合中的测试。这可能最终演变为对“-k”规范的完全替代。

  • 简化插件加载:顺序现在如自定义.html:setuptools,ENV,命令行,conftest。此外,setuptools入口点名称将转换为规范名称(“pytest_*”)

  • 自动跳过需要“capfd”但没有os.dup的测试

  • 允许在类中定义pytest生成测试

  • 不赞成使用“disabled”属性而使用pytestmark

  • 取消conftest.py文件中目录、模块、类和函数节点的定义。使用pytest collect钩子代替。

  • 集合/项目节点特定的runtest/collect钩子只在匹配的conftest.py文件上调用,即刚好在项目的文件系统路径下的文件系统钩子。

  • 更改:第一个返回某些内容的pytest_collect_目录挂钩现在将阻止调用更多挂钩。

  • 更改:figleaf插件现在需要运行--figleaf。还可以将其长命令行选项更改为稍短一点(请参见py.test-h)。

  • 更改:pytest doctest插件现在默认启用,并有一个新的选项--doctest glob为文件匹配设置模式。

  • 更改:删除内部py。*helper vars,只保留py。pydir

  • 如果自定义pytest_runtest_安装程序代码失败并阻止捕获安装程序代码运行,则robustify捕获以生存。

  • 使py.test.*默认插件提供的帮助程序早期可见-对于pydoc和交互式会话都是透明的,这些会话将定期看到py.test.mark和py.test.importorskip。

  • 简化内部插件管理器机制

  • 通过引入rootcollector节点简化内部收集树

  • 修复断言重新解释看到包含“关键字=…”的调用的错误。

  • 修复问题66:在dist测试期间调用worker节点上的pytest_sessionstart和pytest_sessionfinish钩子,正确报告模块/会话拆卸挂钩。

  • 修复问题65:如果没有远程安装execnet/py lib,请正确处理dist测试。

  • 如果没有可用的execnet,跳过一些安装测试

  • 修复文档,修复内部bin/脚本生成

1.1.0(2009-11-05)

  • 通过'pytest11'入口点通过安装工具'pkg_resources.iter_入口点引入自动插件注册

  • 将py.test dist测试固定到execnet>1.0.0b4

  • 重新引入py.test.cmdline.main()以获得更好的向后兼容性

  • svn路径:修复带有path的bug。检查(versioned=true)svn路径,在svn路径中允许“%”,使svnwc.update()默认为交互模式(如1.0.x),并添加svnwc.update(interactive=false)以禁止交互。

  • 优化分布式tarball以包含测试和无pyc文件

  • 尝试更难获得py.compat.*的拒绝警告。访问报告了正确的位置。

1.0.3

  • 调整和改进文档

  • 删除py.rest工具和内部名称空间-它从未真正公布过,如果需要,它仍然可以与旧版本一起使用。如果有兴趣的话,我想它可以重新回到自己的工具中去。

  • 修复问题48和问题59:如果导入的测试文件中的模块似乎不是来自文件路径,则引发错误-避免重复报告的“同名”混淆

  • 合并了Ronny的鼻兼容性黑客:现在支持鼻样式设置模块()和设置()函数

  • 介绍通用py.test.mark函数标记

  • 重新配置/优化命令行分组

  • 将parser.addgroup弃用于创建选项组的getgroup

  • add--report命令行选项,用于控制跳过的/xfailed节的显示

  • 通用跳过:基于平台或系统模块属性,在函数、类和模块级别用skipif或xfail标记python函数的一种新方法。

  • 扩展py.test.mark decorator以允许位置参数

  • 引入并测试“py.cleanup-d”以删除空目录

  • 修复问题59-Robustify UnitTest Collection

  • 通过添加 __all__ 属性,清除initpkg

  • 对pylib使用mit许可证,添加一些参与者

  • 删除py.execnet代码,并用“execnet”替代所有用法

  • 修复issue50-缓存的安装程序现在缓存更多的测试函数和多个参数。

  • 合并Jarko的修复,问题45和46

  • 添加指定py.lookup搜索路径的功能

  • 修复Funcarg缓存的_安装错误,可能只在分布式测试和“模块”范围内发生,并进行拆卸。

  • 为了使代码基python3兼容,许多修复和更改都要感谢Benjamin Peterson的帮助。

  • 整合内置实现以兼容>=2.3,添加助手以轻松保持2和3K兼容代码

  • 弃用py.compat.doctest |subprocess| textfarse_optparse

  • 取消预测py.magic.autopath,删除py/magic目录

  • 将pytest断言处理移动到py/code和pytest_断言插件,添加“--no assert”选项,取消py.magic名称空间的预测,而不是(更少)py.code名称空间。

  • 合并和清理py/代码类和文件

  • 清除py/misc,将测试移到存储箱中进行分发

  • 将delattr/delitem/delenv方法介绍给py.test的monkeypatch funcard

  • 合并py.log实现,删除旧方法。

  • 介绍py.io.text io和py.io.bytesio,以区分文本/unicode和字节流(使用基础标准lib io.*如果可用)

  • 使py.unittest_convert helper脚本可用,该脚本将“unittest.py”样式文件转换为更简单的assert/direct测试类py.test/nosetest样式。剧本是劳拉·克里顿写的。

  • 简化的内部本地路径实现

1.0.2(2009年8月27日)

  • 修复包装问题,触发了FedoraRedhat包装,也增加了文件,例子和控制dirs的tarball。

  • 向新的django插件添加了一个文档链接。

1.0.1(2009年8月19日)

  • 添加了一个“pytest_nose”插件,该插件处理nose.skiptest、nose样式函数/方法/生成器设置/拆卸,并尝试正确报告函数。

  • 捕获到sys.stdout/err的unicode写操作或编码字符串效果更好,而且在Windows和Linux之间也调整了终端写操作并进行了某种程度的统一。

  • 改进了文档布局和内容

  • 添加了一个“-help config”选项来显示所有longopt命令行选项的conftest.py/env变量名,以及一些特殊的conftest.py变量。相应地将“conf_capture”conftest设置重命名为“option_capture”。

  • 修复问题27:更好地报告命令行上提供的不可收集项目(例如PYC文件)

  • 修复问题33:增加——版本标志(谢谢本杰明·彼得森)

  • 修复问题32:添加对wcpath.status()的“不完整”路径的支持

  • “test”前缀类是 not 如果他们有 __init__ 方法

  • monkeypatch setenv()现在接受“prepend”参数

  • 改进了收集错误跟踪的报告

  • 简化了多调用机制和插件架构,重命名了一些内部方法和参数名

1.0.0(2009年8月4日)

  • 更简洁的报告尝试显示相对于当前目录的文件系统路径

  • 稍微提高xfail输出

1.0.0B9(2009年7月31日)

  • 干净地处理和报告测试设置的最终拆卸

  • 用py.path.svnwc().versioned()修复svn-1.6兼容问题(感谢wouter vanden hove)

  • 设置/拆卸或收集问题现在显示为错误或进度行中有大的“e”。它们分别报告和计数。

  • dist testing:正确处理在本地收集但无法在远程端收集的测试项-通常是由于平台/依赖关系的原因

  • 简化py.test.mark api-参见关键字插件文档

  • 更好地与日志集成:默认情况下,现在捕获在单个流中捕获测试函数及其即时设置/拆卸

  • capsys和capfd funcargs现在有一个readouterr()和一个close()方法(下面使用py.io.stdcapture/fd对象,该对象增长了readouterr()方法,并返回捕获的out/err的快照)

  • 使断言重新解释更好地工作与比较不返回bools(报告与numpy从谢谢Maciej Fijalkowski)

  • 将每个测试输出捕获重新编写到py test_iocapture.py插件中,从而从config对象中删除捕获代码。

  • item.repr_failure(excinfo)而不是item.repr_failure(excinfo,outerr)

1.0.0B8(2009年7月22日)

  • Pytest_UnitTest-Plugin现在默认启用

  • 引入了pytest_keyboardinterrupt hook和精制的pytest_sessionfinish hook,增加了测试。

  • 解决错误日志模块交互问题(“关闭已关闭的文件”)。感谢sridhar ratnakumar的触发。

  • 如果插件使用“py.test.importorskip”导入依赖项,则只会发出警告,而不会退出测试过程。

  • 对docs的许多改进:-改进funcards doc,使用术语“工厂”而不是“提供者”-添加了一个新的谈话/教程doc页面-更好的下载页面-更好的插件docstrings-添加了新的插件页面和自动文档生成脚本

  • 修复了与部分故障Funcarg设置相关的拆卸问题(感谢mrtopf的报告),即使“pytestu runtestu teardown”失败,现在也始终调用“pytestu runtestu teardown”。

  • 调整了py模块中docstring的doctest输出,谢谢Radomir。

1.0.0b7

  • 将py.test.xfail重命名为py.test.mark.xfail以避免Xfail的两种装饰方式

  • 重新添加了py.test.mark decorator,用于设置函数的关键字(它实际上是有文档记录的,因此删除它并不好)

  • 从request.addFinalizer()中删除scope参数,因为request.cached_安装程序具有scope参数。托沃迪

  • 在报告失败之前执行安装程序终结

  • 应用Andreas Kloeckner的修改补丁,以允许测试函数没有func_代码(22),并使“-k”和函数关键字起作用(20)

  • 应用Daniel Peolzleithner的补丁(第23期)

  • 解决问题18,multiprocessing.manager()和重定向冲突

  • 制作 __name__ =“uu channelexec_uuu”表示远程执行代码

1.0.0b3(2009年6月19日)

  • 插件类被删除:现在有一个类直接在conftest.py或全局pytest_*.py文件中定义钩子。

  • 添加了新的py test_名称空间(config)钩子,允许将助手直接注入py.test.*名称空间。

  • 记录和提炼了许多钩子

  • 通过pytest添加了新的生成测试样式,生成了与函数参数很好集成的测试挂钩。

1.0.0b1

  • 引入了新的“funcard”设置方法,请参见doc/test/funcard.txt

  • 介绍了插件架构和许多新的py.test插件,请参阅doc/test/plugins.txt

  • Teardown方法现在可以保证在测试方法运行后被调用。

  • 新方法:py.test.import or skip(mod,minversion)将导入或调用py.test.skip()。

  • 完全修订的内部PY.测试架构

  • 新的py.process.forkedfunc对象,允许将函数的执行复刻到子进程并返回结果。

这里少了很多东西

0.9.2

  • 改进了安装和元数据,创建了新的setup.py,现在基于setuptools/ez_设置(感谢Ralf Schmitt的支持)。

  • 改进了使py.*脚本在Windows环境中可用的方法,它们现在作为“.cmd”文件添加到脚本目录中。

  • py.path.svnwc.status()现在更完整,如果可用,使用“svn”命令的XML输出(guido-wesdorp)

  • 修复py.path.svn*以使用svn 1.5(chris lamb)

  • 修复Windows上的path.relto(otherpath)方法,以使用normcase检查路径是否相对。

  • py.test的回溯可以更好地从编辑器中解析(遵循文件名:lineno:msg约定)(多亏了osmo salomaa)

  • 修复到javascript生成,“py.test--runbrowser”现在应该可以更可靠地工作了。

  • 删除之前意外添加的py.test.break和py.test.notimplemented帮助程序。

  • 现在有一个 py.__version__ 属性

0.9.1

这是一个相当完整的v0.9.1列表,可以作为开发人员的参考。

  • 允许在py.path.svn URL中使用+符号 [39106]

  • 修复了在py.test中对没有excinfo的失败异常的支持 [39340]

  • 在py.misc.killproc中添加了对Windows(以及支持os.kill的平台)杀戮进程的支持 [39655]

  • 在py.test中添加了生成测试的设置/拆卸 [40702]

  • 增加了对未能将模块加载到py.test的检测 [40703、40738、40739]

  • 修复了在py.path中非版本化文件的wcpath上调用.remove()的问题 [44248]

  • 修复了py.test中的一些导入和继承问题 [41480、44648、44655页]

  • 当pypy可用但没有堆栈时,未能运行greenlet测试 [45294]

  • 会话测试中的小修复 [45295]

  • 修复了py.test中2.5类型表示的问题 [45483, 45484]

  • 使内部报告问题显示在py.test中自动完成。 [45518]

  • 使得py.lookup脚本忽略不存在的文件 [45519]

  • 改进了py.test中的异常名称创建 [45535]

  • 使得execnet中使用的线程更少 [合并45539]

  • 删除了在py.test中显示原子报告问题所需的锁 [45545]

  • 已从execnet中删除全局 [45541, 45547]

  • 重构的清理机制,使setdaemon设置为1以使在2.5中调用atexit(py.execnet) [45548]

  • 修复了py.execnet的servemain中连接线程的错误 [45549]

  • 重构py.test.rsession测试以不再依赖精确的输出格式 [45646]

  • 对测试结果使用repr()。 [45647]

  • 为py.test.skip()添加了“reason”类 [45648, 45649]

  • 在py.test.collect中删除了一些不必要的健全性检查 [45655]

  • 避免在py.io.fdcapture中使用os.tmpfile(),因为在Windows上,它只能由管理员使用。 [45901]

  • 添加了对py.path.svnwc的锁定和非递归提交的支持 [45994]

  • 在py.execnet中锁定文件,以防止cpython发生SegFaulting [46010]

  • 已将export()方法添加到py.path.svnurl

  • 在PY.试验中固定-D-X [47277]

  • py.path.svnwc中的固定参数连接问题 [49423]

  • 当出现故障时,恢复代码为1的py.test行为 [49974]

  • 不要在没有附带.txt文件的HTML文件上失败 [50606]

  • 修复了“utestconvert.py<input” [50645]

  • py.code.source中代码缩进的小修复 [50755]

  • 修复文档生成 [51285]

  • 改进了对py.test中代码块的源代码表示的检查 [51292]

  • 添加了对向py.path.svn*对象传递身份验证的支持 [52000, 52001]

  • 已移除sorted()调用py.apigen测试以支持 [.sort()以支持python 2.3[52481]