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)¶
贬抑¶
#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[bytes]
对于capfdbinary
和capsysbinary
固定装置。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_path
和tmpdir
现在在3天没有修改(之前的值是3小时)后被认为是过时的,以避免删除在长时间运行的测试套件中仍在使用的目录。#7951: 修复了收集测试时递归符号链接的处理。
#7981: 修复了收集期间未遵循的符号链接目录。在pytest 6.1.0中回归。
#8016: 修复了使用时仅收集一个文档测试的问题
pytest --doctest-modules path/to/an/__init__.py
.
改进的文档¶
pytest 6.1.1(2020-10-03)¶
pytest 6.1.0(2020-09-26)¶
正在中断更改¶
#5585: 根据我们的策略,5.X系列中已弃用的以下功能现在将被删除:
这个
funcargnames
的只读属性FixtureRequest
,Metafunc
和Function
类。使用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()
方法FSCollector
和Package
已弃用;使用self.session.gethookproxy()
和self.session.isinitpath()
相反。这应该适用于所有pytest版本。
改进¶
#6681: 在初始化的早期阶段发出的内部pytest警告现在得到了正确的处理,并且可以过滤掉
filterwarnings
或--pythonwarnings/-W
.#7572: 当一个插件在
required_plugins
缺少或未知配置键与一起使用--strict-config
,现在将显示一条简单的错误消息,而不是stacktrace。#7685: 添加了两个新属性
rootpath
和inipath
到Config
. 这些属性是pathlib.Path
现有版本rootdir
和inifile
属性,并应尽可能优先于它们。#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将引发,并启用断言重写。#7628: 修复了在Windows上向pytest传递不带驱动器号的完整路径时的测试集合(例如
\projects\tests\test.py
而不是c:\projects\tests\pytest.py
)#7638: 修复在Windows上显示为路径但触发操作系统级语法错误的命令行选项的处理,例如
pytest-xdist
.#7742: 修复了访问有故障的局部变量/全局变量时的内部错误
exec
.
细微/内部变化¶
#7536: 内部
junitxml
插件已重写以使用xml.etree.ElementTree
. XML元素中属性的顺序可能不同。不再执行某些不必要的转义。#7587: 对
more-itertools
包已被删除。#7631: 结果类型
capfd.readouterr()
(和类似的)不再是namedtuple,但在所有方面都应该表现得像一个。这是出于技术原因。#7671: 在收集测试时,pytest通过检查python对象(模块、类和实例)的属性来查找测试类和函数。为了加快这个过程,pytest现在忽略了内置属性(比如
__class__
,__delattr__
和__new__
)没有咨询python_classes
和python_functions
配置选项,而不将它们传递给使用pytest_pycollect_makeitem
钩子。
pytest 6.0.2(2020-09-04)¶
pytest 6.0.1(2020-07-30)¶
漏洞修补¶
#7394: 经过一个空的
help
价值到Parser.add_option
现在可以接受,而不是在运行时崩溃pytest --help
.经过None
提出一个更具信息量的TypeError
.#7558: 固定支柱
not-callable
棉绒pytest.mark.parametrize()
以及其他内置标记:skip
,skipif
,xfail
,usefixtures
,filterwarnings
.#7559: 使用修复插件中的回归
TestReport.longreprtext
(如pytest-html
当TestReport.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
已被删除。
特征¶
#7464: 为添加了支持
NO_COLOR
和FORCE_COLOR
控制彩色输出的环境变量。
改进¶
#7467:
--log-file
CLI选项和log_file
如果需要,ini标记现在创建子目录。#7489: 这个
pytest.raises()
当match
等于获得的字符串,但不是正则表达式匹配项。在这种情况下,建议转义正则表达式。
漏洞修补¶
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 warning
或1 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()
. 格式支持or
,and
,not
、括号和要匹配的常规标识符。Python常量、关键字或其他运算符的计算方式不再不同。#7135: Pytest现在使用自己的
TerminalWriter
类而不是使用py
类库。插件通常通过TerminalReporter.writer
,TerminalReporter.write()
(和类似方法),或_pytest.config.create_terminal_writer()
.进行了以下重大更改:
产量 (
write()
方法和其他方法)不再隐式刷新;将考虑基础文件的刷新行为。要显式刷新(例如,如果希望在打印行尾之前显示输出),请使用write(flush=True)
或terminal_writer.flush()
.显式Windows控制台支持已删除,委派给colorama库。
写作支持
bytes
被移除。这个
reline
方法及chars_on_current_line
属性已删除。这个
stringio
和encoding
参数已删除。已删除对传递可调用而不是文件的支持。
#7224: 这个
item.catch_log_handler
和item.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()
直接代替。
贬抑¶
特征¶
#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.path
或sys.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
命令现在禁止BrokenPipeError
当pytest
,并且管道由piped to程序关闭(常见示例是less
和head
)#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=fd
或capfd
和capfdbinary
fixture,并且文件描述符(0,1,2)不能重复,FD捕获仍然执行。以前,直接写入文件描述符在这种情况下会失败或丢失。#7119: 如果
--basetemp
参数为空,是当前工作目录或是父目录之一。这样做是为了防止意外数据丢失,因为传递给此参数的任何目录都将被清除。#7128:
pytest --version
现在只显示pytest版本,而pytest --version --version
显示更详细的信息,包括插件。这与其他工具的显示方式更为一致--version
.#7159:
caplog.set_level()
和caplog.at_level()
不再影响中显示的日志级别 捕获日志报告 报告部分。#7348: 改进数据类/属性上比较断言的递归差异报告。
#7385:
--junitxml
现在在message
设置和拆卸期间失败的XML属性。以前:
<error message="test setup failure">
现在:
<error message="failed on setup with "ValueError: Some error during setup"">
漏洞修补¶
#4677: 摘要报告中显示的跳过测试的路径现在总是相对的。以前它有时是绝对的。
#5456: 修复在尝试删除用于控制对由创建的文件夹的访问的锁文件时可能出现的争用情况
tmp_path
和tmpdir
.#6240: 修复了一个问题,即在收集步骤中进行日志记录会导致向stderr复制日志消息。
#6428: 如果当前工作目录自会话启动后发生更改,则错误消息中出现的路径现在是正确的。
#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)
,如果autouse
或params
参数也被传递,函数不再被忽略,而是被标记为fixture。#7360: 修复传递给的字符串表达式的可能不正确的计算
pytest.mark.skipif
和pytest.mark.xfail
,在极少数情况下,使用完全相同的字符串但引用不同的全局值。#7383: 修复了整个代码库中的异常原因,即使用
raise new_exception from old_exception
包装异常时。
改进的文档¶
细微/内部变化¶
pytest 5.4.3(2020-06-02)¶
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)¶
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
并允许指定在测试失败时如何显示捕获的输出:no
,stdout
,stderr
,log
或all
(默认值)。#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: 已更改的默认值
-r
到fE
,它在中显示失败和错误 short test summary .-rN
可以用来禁用它(旧的行为)。#6469: 新选项已添加到
junit_logging
选项:log
,out-err
和all
.#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: 使用连续添加对匹配行的支持
LineMatcher
的fnmatch_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/F
和s/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
现在在医生那里工作。
pytest 5.3.4(2020-01-20)¶
pytest 5.3.3(2020-01-16)¶
pytest 5.3.2(2019-12-13)¶
pytest 5.3.1(2019-11-25)¶
改进¶
#6231: 改进拼写错误的检查 pytest.mark.parametrize .
#6257: 把手
pytest.exit()
正在通过pytest_internalerror()
,例如,从尸检中退出pdb时。
漏洞修补¶
#5914: pytester:修复
no_fnmatch_line()
正匹配后使用。#6082: Fix line detection for doctest samples inside
property
docstrings, as a workaround to bpo-17446 .#6254: 修复与pytest parallel的兼容性(pytest 5.3.0中的回归)。
#6255: 清除
sys.last_traceback
,sys.last_type
和sys.last_value
通过删除属性而不是将其设置为None
. 这更符合Python标准库的行为。
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
返回Apytest.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插件时已正确地失效。与一起使用时,这一点很重要
pytester
的runpytest_inprocess
.#6047: BaseException现在在中处理
saferepr
,其中包括pytest.fail.Exception
等。#6074: pytester:中参数的固定顺序
rm_rf
清除临时目录时发出警告,并且不针对os.open
.#6189: 固定结果
getmodpath
方法。
pytest 5.2.4(2019-11-15)¶
pytest 5.2.3(2019-11-14)¶
pytest 5.2.2(2019-10-24)¶
pytest 5.1.3(2019-09-18)¶
pytest 5.1.2(2019-08-30)¶
pytest 5.1.0(2019-08-15)¶
移除¶
#5180: 根据我们的策略,以下功能在4.X系列中已被弃用,现在已被删除:
Request.getfuncargvalue
使用Request.getfixturevalue
相反。pytest.raises
和pytest.warns
不再支持字符串作为第二个参数。message
参数pytest.raises
.pytest.raises
,pytest.warns
和ParameterSet.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.fail
,pytest.xfail
和pytest.skip
不再支持消息参数的字节。这在python2中是受支持的,它很容易被使用
"message"
而不是u"message"
.python3代码不太可能通过
bytes
这些功能。如果是,请将其解码为str
事先。
特征¶
改进¶
漏洞修补¶
#4344: 修复尝试使用收集包时的运行时错误/停止迭代 "__init__. 只有“py”。
#5115: 期间发出的警告
pytest_configure
显式地不被视为错误,即使这样配置,因为它会完全破坏pytest。#5477: 生成的XML文件
--junitxml
现在正确地包含<testsuites>
根元素。#5524: 解决问题的位置
tmp_path
和tmpdir
不会删除包含标记为只读的文件的目录,这可能会导致第二次使用--basetemp
选择权。#5537: 替换
importlib_metadata
后端口importlib.metadata
来自python3.8+上的标准库。#5578: 改进一些异常引发函数的类型检查 (
pytest.xfail
,pytest.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
功能。
细微/内部变化¶
#5095: 的XML文件
xunit2
现在,通过pytest自己的测试套件根据模式验证family,以避免将来的回归。#5516: 缓存节点拆分功能,可以提高超大测试套件的采集性能。
#5603: 简化内部
SafeRepr
类并删除了一些死代码。#5664: 调用pytest自己的testsuite时
PYTHONDONTWRITEBYTECODE=1
, thetest_xfail_handling
测试不再失败。#5684: 更换手动处理
OSError.errno
在代码库中按newOSError
子类 (PermissionError
,FileNotFoundError
等)。
Pytest 5.0.0(2019年6月28日)¶
移除¶
#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 theArgumentParser
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)
贬抑¶
特征¶
#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: 从开关
imp
到importlib
.#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
.
最热4.6.11(2020-06-04)¶
漏洞修补¶
#6334: 修复出现两次摘要条目的情况
f/F
和s/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 theletter
variable.修复方法是设置
letter
在IF-挡路级联之前,所以它总是有价值的。
pytest 4.6.8(2019-12-19)¶
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 withpytest-xdist
for example).
pytest 4.6.5(2019-08-05)¶
Pytest 4.6.4(2019年6月28日)¶
Pytest 4.6.3(2019-06-11)¶
Pytest 4.6.2(2019-06-03)¶
Pytest 4.6.1(2019-06-02)¶
Pytest 4.6.0(2019-05-31)¶
特征¶
#4559: 增加了
junit_log_passing_tests
可用于启用或禁用JUnit XML文件中传递测试输出的日志记录的ini值。#4956: 测谎器
testdir.spawn
使用tmpdir
作为home/userprofile目录。#5062: 将呼叫展开到
all
为了更好的失败消息而重写断言,特别是在使用生成器表达式时。#5063: 从开关
pkg_resources
到importlib-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
未重新运行所有具有来自未选定测试的已知失败的测试。
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>
标签位于testsuite
与junitxml
插件。生成的XML与最新的XUnit标准兼容,与
record_property
和record_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"
.
漏洞修补¶
细微/内部变化¶
#4942:
logging.raiseExceptions
未设置为False
不再。#5013: pytest now depends on wcwidth 为了更精确的终端输出,正确跟踪Unicode字符大小。
#5059: 测谎器
Testdir.popen()
使用stdout
和stderr
现在通过具有默认值的关键字参数 (subprocess.PIPE
)#5069: 终端中的短测试摘要代码已移动到终端插件。
#5082: 改进了Pytester插件中各种方法的Kwargs验证。
#5202:
record_property
now emits aPytestWarning
when used withjunit_family=xunit2
: the fixture generatesproperty
tags as children oftestcase
, which is not permitted according to the most recent schema .#5239: 销
pluggy
到< 1.0
所以我们不更新到1.0
当它被释放时自动:有计划的中断更改,我们希望确保pytest正确地支持pluggy 1.0
.
Pytest 4.4.1(2019年4月15日)¶
Pytest 4.4.0(2019年3月29日)¶
特征¶
#2224:
async
当没有安装合适的异步插件(例如pytest-asyncio
或pytest-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 配置选项现在显示在
rootdir
和inifile
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_prepend
和testdir.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
夹具可用。#4975: 固定的解释
-qq
被视为-v
相反。#4978:
outcomes.Exit
不被吞咽assertrepr_compare
不再。#4988: 会话结束时显式关闭日志记录的文件处理程序。
#5003: 用标记收集错误修复行偏移(关闭一个)。
细微/内部变化¶
#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_serializable
和pytest_report_from_serializable
实验的 钩子。这些钩子将由
pytest-xdist
,pytest-subtests
,并替换resultlog以序列化和自定义报表。它们是实验性的,这意味着它们的细节可能会改变,甚至在未来的补丁发布中被完全删除,而不会发出警告。
欢迎插件作者和用户提供反馈。
#4987:
Collector.repr_failure
尊重--tb
选项,但仅默认为short
现在(用)auto
)
Pytest 4.3.0(2019年2月16日)¶
特征¶
#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
从挂钩的路径。
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”在符号链接到实际源的生成目录中运行时出现的异常。
改进的文档¶
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 likestaticmethod
/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报告中预期失败的详细词从
xfail
到XFAIL
与其他测试结果一致。
Pytest 4.1.0(2019-01-05)¶
移除¶
#2169:
pytest.mark.parametrize
:在以前的版本中,ID函数引发的错误被抑制并更改为警告。现在,异常将被传播,同时会发送一条pytest消息,通知发生异常的节点、参数值和索引。#3078: 删除旧的内部警告系统:
config.warn
,Node.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.ini 和 tox.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 attrs 或 dataclasses (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 arepr
/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
参数,当无法导入请求的模块时将显示该参数。
漏洞修补¶
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
不再。
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代理类。
Pytest 3.9.3(2018年10月27日)¶
漏洞修补¶
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 supportpy_modules
insetup.cfg
#4179: 恢复当前测试运行的符号链接的tmpdir行为。
#4192: 修复文件名报告人
warnings.warn
使用时recwarn
在Python下。
Pytest 3.9.0(2018-10-15-由于发布自动化错误未发布)¶
贬抑¶
#3616: 以下访问已被记录为弃用多年,但现在实际发出了弃用警告。
访问
Module
,Function
,Class
,Instance
,File
和Item
通过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
.
改进的文档¶
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.setenv
和MonkeyPatch.delenv
如果环境变量名不是str
在Python 2上。在python 2中,添加
unicode
关键os.environ
导致问题subprocess
(以及可能的其他模块),使这成为一个微妙的bug,当与from __future__ import unicode_literals
.
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版本的用户升级。
Pytest 3.8.0(2018-09-05)¶
弃用和移除¶
#2452:
Config.warn
和Node.warn
已弃用,请参阅 https://docs.pytest.org/en/stable/deprecations.html#config-warn-and-node-warn 理由和例子。#3936:
@pytest.mark.filterwarnings
第二个参数不再是regex转义的,因此可以实际使用正则表达式检查警告消息。Note :对匹配字符串进行regex转义是一种实现监督,可能会破坏依赖于旧行为的测试套件。
特征¶
#2452: 内部Pytest警告现在使用标准发布
warnings
模块,使使用标准警告过滤器管理这些警告成为可能。这介绍PytestWarning
,PytestDeprecationWarning
和RemovedInPytest4Warning
作为公共API的一部分的警告类型。查阅 the documentation 更多信息。
#2908:
DeprecationWarning
和PendingDeprecationWarning
如果没有配置其他警告筛选器,则现在默认显示。这使得pytest更符合 PEP-0506 . 见 the docs 更多信息。#3251: 现在在测试收集期间捕获并显示警告。
#3784:
PYTEST_DISABLE_PLUGIN_AUTOLOAD
环境变量在设置时禁用插件自动加载。#3829: 增加了
count
选择权console_output_style
启用将进度显示为计数而不是百分比。#3837: 添加了对“xfailed”和“xpassed”结果的支持
pytester.RunResult.assert_outcomes
签名。
漏洞修补¶
改进的文档¶
Pytest 3.7.3(2018年8月26日)¶
漏洞修补¶
#3033: 拆卸期间的固定装置可再次使用
capsys
和capfd
检查测试期间捕获的输出。#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: 当文件名以大写字母开头时,修复包内测试的双重集合。
改进的文档¶
Pytest 3.7.2(2018年8月16日)¶
漏洞修补¶
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日)¶
弃用和移除¶
#2639:
pytest_namespace
已经 deprecated .#3661: 直接调用fixture函数,而不是在测试函数中请求它们,现在发出一个
RemovedInPytest4Warning
. 见 the documentation for rationale and examples .
特征¶
漏洞修补¶
Pytest 3.6.4(2018年7月28日)¶
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
多次应用于同一函数aValueError
提高了。这种小车行为会导致令人惊讶的问题,如果在测试套件中工作,那么这主要是偶然的。 (#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 )
漏洞修补¶
细微/内部变化¶
pytest
现在取决于 python-atomicwrites 类库。 (#3008 )将所有pypi.python.org URL更新到pypi.org。 (#3431 )
检测
pytest_
prefixed hooks using the internal plugin manager sincepluggy
is deprecating theimplprefix
argument toPluginManager
. (#3487 )进口
Mapping
和Sequence
从_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.0(2018-03-21)¶
弃用和移除¶
record_xml_property
现在不赞成使用fixture,而赞成使用更通用的fixturerecord_property
. (#2770 )定义
pytest_plugins
现在不推荐在非顶级conftest.py文件中使用,因为它们会“泄漏”到整个目录树。 See the docs 因为这个决定背后的理由 (#3084 )
特征¶
新的
--show-capture
命令行选项,用于指定当测试失败时如何显示捕获的输出:no
,stdout
,stderr
,log
或all
(默认值)。 (#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
上次运行中没有测试失败(或找不到缓存)时的功能:none
或all
(默认值)。 (#3139 )新的
--doctest-continue-on-failure
命令行选项,使doctests能够为每个代码段显示多个失败,而不是在第一个失败时停止。 (#3149 )捕获的日志消息将添加到
<system-out>
生成的JUnit XML文件中的标记,如果junit_logging
ini选项设置为system-out
. 如果此ini选项的值为system-err
,日志将写入<system-err>
. 的默认值junit_logging
是no
,表示捕获的日志不会写入输出文件。 (#3156 )允许日志插件处理
pytest_runtest_logstart
和pytest_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 )
漏洞修补¶
细微/内部变化¶
更改的最低要求
attrs
到17.4.0
. (#3228 )已重命名示例目录,以便从基目录运行时所有测试都通过。 (#3245 )
内部的
mark.py
模块已转换为一个包。 (#3250 )pytest
现在取决于 more-itertools 包裹。 (#3265 )添加警告时间
[pytest]
节用于.cfg
通过的文件-c
(#3268 )nodeids
现在可以显式传递给FSCollector
和Node
构造函数。 (#3291 )内部重构
FormattedExcinfo
使用attrs
为旧的python版本提供工具并删除旧的支持代码。 (#3292 )重构以统一内部如何处理冗长的内容。 (#3296 )
内部重构以更好地与argparse集成。 (#3304 )
在doc/en/usage.rst中调用fixture时修复python示例 (#3308 )
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 )
Pytest 3.4.0(2018-01-30)¶
特征¶
介绍
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 )
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 3.3.0(2017-11-23)¶
弃用和移除¶
pytest不再支持python 2.6 和 3.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
,命令行,以及在使用标记的单个测试期间。另外,Acaplog
夹具可供用户在特定测试期间测试捕获的日志(类似于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
如此out
和err
可以通过属性访问。 (#2879 )添加
capfdbinary
一个版本capfd
从中返回字节readouterr()
. (#2923 )添加
capsysbinary
一个版本capsys
从中返回字节readouterr()
. (#2934 )实现要跳过的功能
setup.py
使用运行时的文件--doctest-modules
. (#502 )
漏洞修补¶
之后恢复输出捕获
capsys/capfd.disabled()
上下文管理器。 (#1993 )pytest_fixture_setup
和pytest_fixture_post_finalizer
现在所有人都需要钩子conftest.py
文件夹。 (#2124 )如果在加载插件时发生异常,pytest将不再隐藏原始的回溯。在python 2中,它将用一条新消息显示原始的回溯,该消息解释了哪个插件。在python 3中,它将显示2个规范化的异常,即加载插件时的原始异常,以及pytest在加载插件时抛出的异常。 (#2491 )
capsys
和capfd
现在可以被其他装置使用。 (#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 )
细微/内部变化¶
重构内部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.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
阶段 (setup
,call
和teardown
)当前正在执行的测试。见 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.fail
,pytest.skip
和pytest.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 )
细微/内部变化¶
更新的帮助消息
--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 )
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警告捕获不再覆盖现有的警告筛选器。先前的行为将覆盖所有过滤器,并导致测试套件中的回归,这些测试套件配置警告过滤器以满足其需求。注意,作为副作用,这是
DeprecationWarning
和PendingDeprecationWarning
默认情况下不再显示。(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.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.
当verbosity=1时,从dict比较输出中删除公共项。同时更新截断消息,以更清楚地表明,如果详细性<2,pytest将截断所有断言消息。 (#1512) . 谢谢 @mattduck 对于公关
--pdbcls
不再暗示--pdb
. 这样就可以使用addopts=--pdbcls=module.SomeClass
在pytest.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.用占位符替换文档中的次要/补丁级别版本号。这显著降低了变更噪音,因为不同的贡献者在不同的平台上重新生成文档。谢谢 @RonnyPfannschmidt 为了PR.
修理 #2391 :考虑所有插件模块上的pytest插件谢谢 @RonnyPfannschmidt 为了PR.
漏洞修补¶
固定
AttributeError
在sys.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.
--override-ini
现在正确地覆盖一些基本选项,比如python_files
(#2238) . 谢谢 @sirex 报告和 @nicoddemus 为了PR.替换
raise StopIteration
代码中的用法returns
按照 PEP-479 (#2160) . 多亏了 @nicoddemus 为了PR.修复无法打印时的内部错误
AssertionError
在测试中引发。谢谢 @omerhadari 为了PR.无条件的
xfail
标记不再依赖作为实例的基础测试项PyobjMixin
因此,可以应用于未由内置的Python测试收集器收集的测试。谢谢 @barneygale 为了PR.
3.0.6(2017-01-22)¶
pytest不再生成
PendingDeprecationWarning
从它自己的操作中,在版本中被错误地引入3.0.5
(#2118) . 多亏了 @nicoddemus 报告和 @RonnyPfannschmidt 为了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.Function
,item.Module
等,现在正在发布弃用警告,首选pytest.Function
,pytest.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.
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.修复生成的XUnit XML中的拆卸错误消息。谢谢 @gdyuldin 为了PR.
正确处理中的异常
multiprocessing
任务 (#1984) . 谢谢 @adborden 报告和 @nicoddemus 为了PR.
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日)¶
修正回归
importorskip
在模块级使用 (#1822) . 谢谢 @jaraco 和 @The-Compiler 报告和 @nicoddemus 为了PR.当会话设备与同一调用中的正常参数一起使用时,修复参数化范围 (#1832) . 谢谢 @The-Compiler 对于这份报告, @Kingdread 和 @nicoddemus 为了PR.
修正使用空参数化测试或夹具时的内部错误
ids
参数 (#1849) . 谢谢 @OPpuolitaival 报告和 @nicoddemus 为了PR.运行时修复加载程序错误
pytest
嵌入到压缩文件中。谢谢 @mbachry 为了PR.
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.capsys
和capfd
现在有一个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)
:在设备的终结器之后调用,并且可以访问设备的结果缓存。
为测试为元组文本的断言发出警告。这种断言永远不会失败,因为元组总是正确的,而且通常是错误的(见 #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) .有标记的固定装置
@pytest.fixture
现在可以使用yield
语句与标记为@pytest.yield_fixture
装饰符。此更改呈现@pytest.yield_fixture
已弃用并使@pytest.fixture
具有yield
语句编写拆卸代码的首选方法 (#1461) . 谢谢 @csaftoiu 为了引起注意和 @nicoddemus 为了PR.当在测试函数中声明未知设备时,设备现在在显示的错误消息中排序。谢谢 @nicoddemus 为了PR.
pytest_terminal_summary
钩子现在接受exitstatus
作为参数的测试会话。谢谢 @blueyed 对于公关 (#1809) .参数化ID可以接受
None
作为特定的测试ID,在这种情况下,将使用为该参数自动生成的ID。谢谢 @palaviv 对于完整的公关 (#1468) .XUnit样式设置/拆卸方法的参数 (
setup_method
,setup_module
等)现在是可选的,可以省略。谢谢 @okken 为了引起注意和 @nicoddemus 为了PR.现在,默认情况下会显示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.ini
或tox.ini
文件受支持且未更改。谢谢 @nicoddemus 为了PR.使用
pytest_funcarg__
声明设备的前缀被视为已弃用,将在pytest-4.0中删除。 (#1684) . 谢谢 @nicoddemus 为了PR.将命令行字符串传递给
pytest.main()
在Pytest-4.0中被视为已弃用并计划删除。建议改为传递参数列表 (#1723) .重命名
getfuncargvalue
到getfixturevalue
.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.
修正了一个错误,行来自
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) .当
CI
或BUILD_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
选项现在应该在xdist
;Config.fromdictargs
现在更忠实地代表了它的输入。多亏了 @bukzor 对于完整的公关 (#680) .固定 (#1290) :支持python 3.5
@
断言重写中的运算符。谢谢 @Shinkenjoe 用于报告测试用例和 @tomviner 为了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.hookimpl
和pytest.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
文件夹。添加
file
和line
JUnit XML输出的属性。修复问题890:更改了所有文档文件的扩展名
txt
到rst
. 多亏了Abhijeet的公关。修复问题114:添加在特定参数名上应用间接=真参数的功能。谢谢Elizaveta239。
修复问题890:更改了所有文档文件的扩展名
txt
到rst
. 多亏了Abhijeet的公关。修复问题957:“doctest:skip”选项现在将把doctest注册为skipped而不是passed。感谢托马斯·格雷格的报告和布鲁诺·奥利维拉的公关。
问题951:添加新的记录_XML_属性fixture,它支持记录有关XML输出的附加信息。感谢大卫·迪亚兹的公关。
问题949:普通选项后的路径(例如
-s
,-v
等)现在被正确地用于发现rootdir
和ini
文件夹。感谢彼得·劳里的报告和布鲁诺·奥利维拉的公关。
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_value
,sys.last_type
和sys.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.test
和py.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]