API 参考¶
此页面包含 pytest API 的完整参考。
常量¶
pytest.__version__¶
当前 pytest 版本,以字符串形式表示
>>> import pytest
>>> pytest.__version__
'7.0.0'
pytest.version_tuple¶
7.0 版新增。
当前 pytest 版本,以元组形式表示
>>> import pytest
>>> pytest.version_tuple
(7, 0, 0)
对于预发布版本,最后一个组件将是一个包含预发布版本的字符串
>>> import pytest
>>> pytest.version_tuple
(7, 0, '0rc1')
函数¶
pytest.approx¶
- approx(expected, rel=None, abs=None, nan_ok=False)[源代码]¶
断言两个数字(或两个有序的数字序列)在一定容差范围内彼此相等。
由于 浮点数运算:问题和限制,我们直观上期望相等的数字并不总是相等
>>> 0.1 + 0.2 == 0.3 False
这个问题在编写测试时经常遇到,例如,在确保浮点值符合预期时。解决此问题的一种方法是断言两个浮点数在某个适当的容差范围内相等
>>> abs((0.1 + 0.2) - 0.3) < 1e-6 True
但是,像上面这样的比较写起来很乏味,而且难以理解。此外,通常不鼓励进行像上面那样的绝对比较,因为没有一种容差适用于所有情况。
1e-6
适用于接近1
的数字,但对于非常大的数字来说太小,对于非常小的数字来说太大。最好将容差表示为预期值的一部分,但像这样的相对比较更难正确简洁地编写。approx
类使用尽可能直观的语法执行浮点比较>>> from pytest import approx >>> 0.1 + 0.2 == approx(0.3) True
相同的语法也适用于有序的数字序列
>>> (0.1 + 0.2, 0.2 + 0.4) == approx((0.3, 0.6)) True
numpy
数组>>> import numpy as np >>> np.array([0.1, 0.2]) + np.array([0.2, 0.4]) == approx(np.array([0.3, 0.6])) True
以及用于比较
numpy
数组与标量的情况>>> import numpy as np >>> np.array([0.1, 0.2]) + np.array([0.2, 0.1]) == approx(0.3) True
仅支持有序序列,因为
approx
需要明确推断序列的相对位置。这意味着不支持sets
和其他无序序列。最后,还可以比较字典的*值*
>>> {'a': 0.1 + 0.2, 'b': 0.2 + 0.4} == approx({'a': 0.3, 'b': 0.6}) True
如果两个映射具有相同的键,并且它们各自的值符合预期的容差,则比较结果为真。
容差
默认情况下,
approx
将预期值的1e-6
(即百万分之一)内的数字视为相等。如果预期值为0.0
,这种处理方式会导致令人惊讶的结果,因为除了0.0
本身之外,没有任何数字相对接近0.0
。为了更合理地处理这种情况,approx
还将预期值的1e-12
内的数字视为相等。无穷大和 NaN 是特殊情况。无论相对容差如何,无穷大只被认为等于自身。默认情况下,NaN 不被认为与任何值相等,但您可以通过将nan_ok
参数设置为 True 来使其等于自身。(这是为了方便比较使用 NaN 表示“无数据”的数组。)可以通过将参数传递给
approx
构造函数来更改相对容差和绝对容差>>> 1.0001 == approx(1) False >>> 1.0001 == approx(1, rel=1e-3) True >>> 1.0001 == approx(1, abs=1e-3) True
如果指定
abs
而不是rel
,则比较将完全不考虑相对容差。换句话说,如果两个数字超过指定的绝对容差,即使它们在默认的1e-6
相对容差内,它们仍将被视为不相等。如果同时指定abs
和rel
,则只要满足任何一个容差,这些数字就会被视为相等>>> 1 + 1e-8 == approx(1) True >>> 1 + 1e-8 == approx(1, abs=1e-12) False >>> 1 + 1e-8 == approx(1, rel=1e-6, abs=1e-12) True
您还可以使用
approx
来比较非数字类型,或者包含非数字类型的字典和序列,在这种情况下,它会退回到严格相等。这对于比较可以包含可选值的字典和序列非常有用>>> {"required": 1.0000005, "optional": None} == approx({"required": 1, "optional": None}) True >>> [None, 1.0000005] == approx([None,1]) True >>> ["foo", 1.0000005] == approx([None,1]) False
如果您正在考虑使用
approx
,那么您可能想知道它与其他比较浮点数的好方法相比如何。所有这些算法都基于相对容差和绝对容差,并且在大多数情况下应该是一致的,但它们确实存在一些有意义的差异math.isclose(a, b, rel_tol=1e-9, abs_tol=0.0)
:如果相对于a
或b
满足相对容差,或者满足绝对容差,则为 True。因为相对容差是相对于a
和b
计算的,所以此测试是对称的(即a
和b
都不是“参考值”)。如果要与0.0
进行比较,则必须指定绝对容差,因为默认情况下没有容差。更多信息:math.isclose()
。numpy.isclose(a, b, rtol=1e-5, atol=1e-8)
:如果a
和b
之间的差小于相对于b
的相对容差和绝对容差之和,则为 True。因为相对容差仅相对于b
计算,所以此测试是不对称的,您可以将b
视为参考值。numpy.allclose()
提供了对比较序列的支持。更多信息:numpy.isclose。unittest.TestCase.assertAlmostEqual(a, b)
:如果a
和b
在1e-7
的绝对容差范围内,则为 True。不考虑相对容差,因此此函数不适用于非常大或非常小的数字。此外,它仅在unittest.TestCase
的子类中可用,并且它很丑陋,因为它不遵循 PEP8。更多信息:unittest.TestCase.assertAlmostEqual()
。a == pytest.approx(b, rel=1e-6, abs=1e-12)
:如果满足相对于b
的相对容差或满足绝对容差,则为 True。因为相对容差仅针对b
计算,所以此测试是不对称的,您可以将b
视为参考值。在您明确指定绝对容差但未指定相对容差的特殊情况下,仅考虑绝对容差。
注意
approx
可以处理 numpy 数组,但如果您需要比较、NaN 或基于 ULP 的容差的支持,我们建议使用 测试支持 (numpy.testing) 中的专用测试助手。要使用正则表达式匹配字符串,可以使用 Matches(来自 re_assert 包)。
警告
在 3.2 版中已更改。
为了避免不一致的行为,
>
、>=
、<
和<=
比较会引发TypeError
。下面的示例说明了该问题assert approx(0.1) > 0.1 + 1e-10 # calls approx(0.1).__gt__(0.1 + 1e-10) assert 0.1 + 1e-10 > approx(0.1) # calls approx(0.1).__lt__(0.1 + 1e-10)
在第二个示例中,预期会调用
approx(0.1).__le__(0.1 + 1e-10)
。但实际上,使用approx(0.1).__lt__(0.1 + 1e-10)
进行比较。这是因为丰富比较的调用层次结构遵循固定的行为。更多信息:object.__ge__()
在 3.7.1 版中已更改:当
approx
遇到非数字类型的字典值或序列元素时,会引发TypeError
。在 6.1.0 版中已更改:
approx
对于非数字类型回退到严格相等,而不是引发TypeError
。
pytest.fail¶
pytest.skip¶
- skip(reason[, allow_module_level=False, msg=None])[source]¶
使用给定的消息跳过正在执行的测试。
此函数只能在测试期间(设置、调用或拆卸)或在收集期间使用
allow_module_level
标志调用。此函数也可以在 doctest 中调用。- 参数:
注意
最好尽可能使用 pytest.mark.skipif 标记来声明在某些条件下(如平台或依赖项不匹配)跳过测试。类似地,使用
# doctest: +SKIP
指令(请参阅doctest.SKIP
)静态跳过 doctest。
pytest.importorskip¶
- importorskip(modname, minversion=None, reason=None, *, exc_type=None)[source]¶
导入并返回请求的模块
modname
,如果无法导入该模块,则跳过当前测试。- 参数:
modname (str) – 要导入的模块的名称。
minversion (str | None) – 如果给出,则导入的模块的
__version__
属性必须至少是此最小版本,否则测试仍将被跳过。reason (str | None) – 如果给出,则在无法导入模块时,将显示此原因作为消息。
exc_type (Type[ImportError] | None) –
为了跳过模块而应捕获的异常。必须是
ImportError
或子类。如果可以导入模块但引发了
ImportError
,pytest 将向用户发出警告,因为用户通常希望找不到该模块(这将引发ModuleNotFoundError
)。可以通过显式传递
exc_type=ImportError
来抑制此警告。有关详细信息,请参阅 pytest.importorskip 关于 ImportError 的默认行为。
- 返回值:
导入的模块。这应该分配给它的规范名称。
- 返回类型:
例子
docutils = pytest.importorskip("docutils")
8.2 版新增:
exc_type
参数。
pytest.xfail¶
- xfail(reason='')[源代码]¶
使用给定的原因强制 xfail 执行中的测试或设置函数。
此函数应仅在测试期间调用(设置、调用或拆卸)。
使用
xfail()
后不会执行其他代码(它通过引发异常在内部实现)。- 参数:
reason (str) – 向用户显示为 xfail 原因的消息。
注意
最好尽可能使用 pytest.mark.xfail 标记来声明在某些条件下(如已知错误或缺少功能)要 xfail 的测试。
pytest.exit¶
- exit(reason[, returncode=None, msg=None])[源代码]¶
退出测试过程。
- 参数:
reason (str) – 显示为退出 pytest 原因的消息。reason 具有默认值,只是因为
msg
已弃用。returncode (int | None) – 退出 pytest 时使用的返回码。None 与
0
(无错误)相同,与sys.exit()
相同。
pytest.main¶
pytest.param¶
- param(*values[, id][, marks])[源代码]¶
在 pytest.mark.parametrize 调用或 参数化夹具 中指定参数。
@pytest.mark.parametrize( "test_input,expected", [ ("3+5", 8), pytest.param("6*9", 42, marks=pytest.mark.xfail), ], ) def test_eval(test_input, expected): assert eval(test_input) == expected
- 参数:
values (对象) – 参数集值的变量参数,按顺序排列。
marks (MarkDecorator | 集合[MarkDecorator | Mark]) – 要应用于此参数集的单个标记或标记列表。
id (字符串 | 无) – 要归属于此参数集的 ID。
pytest.raises¶
教程:关于预期异常的断言
- with raises(expected_exception: 类型[E] | 元组[类型[E], ...], *, match: 字符串 | 模式[字符串] | 无 = ...) RaisesContext[E] as excinfo[源代码]¶
- with raises(expected_exception: Type[E] | Tuple[Type[E], ...], func: Callable[[...], Any], *args: Any, **kwargs: Any) ExceptionInfo[E] as excinfo
断言代码块/函数调用会引发一个异常类型,或其子类之一。
- 参数:
expected_exception – 预期的异常类型,如果预期有多个可能的异常类型,则为元组。请注意,传递的异常的子类也将匹配。
match (str | re.Pattern[str] | None) –
如果指定,则为包含正则表达式的字符串或正则表达式对象,使用
re.search()
对其进行测试,以匹配异常的字符串表示形式及其 PEP 678__notes__
。要匹配可能包含 特殊字符 的字符串字面量,可以使用
re.escape()
对其进行转义。(这仅在
pytest.raises
用作上下文管理器时使用,并在其他情况下传递给函数。当使用pytest.raises
作为函数时,可以使用:pytest.raises(Exc, func, match="passed on").match("my pattern")
。)
使用
pytest.raises
作为上下文管理器,它将捕获给定类型或其任何子类的异常>>> import pytest >>> with pytest.raises(ZeroDivisionError): ... 1/0
如果代码块没有引发预期的异常(例如上面的
ZeroDivisionError
),或者根本没有引发异常,则检查将失败。您还可以使用关键字参数
match
来断言异常是否与文本或正则表达式匹配>>> with pytest.raises(ValueError, match='must be 0 or None'): ... raise ValueError("value must be 0 or None") >>> with pytest.raises(ValueError, match=r'must be \d+$'): ... raise ValueError("value must be 42")
match
参数搜索格式化的异常字符串,其中包括任何 PEP-678__notes__
>>> with pytest.raises(ValueError, match=r"had a note added"): ... e = ValueError("value must be 42") ... e.add_note("had a note added") ... raise e
上下文管理器生成一个
ExceptionInfo
对象,可用于检查捕获到的异常的详细信息>>> with pytest.raises(ValueError) as exc_info: ... raise ValueError("value must be 42") >>> assert exc_info.type is ValueError >>> assert exc_info.value.args[0] == "value must be 42"
警告
鉴于
pytest.raises
匹配子类,请谨慎使用它来匹配像这样的Exception
with pytest.raises(Exception): # Careful, this will catch ANY exception raised. some_function()
因为
Exception
是几乎所有异常的基类,所以这很容易隐藏真正的错误,用户编写此代码时期望出现特定异常,但由于重构过程中引入的错误而引发了其他异常。避免使用
pytest.raises
来捕获Exception
,除非确定确实要捕获任何引发的异常。注意
将
pytest.raises
用作上下文管理器时,值得注意的是,正常的上下文管理器规则适用,并且引发的异常必须是上下文管理器范围内最后一行。此范围内的后续代码行将不会被执行。例如>>> value = 15 >>> with pytest.raises(ValueError) as exc_info: ... if value > 10: ... raise ValueError("value must be <= 10") ... assert exc_info.type is ValueError # This will not execute.
相反,必须采用以下方法(注意范围的差异)
>>> with pytest.raises(ValueError) as exc_info: ... if value > 10: ... raise ValueError("value must be <= 10") ... >>> assert exc_info.type is ValueError
使用
pytest.mark.parametrize
使用 pytest.mark.parametrize 时,可以对测试进行参数化,以便某些运行引发异常而其他运行则不会。
有关示例,请参见 参数化条件引发。
另请参阅
有关更多示例和详细讨论,请参阅 关于预期异常的断言。
旧格式
可以通过传递要调用的 lambda 来指定可调用对象
>>> raises(ZeroDivisionError, lambda: 1/0) <ExceptionInfo ...>
或者,您可以使用参数指定任意可调用对象
>>> def f(x): return 1/x ... >>> raises(ZeroDivisionError, f, 0) <ExceptionInfo ...> >>> raises(ZeroDivisionError, f, x=0) <ExceptionInfo ...>
以上格式完全受支持,但不建议用于新代码,因为上下文管理器格式被认为更具可读性且不易出错。
注意
与 Python 中捕获的异常对象类似,显式清除对返回的
ExceptionInfo
对象的本地引用可以帮助 Python 解释器加速其垃圾收集。清除这些引用会破坏引用循环(
ExceptionInfo
-> 捕获的异常 -> 引发异常的帧堆栈 -> 当前帧堆栈 -> 局部变量 ->ExceptionInfo
),这使得 Python 会保留对该循环引用的所有对象(包括当前帧中的所有局部变量),直到下一次循环垃圾收集运行。更多详细信息可以在 Python 官方文档中找到 try 语句。
pytest.deprecated_call¶
教程:确保代码触发弃用警告
- with deprecated_call(*, match: str | Pattern[str] | None = ...) WarningsRecorder [源代码]¶
- with deprecated_call(func: Callable[[...], T], *args: Any, **kwargs: Any) T
断言代码产生
DeprecationWarning
或PendingDeprecationWarning
或FutureWarning
。此函数可以用作上下文管理器。
>>> import warnings >>> def api_call_v2(): ... warnings.warn('use v3 of this api', DeprecationWarning) ... return 200 >>> import pytest >>> with pytest.deprecated_call(): ... assert api_call_v2() == 200
它也可以通过传递一个函数以及
*args
和**kwargs
来使用,在这种情况下,它将确保调用func(*args, **kwargs)
会产生上述警告类型之一。返回值是函数的返回值。在上下文管理器形式中,您可以使用关键字参数
match
来断言警告与文本或正则表达式匹配。上下文管理器生成一个
warnings.WarningMessage
对象列表,每个引发的警告对应一个对象。
pytest.register_assert_rewrite¶
**教程**:断言重写
pytest.warns¶
**教程**:使用 warns 函数断言警告
- with warns(expected_warning: ~typing.Type[Warning] | ~typing.Tuple[~typing.Type[Warning], ...] = <class 'Warning'>, *, match: str | ~typing.Pattern[str] | None = None) WarningsChecker [源代码]¶
- with warns(expected_warning: Type[Warning] | Tuple[Type[Warning], ...], func: Callable[[...], T], *args: Any, **kwargs: Any) T
断言代码会引发特定类型的警告。
具体来说,参数
expected_warning
可以是一个警告类或警告类元组,并且with
块内的代码必须至少发出一个该类或这些类的警告。此辅助函数会生成一个
warnings.WarningMessage
对象列表,每个发出的警告对应一个对象(无论它是否是expected_warning
)。从 pytest 8.0 开始,当上下文关闭时,不匹配的警告也会被重新发出。此函数可以用作上下文管理器。
>>> import pytest >>> with pytest.warns(RuntimeWarning): ... warnings.warn("my warning", RuntimeWarning)
在上下文管理器表单中,您可以使用关键字参数
match
来断言警告是否与文本或正则表达式匹配>>> with pytest.warns(UserWarning, match='must be 0 or None'): ... warnings.warn("value must be 0 or None", UserWarning) >>> with pytest.warns(UserWarning, match=r'must be \d+$'): ... warnings.warn("value must be 42", UserWarning) >>> with pytest.warns(UserWarning): # catch re-emitted warning ... with pytest.warns(UserWarning, match=r'must be \d+$'): ... warnings.warn("this is not here", UserWarning) Traceback (most recent call last): ... Failed: DID NOT WARN. No warnings of type ...UserWarning... were emitted...
使用
pytest.mark.parametrize
使用 pytest.mark.parametrize 时,可以对测试进行参数化,以便某些运行会引发警告,而其他运行则不会。
这可以通过与异常相同的方式实现,有关示例,请参阅 参数化条件引发。
pytest.freeze_includes¶
教程:冻结 pytest
标记¶
标记可用于将元数据应用于*测试函数*(但不能应用于 fixture),然后 fixture 或插件可以访问这些元数据。
pytest.mark.filterwarnings¶
教程:@pytest.mark.filterwarnings
向标记的测试项添加警告过滤器。
pytest.mark.parametrize¶
此标记与 pytest.Metafunc.parametrize()
具有相同的签名;请参见此处。
pytest.mark.skip¶
教程:跳过测试函数
无条件跳过测试函数。
pytest.mark.skipif¶
教程:跳过测试函数
如果条件为 True
,则跳过测试函数。
pytest.mark.usefixtures¶
教程:在类和模块中使用 usefixtures 使用 fixture
将测试函数标记为使用给定的 fixture 名称。
- pytest.mark.usefixtures(*names)¶
- 参数:
args – 要使用的 fixture 的名称,以字符串形式提供。
注意
在钩子中使用 usefixtures
时,它只能在测试设置之前应用于测试函数时加载 fixture(例如,在 pytest_collection_modifyitems
钩子中)。
另请注意,此标记在应用于fixture时无效。
pytest.mark.xfail¶
将测试函数标记为预期失败。
- pytest.mark.xfail(condition=False, *, reason=None, raises=None, run=True, strict=xfail_strict)¶
- 参数:
condition (Union[bool, str]) – 将测试函数标记为 xfail 的条件(
True/False
或 条件字符串)。如果是bool
,则还必须指定reason
(请参阅 条件字符串)。reason (str) – 将测试函数标记为 xfail 的原因。
raises (Type[Exception]) – 预计由测试函数引发的异常类(或类元组);其他异常将导致测试失败。请注意,传递的类的子类也将导致匹配(类似于
except
语句的工作方式)。run (bool) – 是否应实际执行测试函数。如果为
False
,则该函数将始终 xfail 并且不会被执行(如果函数出现段错误,则此选项很有用)。strict (bool) –
如果为
False
,则如果函数失败,则在终端输出中显示为xfailed
,如果通过,则显示为xpass
。在这两种情况下,这都不会导致整个测试套件失败。这对于标记以后要处理的*不稳定*测试(随机失败的测试)特别有用。如果为
True
,则如果函数失败,则在终端输出中显示为xfailed
,但如果意外通过,则将导致测试套件**失败**。这对于标记始终失败的函数特别有用,并且如果它们意外开始通过(例如,库的新版本修复了已知错误),则应该有明确的指示。
默认为
xfail_strict
,默认值为False
。
自定义标记¶
使用工厂对象 pytest.mark
动态创建标记,并将其作为装饰器应用。
例如
@pytest.mark.timeout(10, "slow", method="thread")
def test_function(): ...
将创建 Mark
对象并将其附加到收集的 Item
,然后可以使用 Node.iter_markers
由 fixture 或钩子访问。 mark
对象将具有以下属性
mark.args == (10, "slow")
mark.kwargs == {"method": "thread"}
使用多个自定义标记的示例
@pytest.mark.timeout(10, "slow", method="thread")
@pytest.mark.slow
def test_function(): ...
当 Node.iter_markers
或 Node.iter_markers_with_node
与多个标记一起使用时,将首先迭代最靠近函数的标记。上面的示例将导致 @pytest.mark.slow
,然后是 @pytest.mark.timeout(...)
。
Fixtures¶
教程:Fixtures 参考
测试函数或其他 fixture 可以通过将 fixture 声明为参数名称来请求它们。
需要 fixture 的测试示例
def test_output(capsys):
print("hello")
out, err = capsys.readouterr()
assert out == "hello\n"
需要另一个 fixture 的 fixture 示例
@pytest.fixture
def db_session(tmp_path):
fn = tmp_path / "db.file"
return connect(fn)
有关更多详细信息,请参阅完整的 fixtures 文档。
@pytest.fixture¶
- @fixture(fixture_function: FixtureFunction, *, scope: Literal['session', 'package', 'module', 'class', 'function'] | Callable[[str, Config], Literal['session', 'package', 'module', 'class', 'function']] = 'function', params: Iterable[object] | None = None, autouse: bool = False, ids: Sequence[object | None] | Callable[[Any], object | None] | None = None, name: str | None = None) FixtureFunction [source]¶
- @fixture(fixture_function: None = None, *, scope: Literal['session', 'package', 'module', 'class', 'function'] | Callable[[str, Config], Literal['session', 'package', 'module', 'class', 'function']] = 'function', params: Iterable[object] | None = None, autouse: bool = False, ids: Sequence[object | None] | Callable[[Any], object | None] | None = None, name: str | None = None) FixtureFunctionMarker
用于标记 fixture 工厂函数的装饰器。
此装饰器可以使用或不使用参数来定义 fixture 函数。
稍后可以引用 fixture 函数的名称,以便在运行测试之前调用它:测试模块或类可以使用
pytest.mark.usefixtures(fixturename)
标记。测试函数可以直接使用 fixture 名称作为输入参数,在这种情况下,将注入从 fixture 函数返回的 fixture 实例。
Fixtures 可以使用
return
或yield
语句向测试函数提供其值。当使用yield
时,无论测试结果如何,yield
语句之后的代码块都将作为拆卸代码执行,并且必须且仅 yield 一次。- 参数:
scope –
此 fixture 共享的范围;可以是
"function"
(默认)、"class"
、"module"
、"package"
或"session"
之一。此参数也可以是可调用对象,它接收
(fixture_name, config)
作为参数,并且必须返回包含上述值之一的str
。有关更多信息,请参阅文档中的 动态范围。
params – 可选的参数列表,这些参数将导致多次调用 fixture 函数以及使用它的所有测试。当前参数在
request.param
中可用。autouse – 如果为 True,则会为所有可以看到它的测试激活 fixture 函数。如果为 False(默认值),则需要显式引用才能激活 fixture。
ids – 与每个参数相对应的 id 序列,以便它们成为测试 id 的一部分。如果没有提供 id,则将根据参数自动生成它们。
name – fixture 的名称。默认为装饰函数的名称。如果在定义 fixture 的同一个模块中使用 fixture,则 fixture 的函数名称将被请求 fixture 的函数参数遮蔽;解决此问题的一种方法是将装饰函数命名为
fixture_<fixturename>
,然后使用@pytest.fixture(name='<fixturename>')
。
capfd¶
- capfd()[source]¶
启用对文件描述符
1
和2
的写入进行文本捕获。捕获的输出可通过
capfd.readouterr()
方法调用获得,该方法返回一个(out, err)
命名元组。out
和err
将是text
对象。返回
CaptureFixture[str]
的实例。示例:.. code-block:: python
- def test_system_echo(capfd)
os.system(‘echo “hello”’) captured = capfd.readouterr() assert captured.out == “hellon”
capfdbinary¶
- capfdbinary()[源代码]¶
启用对文件描述符
1
和2
的写入进行字节捕获。捕获的输出可通过
capfd.readouterr()
方法调用获得,该方法返回一个(out, err)
命名元组。out
和err
将是byte
对象。返回
CaptureFixture[bytes]
的实例。示例:.. code-block:: python
- def test_system_echo(capfdbinary)
os.system(‘echo “hello”’) captured = capfdbinary.readouterr() assert captured.out == b”hellon”
caplog¶
**教程**:如何管理日志记录
- caplog()[源代码]¶
访问和控制日志捕获。
捕获的日志可通过以下属性/方法获得
* caplog.messages -> list of format-interpolated log messages * caplog.text -> string containing formatted log output * caplog.records -> list of logging.LogRecord instances * caplog.record_tuples -> list of (logger_name, level, message) tuples * caplog.clear() -> clear captured records and formatted log output string
返回一个
pytest.LogCaptureFixture
实例。
- final class LogCaptureFixture[源代码]¶
提供对日志捕获的访问和控制。
- property handler: LogCaptureHandler¶
获取装置使用的日志处理程序。
- get_records(when)[源代码]¶
获取某个可能测试阶段的日志记录。
- 参数:
**when** (Literal['setup', 'call', 'teardown']) – 要从中获取记录的测试阶段。有效值为:“setup”、“call”和“teardown”。
- 返回值:
给定阶段捕获的记录列表。
- 返回类型:
3.4 版新增。
- property record_tuples: List[Tuple[str, int, str]]¶
用于断言比较的精简版日志记录列表。
元组的格式为
(logger_name, log_level, message)
- property messages: List[str]¶
格式插值后的日志消息列表。
与包含格式字符串和插值参数的“records”不同,此列表中的日志消息都已插值。
与包含处理程序输出的“text”不同,此列表中的日志消息没有级别、时间戳等修饰,使得精确比较更加可靠。
请注意,不包括回溯或堆栈信息(来自
logging.exception()
或传递给日志记录函数的exc_info
或stack_info
参数),因为这是由处理程序中的格式化程序添加的。3.7 版新增。
- set_level(level, logger=None)[源代码]¶
在测试期间设置记录器的阈值级别。
严重程度低于此级别的日志消息将不会被捕获。
在 3.4 版更改: 此函数更改的记录器级别将在测试结束时恢复为其初始值。
如果通过
logging.disable()
禁用了请求的日志记录级别,则将启用该级别。
- with at_level(level, logger=None)[源代码]¶
上下文管理器,用于设置捕获日志的级别。“with”语句结束后,级别将恢复为其原始值。
如果通过
logging.disable()
禁用了请求的日志记录级别,则将启用该级别。
- with filtering(filter_)[源代码]¶
上下文管理器,用于在“with”语句块期间将给定过滤器临时添加到 caplog 的
handler()
,并在块结束时删除该过滤器。- 参数:
filter – 自定义
logging.Filter
对象。
7.5 版新增。
capsys¶
- capsys()[源代码]¶
启用对写入
sys.stdout
和sys.stderr
的文本捕获。捕获的输出可通过
capsys.readouterr()
方法调用获得,该方法返回一个(out, err)
命名元组。out
和err
将是text
对象。返回
CaptureFixture[str]
的实例。示例:.. code-block:: python
- def test_output(capsys):
print("hello") captured = capsys.readouterr() assert captured.out == "hellon"
- class CaptureFixture[source]¶
capsys
、capsysbinary
、capfd
和capfdbinary
fixture 返回的对象。
capsysbinary¶
- capsysbinary()[source]¶
启用对
sys.stdout
和sys.stderr
的写入的字节捕获。捕获的输出可以通过
capsysbinary.readouterr()
方法调用获得,该方法返回一个(out, err)
命名元组。out
和err
将是bytes
对象。返回
CaptureFixture[bytes]
的实例。示例:.. code-block:: python
- def test_output(capsysbinary):
print("hello") captured = capsysbinary.readouterr() assert captured.out == b"hellon"
config.cache¶
**教程**:如何重新运行失败的测试并在测试运行之间维护状态
config.cache
对象允许其他插件和 fixture 在测试运行之间存储和检索值。要从 fixture 访问它,请在 fixture 中请求 pytestconfig
并使用 pytestconfig.cache
获取它。
在底层,缓存插件使用 json
标准库模块的简单 dumps
/loads
API。
config.cache
是 pytest.Cache
的实例
- final class Cache[source]¶
cache
fixture 的实例。- mkdir(name)[source]¶
返回具有给定名称的目录路径对象。
如果该目录尚不存在,则将创建该目录。您可以使用它来管理文件,例如在测试会话之间存储/检索数据库转储。
7.0 版新增。
- 参数:
name (str) – 必须是不包含
/
分隔符的字符串。确保名称包含您的插件或应用程序标识符,以防止与其他缓存用户发生冲突。
doctest_namespace¶
教程:如何运行 doctest
- doctest_namespace()[源代码]¶
返回
dict
的夹具,该字典将被注入到 doctest 的命名空间中。通常,此夹具与另一个
autouse
夹具一起使用@pytest.fixture(autouse=True) def add_np(doctest_namespace): doctest_namespace["np"] = numpy
有关更多详细信息,请参阅:‘doctest_namespace’ 夹具。
monkeypatch¶
- monkeypatch()[源代码]¶
用于猴子补丁的便捷夹具。
该夹具提供了以下方法来修改对象、字典或
os.environ
所有修改将在请求的测试函数或夹具完成后撤消。
raising
参数决定了如果设置/删除操作没有指定目标,是否会引发KeyError
或AttributeError
。要撤消夹具在包含范围内所做的修改,请使用
context()
。返回一个
MonkeyPatch
实例。
- final class MonkeyPatch[源代码]¶
帮助程序,方便地对属性/项/环境变量/系统路径进行猴子补丁。
由
monkeypatch
夹具返回。在 6.2 版更改: 现在也可以直接用作
pytest.MonkeyPatch()
,用于夹具不可用的情况。在这种情况下,请使用with MonkeyPatch.context() as mp:
或记住显式调用undo()
。- classmethod with context()[源代码]¶
上下文管理器,返回一个新的
MonkeyPatch
对象,该对象在退出时撤消在with
块内完成的任何修补。示例:.. code-block:: python
import functools
- def test_partial(monkeypatch)
- with monkeypatch.context() as m
m.setattr(functools, “partial”, 3)
在希望在测试结束之前撤消某些补丁的情况下很有用,例如模拟
stdlib
函数,如果模拟这些函数可能会破坏 pytest 本身(有关示例,请参见 问题 #3290)。
- setattr(target: str, name: object, value: ~_pytest.monkeypatch.Notset = <notset>, raising: bool = True) None [源代码]¶
- setattr(target: object, name: str, value: object, raising: bool = True) None
设置目标上的属性值,记住旧值。
例如
import os monkeypatch.setattr(os, "getcwd", lambda: "/")
上面的代码用一个总是返回
"/"
的lambda
替换了os.getcwd()
函数。为了方便起见,您可以指定一个字符串作为
target
,它将被解释为一个点分隔的导入路径,最后一部分是属性名称。monkeypatch.setattr("os.getcwd", lambda: "/")
如果属性不存在,则引发
AttributeError
,除非raising
设置为 False。在哪里打补丁
monkeypatch.setattr
的工作原理是(临时)将名称指向的对象更改为另一个对象。可以有多个名称指向任何单个对象,因此要使修补工作,您必须确保修补了被测系统使用的名称。有关完整说明,请参阅
unittest.mock
文档中的 在哪里打补丁 部分,该部分适用于unittest.mock.patch()
,但也适用于monkeypatch.setattr
。
- delattr(target, name=<notset>, raising=True)[源代码]¶
从
target
中删除属性name
。如果没有指定
name
并且target
是一个字符串,它将被解释为一个点分隔的导入路径,最后一部分是属性名称。如果属性不存在,则引发 AttributeError,除非
raising
设置为 False。
pytestconfig¶
- pytestconfig()[源代码]¶
会话范围的 fixture,返回会话的
pytest.Config
对象。例子
def test_foo(pytestconfig): if pytestconfig.getoption("verbose") > 0: ...
pytester¶
6.2 版新增。
提供了一个 Pytester
实例,可用于运行和测试 pytest 本身。
它提供了一个空目录,pytest 可以在其中隔离执行,并且包含编写测试、配置文件和匹配预期输出的功能。
要使用它,请在你的最顶层 conftest.py
文件中包含
pytest_plugins = "pytester"
- final class Pytester[源代码]¶
用于编写测试/配置文件、在隔离环境中执行 pytest 并与预期输出进行匹配的工具,非常适合对 pytest 插件进行黑盒测试。
它试图尽可能地将测试运行与外部因素隔离,并在初始化期间将当前工作目录修改为
path
和环境变量。- plugins: List[str | object]¶
要与
parseconfig()
和runpytest()
一起使用的插件列表。最初这是一个空列表,但可以将插件添加到列表中。要添加到列表中的项目的类型取决于使用它们的方法,因此请参阅它们以获取详细信息。
- make_hook_recorder(pluginmanager)[源代码]¶
为
PytestPluginManager
创建一个新的HookRecorder
。
- makefile(ext, *args, **kwargs)[源代码]¶
在测试目录中创建新的文本文件。
- 参数:
- 返回值:
第一个创建的文件。
- 返回类型:
示例: .. code-block:: python
pytester.makefile(“.txt”, “line1”, “line2”)
pytester.makefile(“.ini”, pytest=”[pytest]naddopts=-rsn”)
要创建二进制文件,请直接使用
pathlib.Path.write_bytes()
filename = pytester.path.joinpath("foo.bin") filename.write_bytes(b"...")
- makepyfile(*args, **kwargs)[源代码]¶
使用 .py 扩展名创建文件的快捷方式。
默认为带有“.py”扩展名的测试名称,例如 test_foobar.py,会覆盖现有文件。
示例: .. code-block:: python
- def test_something(pytester)
# 初始文件名为 test_something.py。 pytester.makepyfile("foobar") # 要创建多个文件,请相应地传递 kwargs。 pytester.makepyfile(custom="foobar") # 此时,测试目录中同时存在“test_something.py”和“custom.py”。
- maketxtfile(*args, **kwargs)[源代码]¶
使用 .txt 扩展名创建文件的快捷方式。
默认为带有“.txt”扩展名的测试名称,例如 test_foobar.txt,会覆盖现有文件。
示例: .. code-block:: python
- def test_something(pytester)
# 初始文件名为 test_something.txt。 pytester.maketxtfile("foobar") # 要创建多个文件,请相应地传递 kwargs。 pytester.maketxtfile(custom="foobar") # 此时,测试目录中同时存在“test_something.txt”和“custom.txt”。
- getnode(config, arg)[源代码]¶
获取文件的集合节点。
- 参数:
config (Config) – pytest 配置。请参阅
parseconfig()
和parseconfigure()
以了解如何创建它。
- 返回值:
节点。
- 返回类型:
- getpathnode(path)[源代码]¶
返回文件的集合节点。
这类似于
getnode()
,但使用parseconfigure()
来创建(已配置的)pytest Config 实例。
- runitem(source)[源代码]¶
运行“test_func”项。
调用的测试实例(包含测试方法的类)必须提供一个
.getrunner()
方法,该方法应返回一个可以为单个项运行测试协议的运行器,例如_pytest.runner.runtestprotocol
。
- inline_runsource(source, *cmdlineargs)[源代码]¶
使用
pytest.main()
在进程中运行测试模块。此运行将“source”写入临时文件并对其运行
pytest.main()
,返回一个HookRecorder
实例作为结果。- 参数:
source (字符串) – 测试模块的源代码。
cmdlineargs – 要使用的任何额外的命令行参数。
- inline_genitems(*args)[源代码]¶
在进程中运行
pytest.main(['--collect-only'])
。运行
pytest.main()
函数以在测试进程本身内部运行所有 pytest,如inline_run()
,但返回收集到的项的元组和HookRecorder
实例。
- inline_run(*args, plugins=(), no_reraise_ctrlc=False)[源代码]¶
在进程中运行
pytest.main()
,返回一个 HookRecorder。运行
pytest.main()
函数以在测试进程本身内部运行所有 pytest。这意味着它可以返回一个HookRecorder
实例,该实例提供比通过匹配runpytest()
的 stdout/stderr 更详细的结果。- 参数:
args (str | PathLike[str]) – 要传递给
pytest.main()
的命令行参数。plugins –
pytest.main()
实例应使用的额外插件实例。no_reraise_ctrlc (bool) – 通常我们从子运行中重新引发键盘中断。如果为 True,则捕获 KeyboardInterrupt 异常。
- parseconfig(*args)[源代码]¶
从给定的命令行参数返回一个新的 pytest
pytest.Config
实例。这将调用 _pytest.config 中的 pytest 引导代码来创建一个新的
pytest.PytestPluginManager
并调用pytest_cmdline_parse
钩子来创建一个新的pytest.Config
实例。如果
plugins
已被填充,则它们应该是要向插件管理器注册的插件模块。
- parseconfigure(*args)[源代码]¶
返回一个新的 pytest 配置的 Config 实例。
返回一个新的
pytest.Config
实例,如parseconfig()
,但也调用pytest_configure
钩子。
- getitem(source, funcname='test_func')[源代码]¶
返回测试函数的测试项。
将源代码写入 Python 文件,并在生成的模块上运行 pytest 的收集,返回请求的函数名称的测试项。
- getmodulecol(source, configargs=(), *, withinit=False)[源代码]¶
返回
source
的模块收集节点。使用
makepyfile()
将source
写入文件,然后在其上运行 pytest 收集,返回测试模块的收集节点。- 参数:
configargs – 要传递给
parseconfigure()
的任何额外参数。withinit (bool) – 是否还要将
__init__.py
文件写入同一目录以确保它是一个包。
- collect_by_name(modcol, name)[源代码]¶
返回模块集合中名称的收集节点。
在模块收集节点中搜索与给定名称匹配的收集节点。
- 参数:
modcol (Collector) – 模块收集节点;参见
getmodulecol()
。name (str) – 要返回的节点的名称。
- popen(cmdargs, stdout=-1, stderr=-1, stdin=NotSetType.token, **kw)[源代码]¶
调用
subprocess.Popen
。调用
subprocess.Popen
,确保当前工作目录位于PYTHONPATH
中。您可能想改用
run()
。
- run(*cmdargs, timeout=None, stdin=NotSetType.token)[源代码]¶
使用参数运行命令。
使用
subprocess.Popen
运行进程,保存标准输出和标准错误。- 参数:
cmdargs (str | PathLike[str]) – 要传递给
subprocess.Popen
的参数序列,类路径对象将自动转换为str
。timeout (float | None) – 超时并引发
Pytester.TimeoutExpired
的秒数。stdin (NotSetType | bytes | IO[Any] | int) –
可选的标准输入。
如果它是
CLOSE_STDIN
(默认),则此方法使用stdin=subprocess.PIPE
调用subprocess.Popen
,并且在新命令启动后立即关闭标准输入。如果它是
bytes
类型,则这些字节将发送到命令的标准输入。否则,它将传递给
subprocess.Popen
。有关这种情况下的更多信息,请参阅subprocess.Popen
中stdin
参数的文档。
- 返回值:
结果。
- 返回类型:
- runpytest_subprocess(*args, timeout=None)[源代码]¶
使用给定参数将 pytest 作为子进程运行。
添加到
plugins
列表中的任何插件都将使用-p
命令行选项添加。此外,--basetemp
用于将任何临时文件和目录放在以“runpytest-”为前缀的编号目录中,以避免与临时文件和目录的常规编号 pytest 位置冲突。
- final class RunResult[源代码]¶
从
Pytester
运行命令的结果。- outlines¶
从标准输出捕获的行列表。
- errlines¶
从标准错误捕获的行列表。
- stdout¶
LineMatcher
类型的标准输出。使用例如
str(stdout)
来重建标准输出,或者常用的stdout.fnmatch_lines()
方法。
- stderr¶
LineMatcher
类型的标准错误输出。
- duration¶
持续时间,以秒为单位。
- parseoutcomes()[源代码]¶
通过解析测试进程生成的终端输出,返回一个结果名词 -> 计数的字典。
返回的名词将始终为复数形式
======= 1 failed, 1 passed, 1 warning, 1 error in 0.13s ====
将返回
{"failed": 1, "passed": 1, "warnings": 1, "errors": 1}
。
- class LineMatcher[源代码]¶
灵活的文本匹配。
这是一个方便的类,用于测试像命令输出这样的大文本。
构造函数接受一个不带尾随换行符的行列表,即
text.splitlines()
。- fnmatch_lines_random(lines2)[源代码]¶
检查行是否存在于输出中,顺序不限(使用
fnmatch.fnmatch()
)。
- re_match_lines_random(lines2)[源代码]¶
检查行是否存在于输出中,顺序不限(使用
re.match()
)。
- fnmatch_lines(lines2, *, consecutive=False)[源代码]¶
检查行是否存在于输出中(使用
fnmatch.fnmatch()
)。参数是一个行列表,这些行必须匹配并且可以使用 glob 通配符。如果它们不匹配,则调用 pytest.fail()。匹配和不匹配的行也会作为错误消息的一部分显示。
- re_match_lines(lines2, *, consecutive=False)[源代码]¶
检查行是否存在于输出中(使用
re.match()
)。参数是一个行列表,这些行必须使用
re.match
进行匹配。如果它们不匹配,则调用 pytest.fail()。匹配和不匹配的内容也会作为错误信息的一部分显示。
record_property¶
record_testsuite_property¶
- record_testsuite_property()[源代码]¶
将新的
<property>
标签记录为根<testsuite>
的子级。这适用于编写有关整个测试套件的全局信息,并且与
xunit2
JUnit 家族兼容。这是一个
session
级别的 fixture,使用(name, value)
调用。示例def test_foo(record_testsuite_property): record_testsuite_property("ARCH", "PPC") record_testsuite_property("STORAGE_TYPE", "CEPH")
- 参数:
name – 属性名称。
value – 属性值。将转换为字符串。
警告
目前,此 fixture 不适用于 pytest-xdist 插件。有关详细信息,请参阅 问题 #7767。
recwarn¶
**教程**:使用 warns 函数断言警告
- recwarn()[源代码]¶
返回一个
WarningsRecorder
实例,该实例记录测试函数发出的所有警告。有关警告类别的信息,请参阅 https://pytest.pythonlang.cn/en/latest/how-to/capture-warnings.html。
- 类 WarningsRecorder[源代码]¶
一个用于记录引发的警告的上下文管理器。
每个记录的警告都是
warnings.WarningMessage
的实例。改编自
warnings.catch_warnings
。注意
DeprecationWarning
和PendingDeprecationWarning
的处理方式不同;请参阅 确保代码触发弃用警告。
request¶
request
fixture 是一种特殊的 fixture,提供请求测试函数的信息。
- class FixtureRequest[源代码]¶
request
fixture 的类型。request 对象允许访问请求测试上下文,并在 fixture 被参数化的情况下具有
param
属性。- property scope: Literal['session', 'package', 'module', 'class', 'function']¶
范围字符串,可以是 “function”、“class”、“module”、“package”、“session” 之一。
- abstract property node¶
底层集合节点(取决于当前请求范围)。
- property function¶
如果请求具有函数级范围,则为测试函数对象。
- property cls¶
收集测试函数的类(可以是 None)。
- property instance¶
收集测试函数的实例(可以是 None)。
- property module¶
收集测试函数的 Python 模块对象。
- property keywords: MutableMapping[str, Any]¶
底层节点的关键字/标记字典。
- applymarker(marker)[源代码]¶
将标记应用于单个测试函数调用。
如果您不希望所有函数调用都有关键字/标记,则此方法很有用。
- 参数:
marker (str | MarkDecorator) – 通过调用
pytest.mark.NAME(...)
创建的对象。
- getfixturevalue(argname)[源代码]¶
动态运行命名的 fixture 函数。
建议尽可能通过函数参数声明 fixture。但是,如果只能在测试设置时决定是否使用另一个 fixture,则可以使用此函数在 fixture 或测试函数体内部检索它。
此方法可以在测试设置阶段或测试运行阶段使用,但在测试拆卸阶段,fixture 的值可能不可用。
- 参数:
argname (str) – fixture 名称。
- 引发:
pytest.FixtureLookupError – 如果找不到给定的 fixture。
testdir¶
与 pytester
相同,但提供了一个实例,该实例的方法在适用时返回传统的 py.path.local
对象。
新代码应避免使用 testdir
,而应使用 pytester
。
- final class Testdir[源代码]
类似于
Pytester
,但此类使用旧版 legacy_path 对象。所有方法都只是转发到内部
Pytester
实例,并根据需要将结果转换为legacy_path
对象。- exception TimeoutExpired
- property tmpdir: LocalPath
执行测试的临时目录。
- make_hook_recorder(pluginmanager)[源代码]
参见
Pytester.make_hook_recorder()
。
- chdir()[源代码]
参见
Pytester.chdir()
。
- makefile(ext, *args, **kwargs)[源代码]
-
- makeconftest(source)[源代码]
-
- makeini(source)[源代码]
-
- getinicfg(source)[源代码]
-
- makepyprojecttoml(source)[源代码]
参见
Pytester.makepyprojecttoml()
。
- makepyfile(*args, **kwargs)[源代码]
-
- maketxtfile(*args, **kwargs)[源代码]
-
- syspathinsert(path=None)[源代码]
-
- mkdir(name)[源代码]
参见
Pytester.mkdir()
。
- mkpydir(name)[源代码]
-
- copy_example(name=None)[源代码]
-
- getnode(config, arg)[源代码]
-
- getpathnode(path)[源代码]
- genitems(colitems)[源代码]
-
- runitem(source)[源代码]
- inline_runsource(source, *cmdlineargs)[源代码]
- inline_genitems(*args)[源代码]
- inline_run(*args, plugins=(), no_reraise_ctrlc=False)[源代码]
-
- runpytest_inprocess(*args, **kwargs)[源代码]
参见
Pytester.runpytest_inprocess()
。
- runpytest(*args, **kwargs)[源代码]
-
- parseconfig(*args)[源代码]
-
- parseconfigure(*args)[源代码]
-
- getitem(source, funcname='test_func')[源代码]
- getitems(source)[源代码]
- getmodulecol(source, configargs=(), withinit=False)[源代码]
- collect_by_name(modcol, name)[源代码]
参见
Pytester.collect_by_name()
。
- popen(cmdargs, stdout=-1, stderr=-1, stdin=NotSetType.token, **kw)[源代码]
参见
Pytester.popen()
。
- run(*cmdargs, timeout=None, stdin=NotSetType.token)[源代码]
参见
Pytester.run()
。
- runpython(script)[源代码]
-
- runpython_c(command)[源代码]
- runpytest_subprocess(*args, timeout=None)[源代码]
参见
Pytester.runpytest_subprocess()
。
- spawn_pytest(string, expect_timeout=10.0)[源代码]
-
- spawn(cmd, expect_timeout=10.0)[源代码]
参见
Pytester.spawn()
。
tmp_path¶
- tmp_path()[源代码]¶
返回一个临时目录路径对象,该对象对于每个测试函数调用都是唯一的,并作为基本临时目录的子目录创建。
默认情况下,每次测试会话都会创建一个新的基本临时目录,并在 3 个会话后删除旧的基本目录,以帮助调试。可以使用
tmp_path_retention_count
和tmp_path_retention_policy
配置此行为。如果使用了--basetemp
,则会在每个会话中清除它。请参阅 临时目录位置和保留。返回的对象是一个
pathlib.Path
对象。
tmp_path_factory¶
tmp_path_factory
是 TempPathFactory
的实例
tmpdir¶
教程:tmpdir 和 tmpdir_factory fixture
- tmpdir()¶
返回一个临时目录路径对象,该对象对于每个测试函数调用都是唯一的,并作为基本临时目录的子目录创建。
默认情况下,每次测试会话都会创建一个新的基本临时目录,并在 3 个会话后删除旧的基本目录,以帮助调试。如果使用了
--basetemp
,则会在每个会话中清除它。请参阅 临时目录位置和保留。返回的对象是一个 legacy_path 对象。
tmpdir_factory¶
教程:tmpdir 和 tmpdir_factory fixture
tmpdir_factory
是 TempdirFactory
的实例
- final class TempdirFactory[源代码]¶
向后兼容包装器,为
TempPathFactory
实现py.path.local
。- mktemp(basename, numbered=True)[source]¶
与
TempPathFactory.mktemp()
相同,但返回一个py.path.local
对象。
- getbasetemp()[source]¶
与
TempPathFactory.getbasetemp()
相同,但返回一个py.path.local
对象。
钩子¶
教程:编写插件
引用所有可以由 conftest.py 文件 和 插件 实现的钩子。
@pytest.hookimpl¶
- @pytest.hookimpl¶
pytest 用于将函数标记为钩子实现的装饰器。
@pytest.hookspec¶
- @pytest.hookspec¶
pytest 用于将函数标记为钩子规范的装饰器。
参见 声明新钩子 和
pluggy.HookspecMarker()
。
引导钩子¶
为足够早注册的插件(内部插件和 setuptools 插件)调用的引导钩子。
- pytest_load_initial_conftests(early_config, parser, args)[source]¶
在命令行选项解析之前调用以实现 初始 conftest 文件 的加载。
- 参数:
在 conftest 插件中使用¶
不会为 conftest 文件调用此钩子。
- pytest_cmdline_parse(pluginmanager, args)[source]¶
返回一个初始化的
Config
,解析指定的 args。在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
注意
仅当使用 pytest.main 执行进程内测试运行时,才会为传递给
plugins
参数的插件类调用此钩子。- 参数:
pluginmanager (PytestPluginManager) – pytest 插件管理器。
- 返回值:
pytest 配置对象。
- 返回类型:
Config | None
在 conftest 插件中使用¶
不会为 conftest 文件调用此钩子。
- pytest_cmdline_main(config)[源代码]¶
调用以执行主命令行操作。
默认实现将调用配置钩子和
pytest_runtestloop
。在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
在 conftest 插件中使用¶
此钩子仅针对 初始 conftests 调用。
初始化钩子¶
为插件和 conftest.py
文件调用的初始化钩子。
- pytest_addoption(parser, pluginmanager)[源代码]¶
注册 argparse 风格的选项和 ini 风格的配置值,在测试运行开始时调用一次。
- 参数:
parser (Parser) – 要添加命令行选项,请调用
parser.addoption(...)
。要添加 ini 文件值,请调用parser.addini(...)
。pluginmanager (PytestPluginManager) – pytest 插件管理器,可用于安装
hookspec()
或hookimpl()
,并允许一个插件调用另一个插件的钩子来更改添加命令行选项的方式。
之后可以通过
config
对象访问选项,分别为config.getoption(name)
检索命令行选项的值。config.getini(name)
检索从 ini 风格文件中读取的值。
config 对象通过
.config
属性在许多内部对象上传递,或者可以作为pytestconfig
fixture 检索。注意
此钩子与钩子包装器不兼容。
在 conftest 插件中使用¶
如果 conftest 插件实现了此钩子,则在注册 conftest 时将立即调用它。
此钩子仅针对 初始 conftests 调用。
- pytest_addhooks(pluginmanager)[源代码]¶
在插件注册时调用,以允许通过调用
pluginmanager.add_hookspecs(module_or_class, prefix)
添加新的钩子。- 参数:
pluginmanager (PytestPluginManager) – pytest 插件管理器。
注意
此钩子与钩子包装器不兼容。
在 conftest 插件中使用¶
如果 conftest 插件实现了此钩子,则在注册 conftest 时将立即调用它。
- pytest_configure(config)[源代码]¶
允许插件和 conftest 文件执行初始配置。
注意
此钩子与钩子包装器不兼容。
- 参数:
config (Config) – pytest 配置对象。
在 conftest 插件中使用¶
在解析命令行选项后,将为每个 初始 conftest 文件调用此钩子。之后,在注册其他 conftest 文件时,也会调用此钩子。
- pytest_unconfigure(config)[源代码]¶
在测试进程退出之前调用。
- 参数:
config (Config) – pytest 配置对象。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。
- pytest_sessionstart(session)[源代码]¶
在创建
Session
对象之后,以及在执行收集和进入运行测试循环之前调用。- 参数:
session (Session) – pytest 会话对象。
在 conftest 插件中使用¶
此钩子仅针对 初始 conftests 调用。
- pytest_sessionfinish(session, exitstatus)[源代码]¶
在整个测试运行结束后,即将向系统返回退出状态之前调用。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。
- pytest_plugin_registered(plugin, plugin_name, manager)[源代码]¶
已注册新的 pytest 插件。
- 参数:
plugin (_PluggyPlugin) – 插件模块或实例。
plugin_name (str) – 插件注册时使用的名称。
manager (PytestPluginManager) – pytest 插件管理器。
注意
此钩子与钩子包装器不兼容。
在 conftest 插件中使用¶
如果 conftest 插件实现了此钩子,则在注册 conftest 时会立即调用它,对于迄今为止注册的每个插件(包括其自身!)调用一次,并在之后注册所有其他插件时调用。
收集钩子¶
pytest
调用以下钩子来收集文件和目录
- pytest_collection(session)[源代码]¶
为给定会话执行收集阶段。
在第一个非 None 结果处停止,请参阅 firstresult:在第一个非 None 结果处停止。返回值未使用,仅停止进一步处理。
默认的收集阶段如下(有关完整详细信息,请参阅各个钩子)
从
session
作为初始收集器开始
pytest_collectstart(collector)
report = pytest_make_collect_report(collector)
如果发生交互式异常,则执行
pytest_exception_interact(collector, call, report)
对于每个收集的节点
如果是项目,则执行
pytest_itemcollected(item)
如果是收集器,则递归到其中。
pytest_collectreport(report)
pytest_collection_modifyitems(session, config, items)
对任何取消选择的项目执行
pytest_deselected(items)
(可能会被多次调用)
pytest_collection_finish(session)
将
session.items
设置为收集到的项目列表将
session.testscollected
设置为收集到的项目数
您可以实现此钩子,以便仅在收集之前执行某些操作,例如,终端插件使用它来开始显示收集计数器(并返回
None
)。- 参数:
session (Session) – pytest 会话对象。
在 conftest 插件中使用¶
此钩子仅针对 初始 conftests 调用。
- pytest_ignore_collect(collection_path, path, config)[源代码]¶
返回 True 以防止将此路径视为要收集的路径。
在调用更具体的钩子之前,会先咨询此钩子以获取所有文件和目录。
在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
- 参数:
在版本 7.0.0 中更改: 添加了
collection_path
参数作为path
参数的pathlib.Path
等效项。path
参数已被弃用。在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的收集路径,仅会咨询收集路径父目录中的 conftest 文件(如果路径是目录,则*不会*咨询其自身的 conftest 文件 - 目录不能忽略自身!)。
- pytest_collect_directory(path, parent)[源代码]¶
为给定目录创建一个
Collector
,如果无关则返回 None。在版本 8.0 中添加。
为了获得最佳结果,返回的收集器应该是
Directory
的子类,但这不是必需的。新节点需要将指定的
parent
作为父节点。在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
- 参数:
path (Path) – 要分析的路径。
有关使用此钩子的简单示例,请参阅 使用自定义目录收集器。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的收集路径,仅会咨询收集路径父目录中的 conftest 文件(如果路径是目录,则*不会*咨询其自身的 conftest 文件 - 目录不能收集自身!)。
- pytest_collect_file(file_path, path, parent)[源代码]¶
为给定路径创建一个
Collector
,如果无关则返回 None。为了获得最佳结果,返回的收集器应该是
File
的子类,但这不是必需的。新节点需要将指定的
parent
作为父节点。- 参数:
file_path (Path) – 要分析的路径。
path (LEGACY_PATH) – 要收集的路径(已弃用)。
在 7.0.0 版更改:
file_path
参数作为path
参数的pathlib.Path
等效项添加。path
参数已被弃用。在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的文件路径,仅会查询文件路径父目录中的 conftest 文件。
- pytest_pycollect_makemodule(module_path, path, parent)[源代码]¶
为给定路径返回
pytest.Module
收集器,如果无关则返回 None。将为每个匹配的测试模块路径调用此钩子。如果要为不匹配测试模块的文件创建测试模块,则需要使用
pytest_collect_file
钩子。在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
- 参数:
module_path (Path) – 要收集的模块的路径。
path (LEGACY_PATH) – 要收集的模块的路径(已弃用)。
在 7.0.0 版更改:
module_path
参数作为path
参数的pathlib.Path
等效项添加。path
参数已被弃用,取而代之的是fspath
。在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的父收集器,仅会查询收集器目录及其父目录中的 conftest 文件。
为了影响 Python 模块中对象的收集,您可以使用以下钩子
- pytest_pycollect_makeitem(collector, name, obj)[源代码]¶
为模块中的 Python 对象返回自定义项/收集器,如果无关则返回 None。
在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
- 参数:
- 返回值:
创建的项目/收集器。
- 返回类型:
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的收集器,仅会查询收集器目录及其父目录中的 conftest 文件。
- pytest_generate_tests(metafunc)[源代码]¶
生成对测试函数的(多个)参数化调用。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的函数定义,仅会查询函数目录及其父目录中的 conftest 文件。
- pytest_make_parametrize_id(config, val, argname)[源代码]¶
返回给定
val
的用户友好字符串表示形式,该表示形式将由 @pytest.mark.parametrize 调用使用,如果钩子不知道val
,则返回 None。如果需要,参数名称可作为
argname
使用。在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。
用于影响测试跳过的钩子
- pytest_markeval_namespace(config)[源代码]¶
在构造用于评估 xfail/skipif 标记中的字符串条件的全局字典时调用。
当标记的条件需要在收集时间(这是正常布尔条件所要求的)难以或不可能获取的对象时,这很有用。
6.2 版新增。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的项目,仅会查询项目父目录中的 conftest 文件。
收集完成后,您可以修改项目的顺序、删除或修改测试项目
- pytest_collection_modifyitems(session, config, items)[源代码]¶
在执行收集后调用。可以原地过滤或重新排序项目。
在 conftest 插件中使用¶
任何 conftest 插件都可以实现此钩子。
注意
如果在 conftest.py
文件中实现了此钩子,它将始终接收所有收集到的项目,而不仅仅是实现它的 conftest.py
文件下的项目。
测试运行(runtest)钩子¶
所有与 runtest 相关的钩子都会接收一个 pytest.Item
对象。
- pytest_runtestloop(session)[源代码]¶
执行主要的 runtest 循环(在收集完成后)。
默认的钩子实现会对会话中收集的所有项目(
session.items
)执行 runtest 协议,除非收集失败或设置了collectonly
pytest 选项。如果在任何时候调用了
pytest.exit()
,循环将立即终止。如果在任何时候设置了
session.shouldfail
或session.shouldstop
,则在当前项目的 runtest 协议完成后终止循环。- 参数:
session (Session) – pytest 会话对象。
在第一个非 None 结果处停止,请参阅 firstresult:在第一个非 None 结果处停止。返回值未使用,仅停止进一步处理。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。
- pytest_runtest_protocol(item, nextitem)[源代码]¶
对单个测试项目执行 runtest 协议。
默认的 runtest 协议如下(有关完整详细信息,请参阅各个钩子)
pytest_runtest_logstart(nodeid, location)
- 设置阶段
call = pytest_runtest_setup(item)
(包装在CallInfo(when="setup")
中)report = pytest_runtest_makereport(item, call)
pytest_runtest_logreport(report)
如果发生交互式异常,则执行
pytest_exception_interact(call, report)
- 调用阶段,如果设置成功并且未设置
setuponly
pytest 选项 call = pytest_runtest_call(item)
(包装在CallInfo(when="call")
中)report = pytest_runtest_makereport(item, call)
pytest_runtest_logreport(report)
如果发生交互式异常,则执行
pytest_exception_interact(call, report)
- 调用阶段,如果设置成功并且未设置
- 拆卸阶段
call = pytest_runtest_teardown(item, nextitem)
(包装在CallInfo(when="teardown")
中)report = pytest_runtest_makereport(item, call)
pytest_runtest_logreport(report)
如果发生交互式异常,则执行
pytest_exception_interact(call, report)
pytest_runtest_logfinish(nodeid, location)
在第一个非 None 结果处停止,请参阅 firstresult:在第一个非 None 结果处停止。返回值未使用,仅停止进一步处理。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。
- pytest_runtest_logstart(nodeid, location)[源代码]¶
在为单个测试项运行 runtest 协议开始时调用。
有关 runtest 协议的描述,请参阅
pytest_runtest_protocol
。- 参数:
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的测试项,仅会查询该项所在目录及其父目录中的 conftest 文件。
- pytest_runtest_logfinish(nodeid, location)[源代码]¶
在为单个测试项运行 runtest 协议结束时调用。
有关 runtest 协议的描述,请参阅
pytest_runtest_protocol
。- 参数:
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的测试项,仅会查询该项所在目录及其父目录中的 conftest 文件。
- pytest_runtest_setup(item)[源代码]¶
调用以执行测试项的设置阶段。
默认实现会在
item
及其所有父级(尚未设置的)上运行setup()
。这包括获取测试项所需的 fixture 的值(尚未获取的)。- 参数:
item (Item) – 测试项。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的测试项,仅会查询该项所在目录及其父目录中的 conftest 文件。
- pytest_runtest_call(item)[源代码]¶
调用以运行测试项的测试(调用阶段)。
默认实现调用
item.runtest()
。- 参数:
item (Item) – 测试项。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的测试项,仅会查询该项所在目录及其父目录中的 conftest 文件。
- pytest_runtest_teardown(item, nextitem)[源代码]¶
调用以执行测试项的拆卸阶段。
默认实现运行终结器并在
item
及其所有父级(需要拆卸)上调用teardown()
。这包括运行该项所需的装置的拆卸阶段(如果它们超出范围)。- 参数:
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的测试项,仅会查询该项所在目录及其父目录中的 conftest 文件。
- pytest_runtest_makereport(item, call)[源代码]¶
调用以创建
TestReport
用于测试项的每个设置、调用和拆卸运行测试阶段。有关 runtest 协议的描述,请参阅
pytest_runtest_protocol
。在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的测试项,仅会查询该项所在目录及其父目录中的 conftest 文件。
为了更深入地了解,您可以查看 _pytest.runner
中这些钩子的默认实现,还可以查看 _pytest.pdb
中的实现,它与 _pytest.capture
及其输入/输出捕获交互,以便在测试失败时立即进入交互式调试。
- pytest_pyfunc_call(pyfuncitem)[源代码]¶
调用底层测试函数。
在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
- 参数:
pyfuncitem (Function) – 函数项。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的测试项,仅会查询该项所在目录及其父目录中的 conftest 文件。
报告钩子¶
与会话相关的报告钩子
- pytest_collectstart(collector)[源代码]¶
收集器开始收集。
- 参数:
collector (Collector) – 收集器。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的收集器,仅会查询收集器目录及其父目录中的 conftest 文件。
- pytest_make_collect_report(collector)[源代码]¶
执行
collector.collect()
并返回CollectReport
。在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
- 参数:
collector (Collector) – 收集器。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的收集器,仅会查询收集器目录及其父目录中的 conftest 文件。
- pytest_itemcollected(item)[源代码]¶
我们刚刚收集了一个测试项。
- 参数:
item (Item) – 测试项。
在 conftest 插件中的使用¶
任何 conftest 文件都可以实现此钩子。对于给定的测试项,仅会查询该项所在目录及其父目录中的 conftest 文件。
- pytest_collectreport(report)[源代码]¶
收集器已完成收集。
- 参数:
report (CollectReport) – 收集报告。
在 conftest 插件中的使用¶
任何 conftest 文件都可以实现此钩子。对于给定的收集器,仅会查询收集器目录及其父目录中的 conftest 文件。
- pytest_deselected(items)[源代码]¶
针对取消选择的测试项调用,例如通过关键字。
可能会被多次调用。
在 conftest 插件中的使用¶
任何 conftest 文件都可以实现此钩子。
- pytest_report_header(config, start_path, startdir)[源代码]¶
返回一个字符串或字符串列表,作为终端报告的标题信息显示。
注意
插件返回的行显示在之前运行的插件的行之前。如果您希望您的行首先显示,请使用 trylast=True。
在版本 7.0.0 中更改: 添加了
start_path
参数作为startdir
参数的pathlib.Path
等效项。startdir
参数已被弃用。在 conftest 插件中的使用¶
此钩子仅针对 初始 conftests 调用。
- pytest_report_collectionfinish(config, start_path, startdir, items)[源代码]¶
返回一个字符串或字符串列表,在收集成功完成后显示。
这些字符串将显示在标准的“已收集 X 个项目”消息之后。
3.2 版新增。
- 参数:
注意
插件返回的行显示在之前运行的插件的行之前。如果您希望您的行首先显示,请使用 trylast=True。
在版本 7.0.0 中更改: 添加了
start_path
参数作为startdir
参数的pathlib.Path
等效项。startdir
参数已被弃用。在 conftest 插件中的使用¶
任何 conftest 插件都可以实现此钩子。
- pytest_report_teststatus(report, config)[源代码]¶
返回用于状态报告的结果类别、简短字母和详细词语。
结果类别是用于统计结果的类别,例如“通过”、“跳过”、“错误”或空字符串。
简短字母在测试进行时显示,例如“.”、“s”、“E”或空字符串。
详细词语在详细模式下进行测试时显示,例如“通过”、“跳过”、“错误”或空字符串。
pytest 可能会根据报告结果隐式地为这些内容设置样式。要提供显式样式,请为详细词语返回一个元组,例如
"rerun", "R", ("RERUN", {"yellow": True})
。- 参数:
report (CollectReport | TestReport) – 要返回其状态的报告对象。
config (Config) – pytest 配置对象。
- 返回值:
测试状态。
- 返回类型:
TestShortLogReport | Tuple[str, str, Union[str, Tuple[str, Mapping[str, bool]]]]
在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
在 conftest 插件中使用¶
任何 conftest 插件都可以实现此钩子。
- pytest_report_to_serializable(config, report)[source]¶
将给定的报告对象序列化为适合通过网络发送的数据结构,例如转换为 JSON。
- 参数:
config (Config) – pytest 配置对象。
report (CollectReport | TestReport) – 报告。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。确切的细节可能取决于调用钩子的插件。
- pytest_report_from_serializable(config, data)[source]¶
恢复先前使用
pytest_report_to_serializable
序列化的报告对象。- 参数:
config (Config) – pytest 配置对象。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。确切的细节可能取决于调用钩子的插件。
- pytest_terminal_summary(terminalreporter, exitstatus, config)[source]¶
向终端摘要报告添加一个部分。
- 参数:
版本 4.2 中的新功能:
config
参数。在 conftest 插件中使用¶
任何 conftest 插件都可以实现此钩子。
- pytest_fixture_setup(fixturedef, request)[source]¶
执行fixture设置。
- 参数:
fixturdef – fixture 定义对象。
request (SubRequest) – fixture 请求对象。
- 返回值:
调用 fixture 函数的返回值。
- 返回类型:
object | None
在第一个非 None 结果处停止,参见 firstresult:在第一个非 None 结果处停止。
注意
如果 fixture 函数返回 None,则将根据 firstresult: 停在第一个非 None 结果处 选项的行为,继续调用此钩子函数的其他实现。
在 conftest 插件中的使用¶
任何 conftest 文件都可以实现此钩子。对于给定的 fixture,只会在 fixture 作用域的目录及其父目录中查找 conftest 文件。
- pytest_fixture_post_finalizer(fixturedef, request)[源代码]¶
在 fixture 拆卸之后、缓存清除之前调用,因此 fixture 结果
fixturedef.cached_result
仍然可用(不是None
)。- 参数:
fixturdef – fixture 定义对象。
request (SubRequest) – fixture 请求对象。
在 conftest 插件中的使用¶
任何 conftest 文件都可以实现此钩子。对于给定的 fixture,只会在 fixture 作用域的目录及其父目录中查找 conftest 文件。
- pytest_warning_recorded(warning_message, when, nodeid, location)[源代码]¶
处理由内部 pytest 警告插件捕获的警告。
- 参数:
warning_message (warnings.WarningMessage) – 捕获的警告。这与
warnings.catch_warnings
生成的对象相同,并且包含与warnings.showwarning()
的参数相同的属性。when (Literal['config', 'collect', 'runtest']) –
指示何时捕获到警告。可能的值
"config"
:在 pytest 配置/初始化阶段。"collect"
:在测试收集期间。"runtest"
:在测试执行期间。
nodeid (str) – 项目的完整 ID。对于不特定于特定节点的警告,为空字符串。
location (Tuple[str, int, str] | None) – 如果可用,则包含有关捕获的警告的执行上下文的信息(文件名、行号、函数)。当执行上下文处于模块级别时,
function
的计算结果为 <module>。
6.0 版本新增。
在 conftest 插件中的使用¶
任何 conftest 文件都可以实现此钩子。如果警告特定于特定节点,则只会在节点的父目录中查找 conftest 文件。
用于报告测试执行情况的中心钩子
- pytest_runtest_logreport(report)[源代码]¶
处理为项目的每个设置、调用和拆卸运行测试阶段生成的
TestReport
。有关 runtest 协议的描述,请参阅
pytest_runtest_protocol
。在 conftest 插件中的使用¶
任何 conftest 文件都可以实现此钩子。对于给定的测试项,仅会查询该项所在目录及其父目录中的 conftest 文件。
断言相关钩子
- pytest_assertrepr_compare(config, op, left, right)[源代码]¶
返回失败断言表达式中比较的解释。
如果没有自定义解释,则返回 None,否则返回字符串列表。字符串将由换行符连接,但字符串*中*的任何换行符都将被转义。请注意,除第一行外,所有行都将略微缩进,目的是使第一行成为摘要。
- 参数:
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的测试项,仅会查询该项所在目录及其父目录中的 conftest 文件。
- pytest_assertion_pass(item, lineno, orig, expl)[源代码]¶
每当断言通过时调用。
5.0 版新增。
使用此钩子可以在断言通过后进行一些处理。原始断言信息在
orig
字符串中可用,而 pytest 自省的断言信息在expl
字符串中可用。此钩子必须由
enable_assertion_pass_hook
ini 文件选项显式启用[pytest] enable_assertion_pass_hook=true
启用此选项时,您需要**清理**项目目录和解释器库中的**.pyc**文件,因为断言需要重新编写。
- 参数:
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的测试项,仅会查询该项所在目录及其父目录中的 conftest 文件。
调试/交互钩子¶
有一些钩子可用于特殊报告或与异常交互
- pytest_internalerror(excrepr, excinfo)[源代码]¶
在发生内部错误时调用。
返回 True 以抑制将 INTERNALERROR 消息直接打印到 sys.stderr 的回退处理。
- 参数:
excrepr (ExceptionRepr) – 异常 repr 对象。
excinfo (ExceptionInfo[BaseException]) – 异常信息。
在 conftest 插件中使用¶
任何 conftest 插件都可以实现此钩子。
- pytest_keyboard_interrupt(excinfo)[源代码]¶
在发生键盘中断时调用。
- 参数:
excinfo (ExceptionInfo[Union[KeyboardInterrupt, Exit]]) – 异常信息。
在 conftest 插件中使用¶
任何 conftest 插件都可以实现此钩子。
- pytest_exception_interact(node, call, report)[源代码]¶
在引发可能以交互方式处理的异常时调用。
可以在收集期间调用(参见
pytest_make_collect_report
),在这种情况下,report
是一个CollectReport
。可以在项目的运行测试期间调用(参见
pytest_runtest_protocol
),在这种情况下,report
是一个TestReport
。如果引发的异常是内部异常(例如
skip.Exception
),则不会调用此钩子。- 参数:
call (CallInfo[Any]) – 调用信息。包含异常。
report (CollectReport | TestReport) – 收集或测试报告。
在 conftest 插件中使用¶
任何 conftest 文件都可以实现此钩子。对于给定的节点,仅会查询节点父目录中的 conftest 文件。
收集树对象¶
这些是构成收集树的收集器和项目类(统称为“节点”)。
节点¶
- class Node[源代码]¶
基类:
ABC
Collector
和Item
的基类,它们是测试收集树的组件。Collector
是树的内部节点,而Item
是叶节点。- fspath: LocalPath¶
path
属性的LEGACY_PATH
副本。供尚未迁移到pathlib.Path
的方法使用,例如Item.reportinfo
。将在未来版本中弃用,建议使用path
代替。
- parent¶
父收集器节点。
- path: pathlib.Path¶
收集此节点的文件系统路径(可以是 None)。
- classmethod from_parent(parent, **kw)[源代码]¶
节点的公共构造函数。
引入这种间接方式是为了能够从节点构造函数中删除脆弱的逻辑。
子类可以在覆盖构造时使用
super().from_parent(...)
。- 参数:
parent (Node) – 此节点的父节点。
- warn(warning)[源代码]¶
为此节点发出警告。
除非明确禁止,否则警告将在测试会话后显示。
- 参数:
warning (Warning) – 要发出的警告实例。
- 引发:
ValueError – 如果
warning
实例不是 Warning 的子类。
用法示例
node.warn(PytestWarning("some message")) node.warn(UserWarning("some message"))
在版本 6.2 中更改: 现在接受
Warning
的任何子类,而不仅仅是PytestWarning
子类。
- add_marker(marker, append=True)[源代码]¶
动态地向节点添加标记对象。
- 参数:
marker (str | MarkDecorator) – 标记。
append (bool) – 是否追加标记,或者将其前置。
- get_closest_marker(name: str) Mark | None [源代码]¶
- get_closest_marker(name: str, default: Mark) Mark
返回与名称匹配的第一个标记,从最近的(例如函数)到更远的级别(例如模块级别)。
- 参数:
default – 如果未找到标记,则回退返回值。
name – 要过滤的名称。
- getparent(cls)[源代码]¶
获取作为给定类实例的最接近的父节点(包括自身)。
- 参数:
cls (Type[_NodeType]) – 要搜索的节点类。
- 返回值:
如果找到,则为节点。
- 返回类型:
_NodeType | None
- repr_failure(excinfo, style=None)[源代码]¶
返回集合或测试失败的表示形式。
另请参阅
- 参数:
excinfo (ExceptionInfo[BaseException]) – 失败的异常信息。
收集器¶
- 类 收集器[源代码]¶
-
所有收集器的基类。
收集器通过
collect()
创建子级,从而迭代地构建收集树。- repr_failure(excinfo)[源代码]¶
返回收集失败的表示形式。
- 参数:
excinfo (ExceptionInfo[BaseException]) – 失败的异常信息。
- parent¶
父收集器节点。
- path: pathlib.Path¶
收集此节点的文件系统路径(可以是 None)。
项目¶
- 类 项目[源代码]¶
-
所有测试调用项目的基类。
请注意,对于单个函数,可能有多个测试调用项目。
- 父级¶
父收集器节点。
- 路径: pathlib.Path¶
收集此节点的文件系统路径(可以是 None)。
- 添加报告部分(时间, 键, 内容)[源代码]¶
添加一个新的报告部分,类似于内部添加 stdout 和 stderr 捕获输出的操作
item.add_report_section("call", "stdout", "report section contents")
文件¶
- class 文件[源代码]¶
基类:
FSCollector
,ABC
从文件中收集测试的基类。
- parent¶
父收集器节点。
- path: pathlib.Path¶
收集此节点的文件系统路径(可以是 None)。
FSCollector¶
Session¶
- final class Session[源代码]¶
基类:
Collector
集合树的根。
Session
收集作为参数传递给 pytest 的初始路径。- exception Interrupted¶
-
表示测试运行被中断。
- isinitpath(path, *, with_parents=False)[源代码]¶
路径是否是初始路径?
初始路径是在命令行中显式传递给 pytest 的路径。
- 参数:
with_parents (bool) – 如果设置,则当路径是初始路径的父路径时,也返回 True。
在版本 8.0 中更改: 添加了
with_parents
参数。
- perform_collect(args: Sequence[str] | None = None, genitems: Literal[True] = True) Sequence[Item] [源代码]¶
- perform_collect(args: Sequence[str] | None = None, genitems: bool = True) Sequence[Item | Collector]
为本次会话执行收集阶段。
这是由默认的
pytest_collection
钩子实现调用的;有关更多详细信息,请参阅此钩子的文档。出于测试目的,也可以直接在新的Session
上调用它。此函数通常会递归地将从会话中收集的任何收集器扩展到它们的项目,并且只返回项目。出于测试目的,可以通过传递
genitems=False
来抑制这种情况,在这种情况下,返回值包含这些未扩展的收集器,并且session.items
为空。
- parent¶
父收集器节点。
- path: pathlib.Path¶
收集此节点的文件系统路径(可以是 None)。
包¶
模块¶
类¶
- class Class[源代码]¶
基类:
PyCollector
用于 Python 类中测试方法(和嵌套类)的收集器。
- parent¶
父收集器节点。
- path: pathlib.Path¶
收集此节点的文件系统路径(可以是 None)。
函数¶
- class Function[源代码]¶
基类:
PyobjMixin
,Item
负责设置和执行 Python 测试函数的项目。
- 参数:
name – 完整的函数名称,包括任何装饰器,例如由参数化添加的装饰器(
my_func[my_param]
)。parent – 父节点。
config – pytest Config 对象。
callspec – 如果给出,则此函数已参数化,并且 callspec 包含有关参数化的元信息。
callobj – 如果给出,则是在调用函数时将调用的对象,否则将使用
originalname
从parent
获取 callobj。keywords – 绑定到函数对象的关键字,用于“-k”匹配。
session – pytest Session 对象。
fixtureinfo – 已在此 fixture 节点解析的 Fixture 信息。
originalname – 用于访问底层函数对象的属性名称。默认为
name
。如果名称与原始名称不同,请设置此项,例如,当它包含由参数化添加的装饰器时(my_func[my_param]
)。
- originalname¶
原始函数名称,没有任何装饰器(例如,参数化会向函数名称添加
"[...]"
后缀),用于从parent
访问底层函数对象(如果未明确给出callobj
)。3.0 版新增。
- property function¶
底层 python “函数”对象。
- property instance¶
函数绑定到的 Python 实例对象。
如果不是测试方法,例如对于独立测试函数、类或模块,则返回 None。
- repr_failure(excinfo)[源代码]¶
返回集合或测试失败的表示形式。
另请参阅
- 参数:
excinfo (ExceptionInfo[BaseException]) – 失败的异常信息。
- parent¶
父收集器节点。
- path: pathlib.Path¶
收集此节点的文件系统路径(可以是 None)。
函数定义¶
对象¶
可从 fixture 或 钩子 访问的对象,或可从 pytest
导入的对象。
调用信息¶
- final class CallInfo[源代码]¶
函数调用结果/异常信息。
- excinfo: ExceptionInfo[BaseException] | None¶
如果调用引发了异常,则为捕获的异常。
- when: Literal['collect', 'setup', 'call', 'teardown']¶
调用的上下文:“collect”、“setup”、“call” 或 “teardown”。
- property result: TResult¶
如果调用没有引发异常,则为调用的返回值。
只有当 excinfo 为 None 时才能访问。
- classmethod from_call(func, when, reraise=None)[源代码]¶
调用 func,将结果包装在 CallInfo 中。
- 参数:
func (Callable[[], TResult]) – 要调用的函数。不带参数调用。
when (Literal['collect', 'setup', 'call', 'teardown']) – 调用函数的阶段。
reraise (Type[BaseException] | Tuple[Type[BaseException], ...] | None) – 如果函数引发了异常,则应传播的异常,而不是包装在 CallInfo 中。
收集报告¶
- final class CollectReport[源代码]¶
基类:
BaseReport
收集报告对象。
报告可以包含任意额外的属性。
- longrepr: None | ExceptionInfo[BaseException] | Tuple[str, int, str] | str | TerminalRepr¶
无或失败表示。
- result¶
收集到的项目和集合节点。
- sections: List[Tuple[str, str]]¶
包含字符串元组
(标题, 内容)
的元组,其中包含测试报告的额外信息。pytest 使用它来添加从stdout
、stderr
和拦截的日志事件中捕获的文本。其他插件可以使用它向报告添加任意信息。
- property count_towards_summary: bool¶
实验性的 此报告是否应计入测试会话结束时显示的总数:“1 次通过,1 次失败等”。
注意
此函数被认为是实验性的,因此请注意,即使在补丁版本中,它也可能会发生变化。
配置¶
- final class Config[source]¶
访问配置值、插件管理器和插件钩子。
- 参数:
pluginmanager (PytestPluginManager) – 一个 pytest PluginManager。
invocation_params (InvocationParams) – 包含有关
pytest.main()
调用的参数的对象。
- final class InvocationParams(*, args, plugins, dir)[source]¶
保存
pytest.main()
期间传递的参数。对象属性是只读的。
版本 5.1 中新增。
注意
请注意,环境变量
PYTEST_ADDOPTS
和addopts
ini 选项由 pytest 处理,不包含在args
属性中。访问
InvocationParams
的插件必须注意这一点。- args: Tuple[str, ...]¶
传递给
pytest.main()
的命令行参数。
- dir: Path¶
调用
pytest.main()
的目录。
- class ArgsSource(value)[源代码]¶
指示测试参数的来源。
版本 7.2 中新增。
- ARGS = 1¶
命令行参数。
- INVOCATION_DIR = 2¶
调用目录。
- TESTPATHS = 3¶
“testpaths” 配置值。
- option¶
以属性形式访问命令行选项。
- invocation_params¶
调用 pytest 的参数。
- 类型:
- pluginmanager¶
插件管理器处理插件注册和钩子调用。
- property inipath: Path | None¶
指向 配置文件 的路径。
- 类型:
可选[pathlib.Path]
版本 6.1 中新增。
- issue_config_time_warning(warning, stacklevel)[源代码]¶
在“配置”阶段发出并处理警告。
在
pytest_configure
期间,我们无法使用catch_warnings_for_item
函数捕获警告,因为不可能在pytest_configure
周围设置钩子包装器。此函数主要用于需要在
pytest_configure
(或类似阶段)期间发出警告的插件。
- getini(name)[源代码]¶
从 ini 文件 返回配置值。
如果在 ini 文件 中未定义配置值,则将返回通过
parser.addini
注册配置时提供的default
值。请注意,您甚至可以提供None
作为有效的默认值。如果在使用
parser.addini
注册时未提供default
,则将返回基于传递给parser.addini
的type
参数的默认值。基于type
的默认值为:paths
、pathlist
、args
和linelist
:空列表[]
bool
:False
string
:空字符串""
如果在通过
parser.addini
注册配置时既没有传递default
参数也没有传递type
参数,则将该配置视为字符串,并返回默认空字符串 ''。如果指定的名称尚未通过之前的
parser.addini
调用(通常来自插件)注册,则会引发 ValueError。
- VERBOSITY_ASSERTIONS: Final = 'assertions'¶
失败断言的详细级别类型(请参阅
verbosity_assertions
)。
- VERBOSITY_TEST_CASES: Final = 'test_cases'¶
测试用例执行的详细级别类型(请参阅
verbosity_test_cases
)。
- get_verbosity(verbosity_type=None)[源代码]¶
检索细粒度详细级别类型的详细级别。
- 参数:
verbosity_type(str | None)– 要获取级别的详细级别类型。如果为给定类型配置了级别,则将返回该值。如果给定类型不是已知的详细级别类型,则将返回全局详细级别。如果给定类型为 None(默认值),则将返回全局详细级别。
要为细粒度的详细级别类型配置级别,配置文件应包含配置名称的设置和详细级别的数值。可以使用特殊值“auto”来显式使用全局详细级别。
示例: .. code-block:: ini
# pytest.ini 的内容 [pytest] verbosity_assertions = 2
pytest -v
print(config.get_verbosity()) # 1 print(config.get_verbosity(Config.VERBOSITY_ASSERTIONS)) # 2
目录¶
目录¶
- class Directory[源代码]¶
从目录收集文件的基类。
一个基本的目录收集器会执行以下操作:遍历目录中的文件和子目录,并通过调用钩子
pytest_collect_directory
和pytest_collect_file
为它们创建收集器,并在使用pytest_ignore_collect
检查它们未被忽略后进行创建。在版本 8.0 中添加。
- parent¶
父收集器节点。
- path: pathlib.Path¶
收集此节点的文件系统路径(可以是 None)。
ExceptionInfo¶
- final class ExceptionInfo[源代码]¶
包装 sys.exc_info() 对象并提供导航回溯的帮助。
- classmethod from_exception(exception, exprinfo=None)[源代码]¶
为现有异常返回一个 ExceptionInfo。
异常必须有一个非
None
的__traceback__
属性,否则此函数将因断言错误而失败。这意味着必须已引发异常,或使用with_traceback()
方法添加了回溯。- 参数:
exprinfo (str | None) – 一个文本字符串,用于帮助确定是否应该从输出中删除
AssertionError
。默认为异常消息/__str__()
。
7.4 版新增。
- classmethod from_exc_info(exc_info, exprinfo=None)[源代码]¶
与
from_exception()
类似,但使用旧式的 exc_info 元组。
- classmethod from_current(exprinfo=None)[源代码]¶
返回与当前回溯匹配的 ExceptionInfo。
警告
实验性 API
- 参数:
exprinfo (str | None) – 一个文本字符串,用于帮助确定是否应该从输出中删除
AssertionError
。默认为异常消息/__str__()
。
- property value: E¶
异常值。
- property tb: TracebackType¶
异常原始回溯。
- property traceback: Traceback¶
回溯。
- exconly(tryshort=False)[源代码]¶
以字符串形式返回异常。
当“tryshort”解析为 True 且异常为 AssertionError 时,仅返回异常表示的实际异常部分(因此从开头删除“AssertionError:”)。
- getrepr(showlocals=False, style='long', abspath=False, tbfilter=True, funcargs=False, truncate_locals=True, chain=True)[源代码]¶
返回此异常信息的 str() 可表示形式。
- 参数:
showlocals (bool) – 显示每个回溯条目的局部变量。如果
style=="native"
则忽略。style (str) – long|short|line|no|native|value 回溯样式。
abspath (bool) – 路径是否应更改为绝对路径或保持不变。
tbfilter (bool | Callable[[ExceptionInfo[BaseException]], Traceback]) –
回溯条目的过滤器。
如果为 false,则不隐藏任何条目。
如果为 true,则隐藏包含局部变量
__tracebackhide__ = True
的内部条目和条目。如果为可调用对象,则将过滤委托给该可调用对象。
如果
style
为"native"
则忽略。funcargs (bool) – 显示每个回溯条目的 fixture(“funcargs”用于 legacy 目的)。
truncate_locals (bool) – 使用
showlocals==True
时,确保局部变量可以安全地表示为字符串。chain (bool) – 是否应显示 Python 3 中的链接异常。
在版本 3.9 中更改: 添加了
chain
参数。
- match(regexp)[源代码]¶
使用
re.search()
检查正则表达式regexp
是否与异常的字符串表示形式匹配。如果匹配,则返回
True
,否则引发AssertionError
。
- group_contains(expected_exception, *, match=None, depth=None)[源代码]¶
检查捕获的异常组是否包含匹配的异常。
- 参数:
expected_exception (Type[BaseException] | Tuple[Type[BaseException]]) – 预期的异常类型,如果预期有多个可能的异常类型,则为元组。
match (str | Pattern[str] | None) –
如果指定,则为包含正则表达式的字符串或正则表达式对象,该字符串或正则表达式对象将使用
re.search()
对异常的字符串表示形式及其PEP-678 <https://peps.pythonlang.cn/pep-0678/>
__notes__
进行测试。要匹配可能包含 特殊字符 的字符串字面量,可以使用
re.escape()
对其进行转义。depth (Optional[int]) – 如果为
None
,则将在任何嵌套深度搜索匹配的异常。如果 >= 1,则仅当异常位于指定深度时才会匹配(深度 = 1 是最顶层异常组中包含的异常)。
在版本 8.0 中添加。
ExitCode¶
FixtureDef¶
标记装饰器¶
- class MarkDecorator[源代码]¶
用于在测试函数和类上应用标记的装饰器。
标记装饰器
是用pytest.mark
创建的mark1 = pytest.mark.NAME # Simple MarkDecorator mark2 = pytest.mark.NAME(name1=value) # Parametrized MarkDecorator
然后可以作为装饰器应用于测试函数
@mark2 def test_function(): pass
当调用
标记装饰器
时,它会执行以下操作如果仅使用单个类作为其唯一的位置参数调用,并且没有其他关键字参数,则它会将标记附加到该类,以便自动应用于在该类中找到的所有测试用例。
如果仅使用单个函数作为其唯一的位置参数调用,并且没有其他关键字参数,则它会将标记附加到该函数,其中包含已存储在
标记装饰器
内部的所有参数。在任何其他情况下调用时,它都会返回一个新的
标记装饰器
实例,其中原始标记装饰器
的内容已使用传递给此调用的参数进行了更新。
注意:以上规则阻止
标记装饰器
仅存储单个函数或类引用作为其位置参数,而没有其他关键字或位置参数。您可以使用with_args()
来解决此问题。
标记生成器¶
- final class MarkGenerator[source]¶
MarkDecorator
对象的工厂 - 作为pytest.mark
单例实例公开。例子
import pytest @pytest.mark.slowtest def test_function(): pass
在
test_function
上应用“slowtest”Mark
。
标记¶
元函数¶
- final class Metafunc[source]¶
传递给
pytest_generate_tests
钩子的对象。它们有助于检查测试函数,并根据测试配置或在定义测试函数的类或模块中指定的值生成测试。
- definition¶
- config¶
访问测试会话的
pytest.Config
对象。
- 模块¶
定义测试函数的模块对象。
- 函数¶
底层 Python 测试函数。
- fixturenames¶
测试函数所需的 fixture 名称集合。
- cls¶
定义测试函数的类对象,或者为
None
。
- parametrize(argnames, argvalues, indirect=False, ids=None, scope=None, *, _param_mark=None)[源代码]¶
使用给定参数名称 (argnames) 的参数值 (argvalues) 列表,为底层测试函数添加新的调用。参数化在收集阶段执行。如果您需要设置昂贵的资源,请考虑设置 indirect 来在测试设置阶段而不是收集时进行设置。
可以对每个测试函数调用多次(但只能使用不同的参数名称),在这种情况下,每次调用都会参数化所有先前的参数化,例如:
unparametrized: t parametrize ["x", "y"]: t[x], t[y] parametrize [1, 2]: t[x-1], t[x-2], t[y-1], t[y-2]
- 参数:
argnames (str | Sequence[str]) – 表示一个或多个参数名称的逗号分隔字符串,或参数字符串的列表/元组。
argvalues (Iterable[ParameterSet | Sequence[object] | object]) –
参数值 (argvalues) 列表决定了使用不同参数值调用测试的频率。
如果只指定了一个参数名称 (argname),则参数值 (argvalues) 是一个值列表。如果指定了 N 个参数名称,则参数值 (argvalues) 必须是一个 N 元组列表,其中每个元组元素为其各自的参数名称指定一个值。
indirect (bool | Sequence[str]) – 参数名称列表(参数名称的子集)或布尔值。如果为 True,则列表包含参数名称中的所有名称。与此列表中的参数名称相对应的每个参数值都将作为 request.param 传递给其各自的参数名称 fixture 函数,以便它可以在测试的设置阶段而不是收集时执行更昂贵的设置。
ids (Iterable[object | None] | Callable[[Any], object | None] | None) –
argvalues
的 id 序列(或生成器),或为每个参数值返回部分 id 的可调用对象。对于序列(和像
itertools.count()
这样的生成器),返回的 id 应该是string
、int
、float
、bool
或None
类型。它们映射到argvalues
中的相应索引。None
表示使用自动生成的 id。如果它是一个可调用对象,它将为
argvalues
中的每个条目调用,返回值将用作整个集合的自动生成 ID 的一部分(其中各部分用短划线(“-”)连接)。这对于为某些项目(例如日期)提供更具体的 ID 非常有用。返回None
将使用自动生成的 ID。如果未提供 ID,则将根据 argvalues 自动生成。
scope (Literal['session', 'package', 'module', 'class', 'function'] | None) – 如果指定,则表示参数的范围。范围用于按参数实例对测试进行分组。它还将覆盖任何由 fixture 函数定义的范围,从而允许使用测试上下文或配置设置动态范围。
解析器¶
- final class Parser[源代码]¶
用于命令行参数和 ini 文件值的解析器。
- 变量:
extra_info – 通用参数的字典 -> 在处理命令行参数时出错的情况下显示的值。
- getgroup(name, description='', after=None)[源代码]¶
获取(或创建)一个命名的选项组。
- 参数:
- 返回值:
选项组。
- 返回类型:
返回的组对象有一个
addoption
方法,其签名与parser.addoption
相同,但将在pytest --help
的输出中显示在相应的组中。
- addoption(*opts, **attrs)[源代码]¶
注册一个命令行选项。
- 参数:
opts (str) – 选项名称,可以是短选项或长选项。
attrs (Any) – 与 argparse 库的
add_argument()
函数接受的属性相同。
命令行解析后,可以通过
config.option.NAME
在 pytest 配置对象上获取选项,其中NAME
通常通过传递dest
属性来设置,例如addoption("--long", dest="NAME", ...)
。
- addini(name, help, type=None, default=<notset>)[source]¶
注册一个 ini 文件选项。
- 参数:
name (str) – ini 变量的名称。
type (Literal['string', 'paths', 'pathlist', 'args', 'linelist', 'bool'] | None) –
变量的类型。可以是
string
:字符串bool
:布尔值args
:字符串列表,以 shell 中的方式分隔linelist
:字符串列表,以换行符分隔paths
:pathlib.Path
列表,以 shell 中的方式分隔pathlist
:py.path
列表,以 shell 中的方式分隔
对于
paths
和pathlist
类型,它们被认为是相对于 ini 文件的。如果在没有定义 ini 文件的情况下执行,它们将被认为是相对于当前工作目录的(例如使用--override-ini
)。7.0 版新增:
paths
变量类型。8.1 版新增: 在没有 ini 文件的情况下,使用当前工作目录来解析
paths
和pathlist
。如果为
None
或未传递,则默认为string
。default (任何) – 如果 ini 文件选项不存在但被查询,则使用默认值。
可以通过调用
config.getini(name)
来检索 ini 变量的值。
选项组¶
PytestPluginManager¶
- final class PytestPluginManager[源代码]¶
基类:
PluginManager
具有 pytest 特定功能的
pluggy.PluginManager
从命令行、
PYTEST_PLUGINS
环境变量和在正在加载的插件中找到的pytest_plugins
全局变量加载插件。在启动期间加载
conftest.py
。
- register(plugin, name=None)[源代码]¶
注册一个插件并返回其名称。
- 参数:
name (str | None) – 注册插件时使用的名称。如果未指定,则使用
get_canonical_name()
生成名称。- 返回值:
插件名称。如果该名称被阻止注册,则返回
None
。- 返回类型:
str | None
如果插件已注册,则引发
ValueError
。
- import_plugin(modname, consider_entry_points=False)[源代码]¶
使用
modname
导入插件。如果
consider_entry_points
为 True,则也会考虑入口点名称来查找插件。
- add_hookcall_monitoring(before, after)¶
为所有钩子添加调用前/调用后跟踪函数。
返回一个撤销函数,调用该函数将移除添加的跟踪器。
before(hook_name, hook_impls, kwargs)
将在所有钩子调用之前被调用,并接收一个钩子调用器实例、一个 HookImpl 实例列表和钩子调用的关键字参数。after(outcome, hook_name, hook_impls, kwargs)
接收与before
相同的参数,但还接收一个Result
对象,该对象表示整个钩子调用的结果。
- add_hookspecs(module_or_class)¶
添加在给定
module_or_class
中定义的新钩子规范。如果函数已使用匹配的
HookspecMarker
进行装饰,则它们将被识别为钩子规范。
- check_pending()¶
验证所有尚未根据钩子规范进行验证的钩子是否都是可选的,否则引发
PluginValidationError
。
- enable_tracing()¶
启用钩子调用跟踪。
返回一个撤销函数,调用该函数将移除添加的跟踪。
- get_canonical_name(plugin)¶
返回插件对象的规范名称。
请注意,插件可以使用
register(plugin, name)
的调用者指定的不同名称进行注册。要获取已注册插件的名称,请改用get_name(plugin)
。
- get_hookcallers(plugin)¶
获取指定插件的所有钩子调用器。
- 返回值:
钩子调用器,如果
plugin
未在此插件管理器中注册,则为None
。- 返回类型:
列表[HookCaller] | 无
- get_name(plugin)¶
返回插件注册时使用的名称,如果未注册,则返回
None
。
- get_plugin(name)¶
返回使用给定名称注册的插件(如果有)。
- get_plugins()¶
返回所有已注册插件对象的集合。
- has_plugin(name)¶
返回是否注册了具有给定名称的插件。
- is_blocked(name)¶
返回给定的插件名称是否被阻止。
- is_registered(plugin)¶
返回插件是否已注册。
- list_name_plugin()¶
返回所有已注册插件的 (名称, 插件) 对列表。
- list_plugin_distinfo()¶
返回所有 setuptools 注册插件的 (插件, distinfo) 对列表。
- load_setuptools_entrypoints(group, name=None)¶
从查询指定的 setuptools
group
加载模块。
- set_blocked(name)¶
阻止注册给定的名称,如果已注册则取消注册。
- subset_hook_caller(name, remove_plugins)¶
为命名方法返回一个代理
HookCaller
实例,该实例管理对所有已注册插件的调用,但 remove_plugins 中的插件除外。
- unblock(name)¶
解除对名称的阻止。
返回该名称是否确实被阻止。
- unregister(plugin=None, name=None)¶
取消注册插件及其所有钩子实现。
可以通过插件对象或插件名称指定插件。如果两者都指定,则它们必须一致。
返回未注册的插件,如果未找到则返回
None
。
- project_name: Final¶
项目名称。
测试报告¶
- final class TestReport[source]¶
基类:
BaseReport
基本测试报告对象(如果设置和拆卸调用失败,也用于这些调用)。
报告可以包含任意额外的属性。
- location: Tuple[str, int | None, str]¶
一个 (filesystempath, lineno, domaininfo) 元组,指示测试项的实际位置 - 它可能与收集到的位置不同,例如,如果一个方法是从不同的模块继承的。filesystempath 可以是相对于
config.rootdir
的路径。行号从 0 开始。
- longrepr: None | ExceptionInfo[BaseException] | Tuple[str, int, str] | str | TerminalRepr¶
无或失败表示。
- user_properties¶
用户属性是一个元组列表 (名称,值),用于保存测试的用户定义属性。
- sections: List[Tuple[str, str]]¶
包含字符串元组
(标题, 内容)
的元组,其中包含测试报告的额外信息。pytest 使用它来添加从stdout
、stderr
和拦截的日志事件中捕获的文本。其他插件可以使用它向报告添加任意信息。
- property count_towards_summary: bool¶
实验性的 此报告是否应计入测试会话结束时显示的总数:“1 次通过,1 次失败等”。
注意
此函数被认为是实验性的,因此请注意,即使在补丁版本中,它也可能会发生变化。
TestShortLogReport¶
结果¶
在 钩子包装器 中使用的结果对象,更多信息请参阅 pluggy 文档 中 的 Result
。
存储¶
- class Stash[源代码]¶
Stash
是一种类型安全的异构可变映射,它允许在创建它(Stash
)的位置之外单独定义键和值的类型。通常,您会得到一个带有
Stash
的对象,例如Config
或Node
stash: Stash = some_object.stash
如果模块或插件想要在这个
Stash
中存储数据,它会为它的键创建StashKey
(在模块级别)# At the top-level of the module some_str_key = StashKey[str]() some_bool_key = StashKey[bool]()
存储信息
# Value type must match the key. stash[some_str_key] = "value" stash[some_bool_key] = True
检索信息
# The static type of some_str is str. some_str = stash[some_str_key] # The static type of some_bool is bool. some_bool = stash[some_bool_key]
7.0 版新增。
全局变量¶
当在测试模块或 conftest.py
文件中定义时,pytest 会以特殊方式处理某些全局变量。
- collect_ignore¶
教程:自定义测试收集
可以在 conftest.py 文件 中声明以排除测试目录或模块。需要是路径列表(str
、pathlib.Path
或任何 os.PathLike
)。
collect_ignore = ["setup.py"]
- collect_ignore_glob¶
教程:自定义测试收集
可以在 conftest.py 文件 中声明以使用 Unix shell 风格的通配符排除测试目录或模块。需要是 list[str]
,其中 str
可以包含 glob 模式。
collect_ignore_glob = ["*_ignore.py"]
- pytest_plugins¶
可以在 测试模块 和 conftest.py 文件 中的全局级别声明,以注册其他插件。可以是 str
或 Sequence[str]
。
pytest_plugins = "myapp.testsupport.myplugin"
pytest_plugins = ("myapp.testsupport.tools", "myapp.testsupport.regression")
- pytestmark¶
教程:标记整个类或模块
可以在 测试模块 中的全局级别声明,以将一个或多个 标记 应用于所有测试函数和方法。可以是单个标记或标记列表(按从左到右的顺序应用)。
import pytest
pytestmark = pytest.mark.webtest
import pytest
pytestmark = [pytest.mark.integration, pytest.mark.slow]
环境变量¶
可用于更改 pytest 行为的环境变量。
- CI¶
设置后(无论值是什么),pytest 都会识别它正在 CI 进程中运行。 BUILD_NUMBER
变量的替代方案。
- BUILD_NUMBER¶
设置后(无论值是什么),pytest 都会识别它正在 CI 进程中运行。 CI 变量的替代方案。
- PYTEST_ADDOPTS¶
这包含一个命令行(由 py:mod:shlex
模块解析),它将被**添加到**用户给出的命令行之前,更多信息请参阅 内置配置文件选项。
- PYTEST_VERSION¶
此环境变量在 pytest 会话开始时定义,之后未定义。它包含 pytest.__version__
的值,除其他外,可用于轻松检查代码是否在 pytest 运行中运行。
- PYTEST_CURRENT_TEST¶
这不是供用户设置的,而是由 pytest 在内部设置的,其中包含当前测试的名称,以便其他进程可以检查它,更多信息请参阅 PYTEST_CURRENT_TEST 环境变量。
- PYTEST_DEBUG¶
设置后,pytest 将打印跟踪和调试信息。
- PYTEST_DISABLE_PLUGIN_AUTOLOAD¶
设置后,将禁用通过 setuptools 入口点自动加载插件。只会加载明确指定的插件。
- PYTEST_PLUGINS¶
包含应作为插件加载的模块的逗号分隔列表
export PYTEST_PLUGINS=mymodule.plugin,xdist
- PYTEST_THEME¶
设置用于代码输出的 pygment 样式。
- PYTEST_THEME_MODE¶
将 PYTEST_THEME
设置为 *dark* 或 *light*。
- PY_COLORS¶
设置为 1
时,pytest 将在终端输出中使用颜色。设置为 0
时,pytest 将不会使用颜色。 PY_COLORS
优先于 NO_COLOR
和 FORCE_COLOR
。
- NO_COLOR¶
设置为非空字符串时(无论值是什么),pytest 将不会在终端输出中使用颜色。 PY_COLORS
优先于 NO_COLOR
,而 NO_COLOR
优先于 FORCE_COLOR
。有关支持此社区标准的其他库,请参阅 no-color.org。
- FORCE_COLOR¶
设置为非空字符串时(无论值是什么),pytest 将在终端输出中使用颜色。 PY_COLORS
和 NO_COLOR
优先于 FORCE_COLOR
。
异常¶
- final exception FixtureLookupError[源代码]¶
基类:
LookupError
无法返回请求的 fixture(缺失或无效)。
警告¶
在某些情况下(例如使用不当或功能弃用)生成的自定义警告。
- class PytestWarning¶
基类:
UserWarning
pytest 发出的所有警告的基类。
- class PytestAssertRewriteWarning¶
-
pytest 断言重写模块发出的警告。
- class PytestCacheWarning¶
-
缓存插件在各种情况下发出的警告。
- class PytestCollectionWarning¶
-
当 pytest 无法收集模块中的文件或符号时发出的警告。
- class PytestConfigWarning¶
-
针对配置问题发出的警告。
- class PytestDeprecationWarning¶
基类:
PytestWarning
,DeprecationWarning
针对将在未来版本中删除的功能的警告类。
- class PytestExperimentalApiWarning¶
基类:
PytestWarning
,FutureWarning
用于表示 pytest 中实验的警告类别。
谨慎使用,因为 API 可能会在未来版本中更改甚至完全删除。
- class PytestReturnNotNoneWarning¶
-
当测试函数返回 None 以外的值时发出的警告。
- class PytestRemovedIn9Warning¶
-
针对将在 pytest 9 中删除的功能的警告类。
- class PytestUnhandledCoroutineWarning¶
-
针对未处理的协程发出的警告。
收集测试函数时遇到了协程,但没有任何异步感知插件处理它。协程测试函数本身不受支持。
- class PytestUnknownMarkWarning¶
-
使用未知标记时发出警告。
有关详细信息,请参阅如何使用属性标记测试函数。
- class PytestUnraisableExceptionWarning¶
-
报告了一个不可引发的异常。
不可引发的异常是在
__del__
实现和类似情况下引发的异常,此时无法像正常情况那样引发异常。
有关更多信息,请参阅文档中的内部 pytest 警告部分。
配置选项¶
以下是一些内置配置选项,可以写入 pytest.ini
(或 .pytest.ini
)、pyproject.toml
、tox.ini
或 setup.cfg
文件中,这些文件通常位于存储库的根目录下。
要详细查看每种文件格式,请参阅配置文件格式。
警告
不建议使用 setup.cfg
,除非是非常简单的用例。 .cfg
文件使用的解析器与 pytest.ini
和 tox.ini
不同,这可能会导致难以跟踪问题。如果可能,建议使用后者文件或 pyproject.toml
来保存 pytest 配置。
可以使用 -o/--override-ini
在命令行中覆盖配置选项,该选项也可以传递多次。预期的格式为 name=value
。例如
pytest -o console_output_style=classic -o cache_dir=/tmp/mycache
- addopts¶
将指定的
OPTS
添加到命令行参数集中,就好像它们是由用户指定的。示例:如果您的 ini 文件内容如下# content of pytest.ini [pytest] addopts = --maxfail=2 -rf # exit after 2 failures, report fail info
则发出
pytest test_hello.py
实际上意味着pytest --maxfail=2 -rf test_hello.py
默认是不添加任何选项。
- cache_dir¶
设置一个目录,用于存储缓存插件的内容。默认目录是
.pytest_cache
,它是在 rootdir 中创建的。目录可以是相对路径或绝对路径。如果设置相对路径,则目录是相对于 rootdir 创建的。此外,路径可能包含环境变量,这些变量将被扩展。有关缓存插件的更多信息,请参阅如何重新运行失败的测试并在测试运行之间维护状态。
- consider_namespace_packages¶
控制 pytest 在收集 Python 模块时是否应尝试识别命名空间包。默认值为
False
。如果正在测试的包是命名空间包的一部分,则设置为
True
。在 8.1 版本中添加。
- console_output_style¶
设置运行测试时的控制台输出样式
classic
:经典 pytest 输出。progress
:类似于经典 pytest 输出,但带有进度指示器。progress-even-when-capture-no
:即使在capture=no
时也允许使用进度指示器。count
:类似于 progress,但将进度显示为已完成测试的数量而不是百分比。
默认值为
progress
,但如果更喜欢经典模式或新模式导致意外问题,则可以回退到classic
# content of pytest.ini [pytest] console_output_style = classic
- doctest_encoding¶
用于解码带有文档字符串的文本文件的默认编码。 请参阅 pytest 如何处理文档测试。
- doctest_optionflags¶
来自标准
doctest
模块的一个或多个 doctest 标志名称。 请参阅 pytest 如何处理文档测试。
- empty_parameter_set_mark¶
允许在参数化中选择空参数集的操作
skip
跳过具有空参数集的测试(默认)xfail
将具有空参数集的测试标记为 xfail(run=False)fail_at_collect
如果参数化收集到空参数集,则引发异常
# content of pytest.ini [pytest] empty_parameter_set_mark = xfail
注意
此选项的默认值计划在未来版本中更改为
xfail
,因为这被认为不太容易出错,请参阅 问题 #3155 了解更多详细信息。
- faulthandler_timeout¶
如果测试运行时间超过
X
秒(包括夹具设置和拆卸),则转储所有线程的回溯。 使用faulthandler.dump_traceback_later()
函数实现,因此所有注意事项均适用。# content of pytest.ini [pytest] faulthandler_timeout=5
有关更多信息,请参阅 故障处理程序。
- filterwarnings¶
设置应采取的匹配警告的过滤器和操作列表。 默认情况下,测试会话期间发出的所有警告都将在测试会话结束时显示在摘要中。
# content of pytest.ini [pytest] filterwarnings = error ignore::DeprecationWarning
这告诉 pytest 忽略弃用警告并将所有其他警告转换为错误。 有关更多信息,请参阅 如何捕获警告。
- junit_duration_report¶
4.1 版新增。
配置如何将持续时间记录到 JUnit XML 报告中
total
(默认):报告的持续时间包括设置、调用和拆卸时间。call
:报告的持续时间仅包括调用时间,不包括设置和拆卸时间。
[pytest] junit_duration_report = call
- junit_family¶
版本 4.2 中新增。
在版本 6.1 中更改: 默认值更改为
xunit2
。配置生成的 JUnit XML 文件的格式。可能的选项有:
xunit1
(或legacy
):生成旧式输出,与 xunit 1.0 格式兼容。xunit2
:生成 xunit 2.0 风格的输出,这应该与最新的 Jenkins 版本更兼容。这是默认值。
[pytest] junit_family = xunit2
- junit_logging¶
3.5 版新增。
在版本 5.4 中更改: 添加了
log
、all
、out-err
选项。配置是否应将捕获的输出写入 JUnit XML 文件。有效值为:
log
:仅写入logging
捕获的输出。system-out
:写入捕获的stdout
内容。system-err
:写入捕获的stderr
内容。out-err
:写入捕获的stdout
和stderr
内容。all
:写入捕获的logging
、stdout
和stderr
内容。no
(默认值):不写入捕获的输出。
[pytest] junit_logging = system-out
- junit_log_passing_tests¶
版本 4.6 中新增。
如果
junit_logging != "no"
,则配置是否应将捕获的输出写入通过测试的 JUnit XML 文件。默认值为True
。[pytest] junit_log_passing_tests = False
- junit_suite_name¶
要设置根测试套件 xml 项目的名称,您可以配置文件中配置
junit_suite_name
选项[pytest] junit_suite_name = my_suite
- log_auto_indent¶
允许对多行日志消息进行选择性自动缩进。
支持命令行选项
--log-auto-indent [值]
和配置选项log_auto_indent = [值]
来设置所有日志记录的自动缩进行为。[值]
可以是True 或 “On” - 动态自动缩进多行日志消息
False 或 “Off” 或 0 - 不要自动缩进多行日志消息(默认行为)
[正整数] - 将多行日志消息自动缩进 [值] 个空格
[pytest] log_auto_indent = False
支持将关键字参数
extra={"auto_indent": [值]}
传递给对logging.log()
的调用,以指定日志中特定条目的自动缩进行为。extra
关键字参数会覆盖在命令行或配置中指定的值。
- log_cli_date_format¶
设置一个
time.strftime()
兼容的字符串,用于在格式化实时日志记录的日期时使用。[pytest] log_cli_date_format = %Y-%m-%d %H:%M:%S
有关更多信息,请参阅 实时日志。
- log_cli_format¶
设置一个
logging
兼容的字符串,用于格式化实时日志消息。[pytest] log_cli_format = %(asctime)s %(levelname)s %(message)s
有关更多信息,请参阅 实时日志。
- log_cli_level¶
设置应捕获以进行实时日志记录的最低日志消息级别。可以使用整数值或级别的名称。
[pytest] log_cli_level = INFO
有关更多信息,请参阅 实时日志。
- log_date_format¶
设置一个
time.strftime()
兼容的字符串,用于在格式化日志捕获的日期时使用。[pytest] log_date_format = %Y-%m-%d %H:%M:%S
有关更多信息,请参阅 如何管理日志记录。
- log_file¶
设置相对于当前工作目录的文件名,除了活动的其它日志记录工具外,日志消息也应写入该文件。
[pytest] log_file = logs/pytest-logs.txt
有关更多信息,请参阅 如何管理日志记录。
- log_file_date_format¶
设置一个
time.strftime()
兼容的字符串,用于在格式化日志文件的日期时使用。[pytest] log_file_date_format = %Y-%m-%d %H:%M:%S
有关更多信息,请参阅 如何管理日志记录。
- log_file_format¶
设置一个
logging
兼容的字符串,用于格式化重定向到日志文件的日志消息。[pytest] log_file_format = %(asctime)s %(levelname)s %(message)s
有关更多信息,请参阅 如何管理日志记录。
- log_file_level¶
设置应捕获到日志文件的最低日志消息级别。可以使用整数值或级别的名称。
[pytest] log_file_level = INFO
有关更多信息,请参阅 如何管理日志记录。
- log_format¶
设置一个
logging
兼容的字符串,用于格式化捕获的日志消息。[pytest] log_format = %(asctime)s %(levelname)s %(message)s
有关更多信息,请参阅 如何管理日志记录。
- markers¶
当使用
--strict-markers
或--strict
命令行参数时,只允许使用已知的标记 - 由核心 pytest 或某些插件在代码中定义。您可以在此设置中列出其他标记以将它们添加到白名单中,在这种情况下,您可能希望将
--strict-markers
添加到addopts
以避免将来出现回归[pytest] addopts = --strict-markers markers = slow serial
注意
强烈建议使用
--strict-markers
。保留--strict
只是为了向后兼容,并且可能会让其他人感到困惑,因为它只适用于标记,而不适用于其他选项。
- minversion¶
指定运行测试所需的最低 pytest 版本。
# content of pytest.ini [pytest] minversion = 3.0 # will fail if we run with pytest-2.8
- norecursedirs¶
设置在递归进行测试发现时要避免的目录基名模式。各个(fnmatch 样式的)模式应用于目录的基名,以决定是否递归到该目录中。模式匹配字符
* matches everything ? matches any single character [seq] matches any character in seq [!seq] matches any char not in seq
默认模式为
'*.egg'
、'.*'
、'_darcs'
、'build'
、'CVS'
、'dist'
、'node_modules'
、'venv'
、'{arch}'
。设置norecursedirs
将替换默认值。以下是如何避免某些目录的示例[pytest] norecursedirs = .svn _build tmp*
这将告诉
pytest
不要查找典型的 subversion 或 sphinx-build 目录,也不要查找任何以tmp
为前缀的目录。此外,
pytest
会尝试通过是否存在激活脚本来智能地识别和忽略虚拟环境。除非给出--collect-in-virtualenv
选项,否则在测试收集期间不会考虑任何被认为是虚拟环境根目录的目录。另请注意,norecursedirs
优先于--collect-in-virtualenv
;例如,如果您打算在基目录与'.*'
匹配的虚拟环境中运行测试,则除了使用--collect-in-virtualenv
标志外,还*必须*覆盖norecursedirs
。
- python_classes¶
一个或多个名称前缀或 glob 风格的模式,用于确定哪些类被视为测试集合。通过在模式之间添加空格来搜索多个 glob 模式。默认情况下,pytest 会将任何以
Test
为前缀的类视为测试集合。以下是如何从以Suite
结尾的类中收集测试的示例[pytest] python_classes = *Suite
请注意,无论此选项如何,始终都会收集
unittest.TestCase
派生的类,因为使用unittest
自身的收集框架来收集这些测试。
- python_files¶
一个或多个 Glob 风格的文件模式,用于确定哪些 Python 文件被视为测试模块。通过在模式之间添加空格来搜索多个 glob 模式
[pytest] python_files = test_*.py check_*.py example_*.py
或每行一个
[pytest] python_files = test_*.py check_*.py example_*.py
默认情况下,匹配
test_*.py
和*_test.py
的文件将被视为测试模块。
- python_functions¶
一个或多个名称前缀或 glob 模式,用于确定哪些测试函数和方法被视为测试。通过在模式之间添加空格来搜索多个 glob 模式。默认情况下,pytest 会将任何以
test
为前缀的函数视为测试。以下是如何收集以_test
结尾的测试函数和方法的示例[pytest] python_functions = *_test
请注意,这对
unittest.TestCase
派生类上的方法没有影响,因为使用unittest
自身的收集框架来收集这些测试。有关更详细的示例,请参阅更改命名约定。
- pythonpath¶
设置应添加到 Python 搜索路径中的目录列表。目录将添加到
sys.path
的开头。与PYTHONPATH
环境变量类似,这些目录将包含在 Python 查找导入模块的位置中。路径是相对于 rootdir 目录的。目录在测试会话期间保留在路径中。[pytest] pythonpath = src1 src2
注意
pythonpath
不会影响一些很早就发生的导入,尤其是使用-p
命令行选项加载的插件。
- required_plugins¶
pytest 运行所必需的插件的空格分隔列表。插件可以在其名称后直接列出,带或不带版本说明符。不允许在不同的版本说明符之间使用空格。如果未找到任何一个插件,则发出错误。
[pytest] required_plugins = pytest-django>=3.0.0,<4.0.0 pytest-html pytest-xdist>=1.0.0
- testpaths¶
设置在从 rootdir 目录执行 pytest 时,如果命令行中未指定特定目录、文件或测试 ID,则应搜索测试的目录列表。文件系统路径可以使用 shell 风格的通配符,包括递归
**
模式。当所有项目测试都在已知位置时,此配置很有用,可以加快测试收集速度,并避免意外拾取不需要的测试。
[pytest] testpaths = testing doc
此配置意味着执行
pytest
与执行以下命令具有相同的实际效果
pytest testing doc
- tmp_path_retention_count¶
根据
tmp_path_retention_policy
,我们应该保留多少个会话的tmp_path
目录。[pytest] tmp_path_retention_count = 3
默认值:
3
- tmp_path_retention_policy¶
控制由
tmp_path
fixture 创建的哪些目录会被保留,具体取决于测试结果。all
:保留所有测试的目录,无论结果如何。failed
:仅保留结果为error
或failed
的测试的目录。none
:无论结果如何,目录总是在每次测试结束后删除。
[pytest] tmp_path_retention_policy = "all"
默认值:
all
- usefixtures¶
将应用于所有测试函数的 fixture 列表;这在语义上等同于将
@pytest.mark.usefixtures
标记应用于所有测试函数。[pytest] usefixtures = clean_db
- verbosity_assertions¶
专门为断言相关的输出设置详细级别,覆盖应用程序范围的级别。
[pytest] verbosity_assertions = 2
默认为应用程序范围的详细级别(通过
-v
命令行选项)。可以使用特殊值“auto”来显式使用全局详细级别。
- verbosity_test_cases¶
专门为测试用例执行相关的输出设置详细级别,覆盖应用程序范围的级别。
[pytest] verbosity_test_cases = 2
默认为应用程序范围的详细级别(通过
-v
命令行选项)。可以使用特殊值“auto”来显式使用全局详细级别。
命令行标志¶
所有命令行标志都可以通过运行 pytest --help
获得
$ pytest --help
usage: pytest [options] [file_or_dir] [file_or_dir] [...]
positional arguments:
file_or_dir
general:
-k EXPRESSION Only run tests which match the given substring
expression. An expression is a Python evaluatable
expression where all names are substring-matched
against test names and their parent classes.
Example: -k 'test_method or test_other' matches all
test functions and classes whose name contains
'test_method' or 'test_other', while -k 'not
test_method' matches those that don't contain
'test_method' in their names. -k 'not test_method
and not test_other' will eliminate the matches.
Additionally keywords are matched to classes and
functions containing extra names in their
'extra_keyword_matches' set, as well as functions
which have names assigned directly to them. The
matching is case-insensitive.
-m MARKEXPR Only run tests matching given mark expression. For
example: -m 'mark1 and not mark2'.
--markers show markers (builtin, plugin and per-project ones).
-x, --exitfirst Exit instantly on first error or failed test
--fixtures, --funcargs
Show available fixtures, sorted by plugin appearance
(fixtures with leading '_' are only shown with '-v')
--fixtures-per-test Show fixtures per test
--pdb Start the interactive Python debugger on errors or
KeyboardInterrupt
--pdbcls=modulename:classname
Specify a custom interactive Python debugger for use
with --pdb.For example:
--pdbcls=IPython.terminal.debugger:TerminalPdb
--trace Immediately break when running each test
--capture=method Per-test capturing method: one of fd|sys|no|tee-sys
-s Shortcut for --capture=no
--runxfail Report the results of xfail tests as if they were
not marked
--lf, --last-failed Rerun only the tests that failed at the last run (or
all if none failed)
--ff, --failed-first Run all tests, but run the last failures first. This
may re-order tests and thus lead to repeated fixture
setup/teardown.
--nf, --new-first Run tests from new files first, then the rest of the
tests sorted by file mtime
--cache-show=[CACHESHOW]
Show cache contents, don't perform collection or
tests. Optional argument: glob (default: '*').
--cache-clear Remove all cache contents at start of test run
--lfnf={all,none}, --last-failed-no-failures={all,none}
With ``--lf``, determines whether to execute tests
when there are no previously (known) failures or
when no cached ``lastfailed`` data was found.
``all`` (the default) runs the full test suite
again. ``none`` just emits a message about no known
failures and exits successfully.
--sw, --stepwise Exit on test failure and continue from last failing
test next time
--sw-skip, --stepwise-skip
Ignore the first failing test but stop on the next
failing test. Implicitly enables --stepwise.
Reporting:
--durations=N Show N slowest setup/test durations (N=0 for all)
--durations-min=N Minimal duration in seconds for inclusion in slowest
list. Default: 0.005.
-v, --verbose Increase verbosity
--no-header Disable header
--no-summary Disable summary
-q, --quiet Decrease verbosity
--verbosity=VERBOSE Set verbosity. Default: 0.
-r chars Show extra test summary info as specified by chars:
(f)ailed, (E)rror, (s)kipped, (x)failed, (X)passed,
(p)assed, (P)assed with output, (a)ll except passed
(p/P), or (A)ll. (w)arnings are enabled by default
(see --disable-warnings), 'N' can be used to reset
the list. (default: 'fE').
--disable-warnings, --disable-pytest-warnings
Disable warnings summary
-l, --showlocals Show locals in tracebacks (disabled by default)
--no-showlocals Hide locals in tracebacks (negate --showlocals
passed through addopts)
--tb=style Traceback print mode
(auto/long/short/line/native/no)
--show-capture={no,stdout,stderr,log,all}
Controls how captured stdout/stderr/log is shown on
failed tests. Default: all.
--full-trace Don't cut any tracebacks (default is to cut)
--color=color Color terminal output (yes/no/auto)
--code-highlight={yes,no}
Whether code should be highlighted (only if --color
is also enabled). Default: yes.
--pastebin=mode Send failed|all info to bpaste.net pastebin service
--junit-xml=path Create junit-xml style report file at given path
--junit-prefix=str Prepend prefix to classnames in junit-xml output
pytest-warnings:
-W PYTHONWARNINGS, --pythonwarnings=PYTHONWARNINGS
Set which warnings to report, see -W option of
Python itself
--maxfail=num Exit after first num failures or errors
--strict-config Any warnings encountered while parsing the `pytest`
section of the configuration file raise errors
--strict-markers Markers not registered in the `markers` section of
the configuration file raise errors
--strict (Deprecated) alias to --strict-markers
-c FILE, --config-file=FILE
Load configuration from `FILE` instead of trying to
locate one of the implicit configuration files.
--continue-on-collection-errors
Force test execution even if collection errors occur
--rootdir=ROOTDIR Define root directory for tests. Can be relative
path: 'root_dir', './root_dir',
'root_dir/another_dir/'; absolute path:
'/home/user/root_dir'; path with variables:
'$HOME/root_dir'.
collection:
--collect-only, --co Only collect tests, don't execute them
--pyargs Try to interpret all arguments as Python packages
--ignore=path Ignore path during collection (multi-allowed)
--ignore-glob=path Ignore path pattern during collection (multi-
allowed)
--deselect=nodeid_prefix
Deselect item (via node id prefix) during collection
(multi-allowed)
--confcutdir=dir Only load conftest.py's relative to specified dir
--noconftest Don't load any conftest.py files
--keep-duplicates Keep duplicate tests
--collect-in-virtualenv
Don't ignore tests in a local virtualenv directory
--import-mode={prepend,append,importlib}
Prepend/append to sys.path when importing test
modules and conftest files. Default: prepend.
--doctest-modules Run doctests in all .py modules
--doctest-report={none,cdiff,ndiff,udiff,only_first_failure}
Choose another output format for diffs on doctest
failure
--doctest-glob=pat Doctests file matching pattern, default: test*.txt
--doctest-ignore-import-errors
Ignore doctest collection errors
--doctest-continue-on-failure
For a given doctest, continue to run after the first
failure
test session debugging and configuration:
--basetemp=dir Base temporary directory for this test run.
(Warning: this directory is removed if it exists.)
-V, --version Display pytest version and information about
plugins. When given twice, also display information
about plugins.
-h, --help Show help message and configuration info
-p name Early-load given plugin module name or entry point
(multi-allowed). To avoid loading of plugins, use
the `no:` prefix, e.g. `no:doctest`.
--trace-config Trace considerations of conftest.py files
--debug=[DEBUG_FILE_NAME]
Store internal tracing debug information in this log
file. This file is opened with 'w' and truncated as
a result, care advised. Default: pytestdebug.log.
-o OVERRIDE_INI, --override-ini=OVERRIDE_INI
Override ini option with "option=value" style, e.g.
`-o xfail_strict=True -o cache_dir=cache`.
--assert=MODE Control assertion debugging tools.
'plain' performs no assertion debugging.
'rewrite' (the default) rewrites assert statements
in test modules on import to provide assert
expression information.
--setup-only Only setup fixtures, do not execute tests
--setup-show Show setup of fixtures while executing tests
--setup-plan Show what fixtures and tests would be executed but
don't execute anything
logging:
--log-level=LEVEL Level of messages to catch/display. Not set by
default, so it depends on the root/parent log
handler's effective level, where it is "WARNING" by
default.
--log-format=LOG_FORMAT
Log format used by the logging module
--log-date-format=LOG_DATE_FORMAT
Log date format used by the logging module
--log-cli-level=LOG_CLI_LEVEL
CLI logging level
--log-cli-format=LOG_CLI_FORMAT
Log format used by the logging module
--log-cli-date-format=LOG_CLI_DATE_FORMAT
Log date format used by the logging module
--log-file=LOG_FILE Path to a file when logging will be written to
--log-file-mode={w,a}
Log file open mode
--log-file-level=LOG_FILE_LEVEL
Log file logging level
--log-file-format=LOG_FILE_FORMAT
Log format used by the logging module
--log-file-date-format=LOG_FILE_DATE_FORMAT
Log date format used by the logging module
--log-auto-indent=LOG_AUTO_INDENT
Auto-indent multiline messages passed to the logging
module. Accepts true|on, false|off or an integer.
--log-disable=LOGGER_DISABLE
Disable a logger by name. Can be passed multiple
times.
[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg|pyproject.toml file found:
markers (linelist): Register new markers for test functions
empty_parameter_set_mark (string):
Default marker for empty parametersets
norecursedirs (args): Directory patterns to avoid for recursion
testpaths (args): Directories to search for tests when no files or
directories are given on the command line
filterwarnings (linelist):
Each line specifies a pattern for
warnings.filterwarnings. Processed after
-W/--pythonwarnings.
consider_namespace_packages (bool):
Consider namespace packages when resolving module
names during import
usefixtures (args): List of default fixtures to be used with this
project
python_files (args): Glob-style file patterns for Python test module
discovery
python_classes (args):
Prefixes or glob names for Python test class
discovery
python_functions (args):
Prefixes or glob names for Python test function and
method discovery
disable_test_id_escaping_and_forfeit_all_rights_to_community_support (bool):
Disable string escape non-ASCII characters, might
cause unwanted side effects(use at your own risk)
console_output_style (string):
Console output: "classic", or with additional
progress information ("progress" (percentage) |
"count" | "progress-even-when-capture-no" (forces
progress even when capture=no)
verbosity_test_cases (string):
Specify a verbosity level for test case execution,
overriding the main level. Higher levels will
provide more detailed information about each test
case executed.
xfail_strict (bool): Default for the strict parameter of xfail markers
when not given explicitly (default: False)
tmp_path_retention_count (string):
How many sessions should we keep the `tmp_path`
directories, according to
`tmp_path_retention_policy`.
tmp_path_retention_policy (string):
Controls which directories created by the `tmp_path`
fixture are kept around, based on test outcome.
(all/failed/none)
enable_assertion_pass_hook (bool):
Enables the pytest_assertion_pass hook. Make sure to
delete any previously generated pyc cache files.
verbosity_assertions (string):
Specify a verbosity level for assertions, overriding
the main level. Higher levels will provide more
detailed explanation when an assertion fails.
junit_suite_name (string):
Test suite name for JUnit report
junit_logging (string):
Write captured log messages to JUnit report: one of
no|log|system-out|system-err|out-err|all
junit_log_passing_tests (bool):
Capture log information for passing tests to JUnit
report:
junit_duration_report (string):
Duration time to report: one of total|call
junit_family (string):
Emit XML for schema: one of legacy|xunit1|xunit2
doctest_optionflags (args):
Option flags for doctests
doctest_encoding (string):
Encoding used for doctest files
cache_dir (string): Cache directory path
log_level (string): Default value for --log-level
log_format (string): Default value for --log-format
log_date_format (string):
Default value for --log-date-format
log_cli (bool): Enable log display during test run (also known as
"live logging")
log_cli_level (string):
Default value for --log-cli-level
log_cli_format (string):
Default value for --log-cli-format
log_cli_date_format (string):
Default value for --log-cli-date-format
log_file (string): Default value for --log-file
log_file_mode (string):
Default value for --log-file-mode
log_file_level (string):
Default value for --log-file-level
log_file_format (string):
Default value for --log-file-format
log_file_date_format (string):
Default value for --log-file-date-format
log_auto_indent (string):
Default value for --log-auto-indent
pythonpath (paths): Add paths to sys.path
faulthandler_timeout (string):
Dump the traceback of all threads if a test takes
more than TIMEOUT seconds to finish
addopts (args): Extra command line options
minversion (string): Minimally required pytest version
required_plugins (args):
Plugins that must be present for pytest to run
Environment variables:
PYTEST_ADDOPTS Extra command line options
PYTEST_PLUGINS Comma-separated plugins to load during startup
PYTEST_DISABLE_PLUGIN_AUTOLOAD Set to disable plugin auto-loading
PYTEST_DEBUG Set to enable debug tracing of pytest's internals
to see available markers type: pytest --markers
to see available fixtures type: pytest --fixtures
(shown according to specified file_or_dir or current dir if not specified; fixtures with leading '_' are only shown with the '-v' option