API引用

此页包含对Pytest的API的完整引用。

功能

pytest.approx

approx(expected, rel=None, abs=None, nan_ok: bool = False) → _pytest.python_api.ApproxBase[源代码]

断言两个数字(或两组数字)在某些公差内彼此相等。

由于 `intricacies of floating-point arithmetic`_ _我们凭直觉认为相等的数字并不总是这样的:

>>> 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

词典 价值观 ::

>>> {'a': 0.1 + 0.2, 'b': 0.2 + 0.4} == approx({'a': 0.3, 'b': 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 考虑相对公差范围内的数字 1e-6 (即百万分之一)其预期价值相等。如果预期值为 0.0 因为除了 0.0 它本身就比较接近 0.0 . 为了不那么惊讶地处理这个案子, approx 还考虑绝对公差范围内的数字 1e-12 其预期值相等。无穷大和NaN是特殊情况。无穷大只被视为等于它本身,而不考虑相对公差。默认情况下,NaN不被视为等于任何内容,但可以通过设置 nan_ok 变为真。(这是为了便于比较使用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 如果超过规定的绝对公差,仍将被视为不相等。如果您同时指定 absrel ,如果满足以下任一公差,则数字视为相等:

>>> 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) :如果相对公差满足w.r.t.或 ab 或者满足绝对公差。因为相对公差是用两种方法计算的 ab ,此测试是对称的(即两者都不是 a 也不 b 是“参考值”)。如果要与比较,必须指定绝对公差 0.0 因为默认情况下没有公差。 `More information...`_ _

  • numpy.isclose(a, b, rtol=1e-5, atol=1e-8) :如果 ab 小于相对公差w.r.t. b 以及绝对容忍度。因为相对公差只计算w.r.t. b ,这个测试是不对称的,你可以想到 b 作为参考值。支持比较序列的是 numpy.allclose . `More information...`_ _

  • unittest.TestCase.assertAlmostEqual(a, b) 如果是真 ab 在绝对公差范围内 1e-7 . 不考虑相对公差,绝对公差不能改变,因此该函数不适用于非常大或非常小的数字。而且,它只在 unittest.TestCase 它很难看,因为它不符合pep8。 `More information...`_ _

  • a == pytest.approx(b, rel=1e-6, abs=1e-12) :如果相对公差满足w.r.t. b 或者满足绝对公差。因为相对公差只计算w.r.t. b ,这个测试是不对称的,你可以想到 b 作为参考值。在特殊情况下,如果明确指定绝对公差而不是相对公差,则只考虑绝对公差。

警告

在 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) 用于比较。这是因为富比较的调用层次结构遵循固定的行为。 `More information...`_ _

在 3.7.1 版更改: approx 加薪 TypeError 当它遇到非数值类型的dict值或序列元素时。

在 6.1.0 版更改: approx 回退到非数值类型的严格相等,而不是引发 TypeError .

pytest.fail

教程跳过和xfail:处理无法成功的测试

fail(msg: str = '', pytrace: bool = True) → NoReturn[源代码]

使用给定的消息显式地使正在执行的测试失败。

参数
  • msg (str) -- 向用户显示失败原因的消息。

  • pytrace (bool) -- 如果为False,msg表示完整的失败信息,并且不会报告python回溯。

pytest.skip

skip(msg[, allow_module_level=False])[源代码]

跳过具有给定消息的正在执行的测试。

此函数只能在测试(设置、调用或拆卸)或收集期间使用 allow_module_level 旗帜。这个函数也可以在doctests中调用。

参数

allow_module_level (bool) -- 允许在模块级别调用此函数,跳过模块的其余部分。默认为False。

注解

最好用 pytest.mark.skipif 标记(如果可能)声明在某些情况下跳过测试,如平台或依赖项不匹配。同样,使用 # doctest: +SKIP 指令(见) doctest.SKIP )以静态方式跳过一个博士测试。

pytest.importorskip

importorskip(modname: str, minversion: Optional[str] = None, reason: Optional[str] = None) → Any[源代码]

导入并返回请求的模块 modname 如果无法导入模块,则跳过当前测试。

参数
  • modname (str) -- 要导入的模块的名称。

  • minversion (str) -- 如果给定,则导入模块的 __version__ 属性必须至少是这个最小版本,否则测试仍然被跳过。

  • reason (str) -- 如果给定,则当无法导入模块时,此原因将显示为消息。

返回

导入的模块。这应该被指定给它的规范名称。

例子::

docutils = pytest.importorskip("docutils")

pytest.xfail

xfail(reason: str = '') → NoReturn[源代码]

根据给定的原因强制地发送正在执行的测试或设置函数。

只应在测试(设置、调用或拆卸)期间调用此函数。

注解

最好用 pytest.mark.xfail 标记(如果可能)在某些情况下声明测试为Xfailed,如已知错误或缺少特性。

pytest.exit

exit(msg: str, returncode: Optional[int] = None) → NoReturn[源代码]

退出测试过程。

参数
  • msg (str) -- 退出时显示的消息。

  • returncode (int) -- 退出pytest时要使用的返回代码。

pytest.main

main(args: Optional[Union[List[str], py._path.local.LocalPath]] = None, plugins: Optional[Sequence[Union[str, object]]] = None) → Union[int, _pytest.config.ExitCode][源代码]

执行进程内测试运行。

参数
  • args -- 命令行参数列表。

  • plugins -- 初始化期间要自动注册的插件对象列表。

返回

退出代码。

pytest.param

param(*values[, id][, marks])[源代码]

在中指定参数 pytest.mark.parametrize 来电或 parametrized fixtures .

@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 -- 要应用于此参数集的单个标记或标记列表。

  • id (str) -- 此参数集的属性的id。

pytest.raises

教程关于预期异常的断言 .

with raises(expected_exception: Union[Type[_E], Tuple[Type[_E], ...]], *, match: Optional[Union[str, Pattern[str]]] = '...') → RaisesContext[_E] as excinfo[源代码]
with raises(expected_exception: Union[Type[_E], Tuple[Type[_E], ...]], func: Callable[[...], Any], *args: Any, **kwargs: Any) → _pytest._code.code.ExceptionInfo[_E] as excinfo

断言代码块/函数调用引发 expected_exception 否则将引发失败异常。

参数

match -- 如果指定,则为包含正则表达式或正则表达式对象的字符串,该字符串使用 re.search . 匹配可能包含 `special characters`_ _,模式可以先用 re.escape . (仅在以下情况下使用 pytest.raises 用作上下文管理器,否则传递给函数。使用时 pytest.raises 作为函数,您可以使用: pytest.raises(Exc, func, match="passed on").match("my pattern") ) __ https://docs.python.org/3/library/re.htmlregular-表达式语法

使用 pytest.raises 作为上下文管理器,它将捕获给定类型的异常:

>>> import pytest
>>> with pytest.raises(ZeroDivisionError):
...    1/0

如果代码块未引发预期的异常 (ZeroDivisionError 在上面的示例中),或者根本没有异常,检查将失败。

也可以使用关键字参数 match 要断言异常与文本或regex匹配,请执行以下操作:

>>> 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")

上下文管理器生成 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 作为上下文管理器,值得注意的是,正常的上下文管理器规则适用,并且引发了异常 must 是上下文管理器范围内的最后一行。之后,在上下文管理器范围内的代码行将不会被执行。例如::

>>> 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 -->catched exception-->frame stack raising the exception-->current frame stack-->local variables--> ExceptionInfo )这使得Python保持从该循环引用的所有对象(包括当前帧中的所有局部变量)在下一次循环垃圾回收运行之前保持活动状态。更详细的信息可以在官方的Python文档中找到 the try statement .

pytest.deprecated_call

教程确保代码触发拒绝警告 .

with deprecated_call(*, match: Optional[Union[str, Pattern[str]]] = '...')WarningsRecorder[源代码]
with deprecated_call(func: Callable[[...], T], *args: Any, **kwargs: Any) → T

断言代码生成 DeprecationWarningPendingDeprecationWarning .

此函数可用作上下文管理器::

>>> 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

教程断言重写 .

register_assert_rewrite(*names: str)None[源代码]

注册导入时要重写的一个或多个模块名。

此函数将确保此模块或包中的所有模块将重写其断言语句。因此,在实际导入模块之前,通常在 __init__. 如果你是一个使用软件包的插件。

引发

TypeError -- 如果给定的模块名不是字符串。

pytest.warns

教程使用警告功能断言警告

with warns(expected_warning: Optional[Union[Type[Warning], Tuple[Type[Warning], ...]]], *, match: Optional[Union[str, Pattern[str]]] = '...') → WarningsChecker[源代码]
with warns(expected_warning: Optional[Union[Type[Warning], Tuple[Type[Warning], ...]]], func: Callable[[...], T], *args: Any, **kwargs: Any) → T

断言代码引发特定的警告类。

具体来说,参数 expected_warning 可以是警告类或警告类序列,并且 with 块必须发出一个或多个类的警告。

此帮助程序生成 warnings.WarningMessage 对象,每发出一个警告一个。

此函数可以用作上下文管理器,或任何其他方式 pytest.raises() 可用于:

>>> 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, 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... was emitted...

pytest.freeze_includes

教程冻结试验 .

freeze_includes() → List[str][源代码]

返回pytest使用的模块名列表,cx_freeze应包含这些名称。

标志

标记可用于将元数据应用于 测试函数 (但不是设备),然后可以通过设备或插件访问。

pytest.mark.filterwarnings

教程@pytest.mark.filterwarnings .

向标记的测试项添加警告筛选器。

pytest.mark.filterwarnings(filter)
参数

filter (str) -- A 警告规范字符串 ,由元组的内容组成 (action, message, category, module, lineno) 如中所述 The Warnings filter python文档的部分,由 ":" . 可选字段可以省略。传递给筛选的模块名不是正则表达式转义的。例如:。。代码块::python@pytest.mark.filterwarnings("忽略:。 用法将被弃用。 :deprecationwarning”)def test_foo():…

pytest.mark.parametrize

教程参数化夹具和测试功能 .

这个标记的签名与 pytest.Metafunc.parametrize() ;看那里。

pytest.mark.skip

教程跳过测试函数 .

无条件跳过测试函数。

pytest.mark.skip(*, reason=None)
参数

reason (str) -- 跳过测试函数的原因。

pytest.mark.skipif

教程跳过测试函数 .

如果条件为 True .

pytest.mark.skipif(condition, *, reason=None)
参数
  • condition (bool or str) -- True/False 如果应跳过条件或 condition string .

  • reason (str) -- 跳过测试函数的原因。

pytest.mark.usefixtures

教程在类和模块中使用fixture usefixtures .

将测试函数标记为使用给定的fixture名称。

pytest.mark.usefixtures(*names)
参数

args -- 要使用的设备的名称,如字符串。

注解

使用时 usefixtures 在hooks中,它只能在测试设置之前加载fixture(例如在 pytest_collection_modifyitems 钩子)。

另请注意,此标志在应用于以下对象时不起作用 夹具 .

pytest.mark.xfail

教程xfail:将测试功能标记为预期失败 .

将测试函数标记为 预计会失败 .

pytest.mark.xfail(condition=None, *, reason=None, raises=None, run=True, strict=False)
参数
  • condition (bool or str) -- 将测试功能标记为xfail的条件 (True/False 或A condition string ). 如果是bool,还必须指定 reason (见 condition string

  • reason (str) -- 测试函数标记为xfail的原因。

  • raises (Type[Exception]) -- 异常子类预期由测试函数引发;其他异常将使测试失败。

  • run (bool) -- 是否应实际执行测试功能。如果 False ,函数将始终Xfail且不会执行(如果函数是segfaulting,则很有用)。

  • strict (bool) --

    • 如果 False (默认)功能将在终端输出中显示为 xfailed 如果失败了, xpass 如果它通过。在这两种情况下,这不会导致整个测试套件失败。这对于标记 薄片状的 稍后要处理的测试(随机失败的测试)。

    • 如果 True ,功能将在终端输出中显示为 xfailed 如果它失败了,但是如果它意外地通过了,那么它将 fail 测试套件。这对于标记总是失败的函数特别有用,如果函数意外开始通过,则应该有明确的指示(例如,库的新版本修复了已知的错误)。

自定义标记

标记是使用工厂对象动态创建的。 pytest.mark 用作装饰。

例如:

@pytest.mark.timeout(10, "slow", method="thread")
def test_function():
    ...

将创建并附加 Mark 集合的对象 Item 可通过固定装置或钩子 Node.iter_markers . 这个 mark 对象将具有以下属性:

mark.args == (10, "slow")
mark.kwargs == {"method": "thread"}

使用多个自定义标记的示例:

@pytest.mark.timeout(10, "slow", method="thread")
@pytest.mark.slow
def test_function():
    ...

什么时候? Node.iter_markersNode.iter_markers 与多个标记一起使用时,将首先迭代距离函数最近的标记。上面的示例将导致 @pytest.mark.slow 然后 @pytest.mark.timeout(...) .

夹具

教程Pytest夹具:显式、模块化、可扩展 .

通过将fixture声明为参数名,测试函数或其他fixture可以请求fixture。

需要夹具的测试示例:

def test_output(capsys):
    print("hello")
    out, err = capsys.readouterr()
    assert out == "hello\n"

需要另一个夹具的夹具示例:

@pytest.fixture
def db_session(tmpdir):
    fn = tmpdir / "db.file"
    return connect(str(fn))

有关详细信息,请参阅 fixtures docs .

@pytest.fixture

@fixture(fixture_function: _FixtureFunction, *, scope: Union[_Scope, Callable[[str, Config], _Scope]] = '...', params: Optional[Iterable[object]] = '...', autouse: bool = '...', ids: Optional[Union[Iterable[Union[None, str, float, int, bool]], Callable[[Any], Optional[object]]]] = '...', name: Optional[str] = '...') → _FixtureFunction[源代码]
@fixture(fixture_function: None = '...', *, scope: Union[_Scope, Callable[[str, Config], _Scope]] = '...', params: Optional[Iterable[object]] = '...', autouse: bool = '...', ids: Optional[Union[Iterable[Union[None, str, float, int, bool]], Callable[[Any], Optional[object]]]] = '...', name: Optional[str] = 'None') → _pytest.fixtures.FixtureFunctionMarker

用于标记夹具工厂功能的修饰符。

可以使用此修饰符(有参数或无参数)来定义fixture函数。

fixture函数的名称稍后可以被引用,以在运行测试之前进行调用:测试模块或类可以使用 pytest.mark.usefixtures(fixturename) 标记。

测试函数可以直接使用fixture名称作为输入参数,在这种情况下,fixture函数返回的fixture实例将被注入。

夹具可以提供它们的值来测试使用 returnyield 声明。使用时 yield 后面的代码块 yield 无论测试结果如何,语句都作为拆卸代码执行,并且必须只生成一次。

参数
  • scope -- 共享这个设备的范围;一个 "function" (默认) "class""module""package""session" . 此参数也可以是接收 (fixture_name, config) 作为参数返回 str 使用上面提到的值之一。看到了吗 动态范围 更多信息,请参阅文档。

  • params -- 一个可选的参数列表,它将导致多次调用fixture函数和使用它的所有测试。当前参数在中可用 request.param .

  • autouse -- 如果为True,那么fixture函数将为所有可以看到它的测试激活。如果为False(默认值),则需要显式引用来激活设备。

  • ids -- 字符串id的列表,每个与参数相对应,因此它们是测试id的一部分。如果没有提供id,则将从参数自动生成这些id。

  • name -- 设备的名称。默认为修饰函数的名称。如果fixture是在定义fixture的同一个模块中使用的,那么fixture的函数名将被请求fixture的函数arg隐藏;解决这个问题的一种方法是命名修饰函数 fixture_<fixturename> 然后使用 @pytest.fixture(name='<fixturename>') .

config.cache

教程缓存:使用交叉测试运行状态 .

这个 config.cache 对象允许其他插件和设备跨测试运行存储和检索值。从夹具请求访问它 pytestconfig 把它放进你的设备里 pytestconfig.cache .

在引擎盖下,缓存插件使用 dumps/loads API json STDLIB模块。

config.cache 是的实例 pytest.Cache

final class Cache[源代码]
makedir(name: str) → py._path.local.LocalPath[源代码]

返回具有给定名称的目录路径对象。

如果目录尚不存在,将创建它。您可以使用它来管理文件,例如跨测试会话存储/检索数据库转储。

参数

name -- 必须是不包含 / 分离器。确保该名称包含插件或应用程序标识符,以防止与其他缓存用户发生冲突。

get(key: str, default)[源代码]

返回给定键的缓存值。

如果尚未缓存值或无法读取值,则返回指定的默认值。

参数
  • key -- 一定是 / 分隔值。通常,名字是插件或应用程序的名称。

  • default -- 缓存未命中或缓存值无效时要返回的值。

set(key: str, value: object)None[源代码]

保存给定密钥的值。

参数
  • key -- 一定是 / 分隔值。通常,名字是插件或应用程序的名称。

  • value -- 必须是基本python类型的任意组合,包括嵌套类型(如字典列表)。

卡普西斯

教程捕获stdout/stderr输出 .

capsys()[源代码]

启用写入的文本捕获 sys.stdoutsys.stderr .

捕获的输出通过 capsys.readouterr() 方法调用,它返回 (out, err) 命名元组。 outerrtext 物体。

返回的实例 CaptureFixture[str] .

例子:

def test_output(capsys):
    print("hello")
    captured = capsys.readouterr()
    assert captured.out == "hello\n"
class CaptureFixture[源代码]

返回的对象 capsyscapsysbinarycapfdcapfdbinary 固定装置。

readouterr() → _pytest.capture.CaptureResult[源代码]

读取并返回到目前为止捕获的输出,重置内部缓冲区。

返回

将捕获的内容作为namedtuple与 outerr 字符串属性。

with disabled() → Generator[None, None, None][源代码]

with 块。

双星

教程捕获stdout/stderr输出 .

capsysbinary()[源代码]

启用写入的字节捕获 sys.stdoutsys.stderr .

捕获的输出通过 capsysbinary.readouterr() 方法调用,它返回 (out, err) 命名元组。 outerrbytes 物体。

返回的实例 CaptureFixture[bytes] .

例子:

def test_output(capsysbinary):
    print("hello")
    captured = capsysbinary.readouterr()
    assert captured.out == b"hello\n"

CAPFD

教程捕获stdout/stderr输出 .

capfd()[源代码]

启用写入文件描述符的文本捕获 12 .

捕获的输出通过 capfd.readouterr() 方法调用,它返回 (out, err) 命名元组。 outerrtext 物体。

返回的实例 CaptureFixture[str] .

例子:

def test_system_echo(capfd):
    os.system('echo "hello"')
    captured = capfd.readouterr()
    assert captured.out == "hello\n"

二元二进制

教程捕获stdout/stderr输出 .

capfdbinary()[源代码]

启用写入文件描述符的字节捕获 12 .

捕获的输出通过 capfd.readouterr() 方法调用,它返回 (out, err) 命名元组。 outerrbyte 物体。

返回的实例 CaptureFixture[bytes] .

例子:

def test_system_echo(capfdbinary):
    os.system('echo "hello"')
    captured = capfdbinary.readouterr()
    assert captured.out == b"hello\n"

doctest_namespace

教程模块和测试文件的Doctest集成 .

doctest_namespace()[源代码]

返回一个 dict 它将被注入doctests的名称空间。

通常,此夹具与其他夹具一起使用 autouse 固定装置:

@pytest.fixture(autouse=True)
def add_np(doctest_namespace):
    doctest_namespace["np"] = numpy

有关详细信息: 'doctest_namespace'夹具 .

请求

教程根据命令行选项,将不同的值传递给测试函数 .

这个 request 夹具是提供请求测试功能信息的特殊夹具。

class FixtureRequest[源代码]

测试或夹具功能对夹具的请求。

请求对象提供对请求的测试上下文的访问,并且具有可选的 param 属性,以防设备被间接参数化。

fixturename: Optional[str]

正在为其执行此请求的设备。

scope: _Scope

作用域字符串,“function”、“class”、“module”、“session”之一。

fixturenames

此请求中所有活动装置的名称。

node

基础集合节点(取决于当前请求范围)。

config

与此请求关联的pytest配置对象。

function

如果请求具有每个函数范围,则测试函数对象。

cls

类(可以是None),其中收集了测试函数。

instance

在其上收集测试函数的实例(可以是None)。

module

收集测试函数的Python模块对象。

fspath

收集此测试的测试模块的文件系统路径。

keywords

基础节点的关键字/标记词典。

session

Pytest会话对象。

addfinalizer(finalizer: Callable[], object])None[源代码]

添加finalizer/teardown函数,以便在请求的测试上下文中的最后一个测试完成执行后调用。

applymarker(marker: Union[str, _pytest.mark.structures.MarkDecorator])None[源代码]

对单个测试函数调用应用标记。

如果不希望在所有函数调用上都有关键字/标记,则此方法非常有用。

参数

marker -- A _pytest.mark.MarkDecorator 调用创建的对象 pytest.mark.NAME(...) .

raiseerror(msg: Optional[str]) → NoReturn[源代码]

使用给定的消息引发FixtureLookupError。

getfixturevalue(argname: str) → Any[源代码]

动态运行命名的fixture函数。

如果可能,建议通过函数参数声明fixtures。但是,如果您只能在测试设置时决定是否使用另一个fixture,那么您可以使用此函数在fixture或测试函数体中检索它。

引发

pytest.FixtureLookupError -- 如果找不到给定的固定装置。

PyTestCONFIG

pytestconfig()[源代码]

会话范围的fixture,返回 _pytest.config.Config 对象。

例子::

def test_foo(pytestconfig):
    if pytestconfig.getoption("verbose") > 0:
        ...

record_property

教程record_property .

record_property()[源代码]

向调用测试添加额外属性。

用户属性成为测试报告的一部分,可供配置的报告器使用,如junitxml。

固定装置可使用 name, value . 该值是自动XML编码的。

例子::

def test_function(record_property):
    record_property("example_key", 1)

record_testsuite_property

教程record_testsuite_property .

record_testsuite_property()[源代码]

录制新的 <property> 标记为根的子级 <testsuite> .

这适合于编写关于整个测试套件的全局信息,并且与 xunit2 朱尼特家族。

这是一个 session -使用调用的作用域固定装置 (name, value) .例子:

def test_foo(record_testsuite_property):
    record_testsuite_property("ARCH", "PPC")
    record_testsuite_property("STORAGE_TYPE", "CEPH")

name 必须是字符串, value 将转换为字符串并正确进行XML转义。

警告

目前这个固定装置 不起作用pytest-xdist 插件。见问题 #7767 有关详细信息。

卡普洛格

教程登录 .

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

返回A pytest.LogCaptureFixture 实例。

final class LogCaptureFixture[源代码]

提供日志捕获的访问和控制。

handler

获取fixture使用的日志处理程序。

返回类型

LogCaptureHandler

get_records(when: str) → List[logging.LogRecord][源代码]

获取某个可能的测试阶段的日志记录。

参数

when (str) -- 从哪个测试阶段获取记录。有效值为:“设置”、“调用”和“拆卸”。

返回

在给定阶段捕获的记录的列表。

返回类型

List[logging.LogRecord]

3.4 新版功能.

text

格式化的日志文本。

records

日志记录的列表。

record_tuples

用于断言比较的日志记录的精简版本的列表。

元组的格式为:

(记录器名称、日志级别、消息)

messages

插入日志消息格式的列表。

与包含格式字符串和插值参数的“records”不同,此列表中的日志消息都是插值的。

与包含处理程序输出的“text”不同,此列表中的日志消息没有添加级别、时间戳等,这使得精确的比较更加可靠。

请注意,回溯或堆栈信息(来自 logging.exception()exc_infostack_info 日志函数的参数)不包括在内,因为它是由处理程序中的格式化程序添加的。

3.7 新版功能.

clear()None[源代码]

重置日志记录列表和捕获的日志文本。

set_level(level: Union[int, str], logger: Optional[str] = None)None[源代码]

设置测试期间记录器的级别。

在 3.4 版更改: 在测试结束时,此函数更改的记录器级别将恢复为初始值。

参数
  • level (int) -- 级别。

  • logger (str) -- 要更新的记录器。如果未给定,则根日志记录器。

with at_level(level: int, logger: Optional[str] = None) → Generator[None, None, None][源代码]

设置日志捕获级别的上下文管理器。“with”语句结束后,级别将恢复为其原始值。

参数
  • level (int) -- 级别。

  • logger (str) -- 要更新的记录器。如果未给定,则根日志记录器。

monkeypatch

教程MonkeyPatching/Mocking模块和环境 .

monkeypatch()[源代码]

一个方便的猴子修补夹具。

fixture提供了这些方法来修改对象、字典或操作系统环境:

monkeypatch.setattr(obj, name, value, raising=True)
monkeypatch.delattr(obj, name, raising=True)
monkeypatch.setitem(mapping, name, value)
monkeypatch.delitem(obj, name, raising=True)
monkeypatch.setenv(name, value, prepend=False)
monkeypatch.delenv(name, raising=True)
monkeypatch.syspath_prepend(path)
monkeypatch.chdir(path)

所有修改将在请求的测试功能或夹具完成后撤消。这个 raising 参数确定如果设置/删除操作没有目标,是否将引发keyError或attributeError。

返回A MonkeyPatch 实例。

final class MonkeyPatch[源代码]

helper可以方便地monkeypatch属性/项/环境变量/syspath。

monkeypatch 固定装置。

版本已更改:

6.2现在还可以直接用作 pytest.MonkeyPatch() ,用于设备不可用的情况。在这种情况下,使用 with MonkeyPatch.context() as mp: 或者记得打电话给 undo() 明确地。

classmethod with context() → Generator[MonkeyPatch, None, None][源代码]

返回新的 MonkeyPatch 对象,撤消在 with 出口时封锁。

例子:

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 = '...', raising: bool = '...')None[源代码]
setattr(target: object, name: str, value: object, raising: bool = '...')None

在目标上设置属性值,记住旧值。

为了方便起见,可以将字符串指定为 target 它将被解释为一个点式导入路径,最后一部分是属性名。例如, monkeypatch.setattr("os.getcwd", lambda: "/") 将设置 getcwd 功能 os 模块。

如果属性不存在,则引发AttributeError,除非 raising 设置为False。

delattr(target: Union[object, str], name: Union[str, _pytest.monkeypatch.Notset] = <notset>, raising: bool = True)None[源代码]

删除属性 nametarget .

如果没有 name 已指定并且 target 是一个字符串,它将被解释为一个点式导入路径,最后一部分是属性名。

引发AttributeError属性不存在,除非 raising 设置为False。

setitem(dic: MutableMapping[K, V], name: K, value: V)None[源代码]

设置字典项 name 重视。

delitem(dic: MutableMapping[K, V], name: K, raising: bool = True)None[源代码]

删除 name 来自dict。

加薪 KeyError 如果它不存在,除非 raising 设置为False。

setenv(name: str, value: str, prepend: Optional[str] = None)None[源代码]

设置环境变量 namevalue .

如果 prepend 是一个字符,读取当前环境变量值,并在 value 与…相连 prepend 性格。

delenv(name: str, raising: bool = True)None[源代码]

删除 name 来自环境。

加薪 KeyError 如果它不存在,除非 raising 设置为False。

syspath_prepend(path)None[源代码]

预置 pathsys.path 导入位置列表。

chdir(path)None[源代码]

将当前工作目录更改为指定路径。

路径可以是字符串或py.path.local对象。

undo()None[源代码]

撤消以前的更改。

此调用使用撤消堆栈。第二次调用它没有任何效果,除非在撤消调用之后进行更多的monkeypatching。

一般不需要调用 undo() ,因为它是在拆卸过程中自动调用的。

注意同样的 monkeypatch fixture用于单个测试函数调用。如果 monkeypatch 同时由测试函数本身和一个测试夹具使用,调用 undo() 将撤消在两个函数中所做的所有更改。

烘干机

6.2 新版功能.

提供了一个 Pytester 实例,该实例可用于运行和测试pytest本身。

它提供了一个空目录,可以在其中隔离执行pytest,并包含用于编写测试、配置文件和匹配预期输出的工具。

要使用它,请将其包含在您的最上面 conftest.py 文件:

pytest_plugins = "pytester"
final class Pytester[源代码]

编写测试/配置文件、隔离执行pytest以及匹配预期输出的功能,非常适合pytest插件的黑盒测试。

它试图尽可能地将测试运行与外部因素隔离,将当前工作目录修改为 path 以及初始化期间的环境变量。

属性:

变量
  • path (Path) -- 用于创建文件/从中运行测试等的临时目录路径。

  • plugins -- 与一起使用的插件列表 parseconfig()runpytest() . 最初这是一个空列表,但是插件可以添加到列表中。要添加到列表中的项的类型取决于使用它们的方法,有关详细信息,请参阅它们。

CLOSE_STDIN

alias of object

exception TimeoutExpired[源代码]
path

创建文件并执行pytest的临时目录。

make_hook_recorder(pluginmanager: _pytest.config.PytestPluginManager)_pytest.pytester.HookRecorder[源代码]

创建新的 HookRecorder 对于一个插件管理器。

chdir()None[源代码]

CD到临时目录中。

这是在实例化时自动完成的。

makefile(ext: str, *args: str, **kwargs: str)pathlib.Path[源代码]

在测试目录中创建新文件。

参数
  • ext (str) -- 文件应使用的扩展名,包括点,例如 .py .

  • args -- 所有参数都被视为字符串,并使用换行符连接。结果将作为内容写入文件。文件名基于请求此fixture的测试函数。

  • kwargs -- 每个关键字都是文件的名称,而其值将作为文件的内容写入。

实例:

pytester.makefile(".txt", "line1", "line2")

pytester.makefile(".ini", pytest="[pytest]\naddopts=-rs\n")
makeconftest(source: str)pathlib.Path[源代码]

写一个以“source”为内容的compute.py文件。

makeini(source: str)pathlib.Path[源代码]

写一个以“source”为内容的tox.ini文件。

getinicfg(source: str) → iniconfig.SectionWrapper[源代码]

从tox.ini配置文件返回pytest部分。

makepyprojecttoml(source: str)pathlib.Path[源代码]

写一个pyproject.toml项目以“source”作为内容的文件。

6.0 新版功能.

makepyfile(*args, **kwargs)pathlib.Path[源代码]

扩展名为.py的.makefile()的快捷方式。

默认为扩展名为“.py”的测试名称,例如test_foobar.py,覆盖现有文件。

实例:

def test_something(pytester):
    # Initial file is created test_something.py.
    pytester.makepyfile("foobar")
    # To create multiple files, pass kwargs accordingly.
    pytester.makepyfile(custom="foobar")
    # At this point, both 'test_something.py' & 'custom.py' exist in the test directory.
maketxtfile(*args, **kwargs)pathlib.Path[源代码]

扩展名为.txt的.makefile()的快捷方式。

默认为扩展名为“.txt”的测试名称,例如test_foobar.txt版,覆盖现有文件。

实例:

def test_something(pytester):
    # Initial file is created test_something.txt.
    pytester.maketxtfile("foobar")
    # To create multiple files, pass kwargs accordingly.
    pytester.maketxtfile(custom="foobar")
    # At this point, both 'test_something.txt' & 'custom.txt' exist in the test directory.
syspathinsert(path: Optional[Union[str, os.PathLike[str]]] = None)None[源代码]

将目录预先设置为sys.path,默认为 tmpdir .

当该对象在每个测试结束时死亡时,此操作将自动撤消。

mkdir(name: str)pathlib.Path[源代码]

创建新的(子)目录。

mkpydir(name: str)pathlib.Path[源代码]

创建一个新的python包。

这将创建一个(子)目录,其中 __init__.py 文件,以便它被识别为Python包。

copy_example(name: Optional[str] = None)pathlib.Path[源代码]

将文件从项目目录复制到testdir。

参数

name (str) -- 要复制的文件的名称。

返回

复制目录的路径(内部 self.path

class Session(*k, **kw)
exception Failed

测试运行失败时发出停止信号。

exception Interrupted

发出测试运行中断的信号。

for ... in collect() → Iterator[Union[_pytest.nodes.Item, _pytest.nodes.Collector]]

返回此集合节点的子级(项和收集器)列表。

classmethod from_config(config: _pytest.config.Config) → _pytest.main.Session
for ... in genitems(node: Union[_pytest.nodes.Item, _pytest.nodes.Collector]) → Iterator[_pytest.nodes.Item]
gethookproxy(fspath: py._path.local.LocalPath)
isinitpath(path: py._path.local.LocalPath)bool
perform_collect(args: Optional[Sequence[str]] = None, genitems: bool = True) → Sequence[Union[_pytest.nodes.Item, _pytest.nodes.Collector]]

执行此会话的收集阶段。

默认情况下会调用此函数 pytest_collection 钩子实现;有关详细信息,请参阅该钩子的文档。出于测试目的,也可以直接调用 Session .

此函数通常递归地将从会话收集的所有收集器扩展到它们的项,并且只返回项。出于测试目的,可以通过 genitems=False ,在这种情况下,返回值包含这些未展开的收集器,以及 session.items 是空的。

pytest_collectreport(report: Union[_pytest.reports.TestReport, _pytest.reports.CollectReport])None
pytest_collectstart()None
pytest_runtest_logreport(report: Union[_pytest.reports.TestReport, _pytest.reports.CollectReport])None
getnode(config: _pytest.config.Config, arg: Union[str, os.PathLike[str]]) → Optional[Union[_pytest.nodes.Item, _pytest.nodes.Collector]][源代码]

返回文件的集合节点。

参数
getpathnode(path: Union[str, os.PathLike[str]])[源代码]

返回文件的集合节点。

这就像 getnode() 但使用 parseconfigure() 创建(配置的)pytest配置实例。

参数

path (py.path.local) -- 文件的路径。

genitems(colitems: Sequence[Union[_pytest.nodes.Item, _pytest.nodes.Collector]]) → List[_pytest.nodes.Item][源代码]

从集合节点生成所有测试项。

这将递归到集合节点,并返回包含在其中的所有测试项的列表。

runitem(source: str) → Any[源代码]

运行“test_func”项。

调用测试实例(包含测试方法的类)必须提供 .getrunner() 方法,该方法应返回可以为单个项运行测试协议的运行程序,例如 _pytest.runner.runtestprotocol() .

inline_runsource(source: str, *cmdlineargs)_pytest.pytester.HookRecorder[源代码]

在进程中使用运行测试模块 pytest.main() .

此运行将“源”写入临时文件并运行 pytest.main() 在上面,返回 HookRecorder 结果的实例。

参数
  • source -- 测试模块的源代码。

  • cmdlineargs -- 任何要使用的额外命令行参数。

返回

HookRecorder 结果的实例。

inline_genitems(*args) → Tuple[List[_pytest.nodes.Item], _pytest.pytester.HookRecorder][源代码]

运行 pytest.main(['--collectonly']) 正在进行中。

运行 pytest.main() 函数在测试进程内部运行所有pytest,如 inline_run() ,但返回所收集项的元组和 HookRecorder 实例。

inline_run(*args: Union[str, os.PathLike[str]], plugins=(), no_reraise_ctrlc: bool = False)_pytest.pytester.HookRecorder[源代码]

运行 pytest.main() 过程中,返回一个钩子记录器。

运行 pytest.main() 函数来运行测试进程内部的所有pytest。这意味着它可以返回 HookRecorder 从该运行中提供比通过匹配stdout/stderr可以完成的更详细结果的实例 runpytest() .

参数
  • args -- 传递给命令行的参数 pytest.main() .

  • plugins -- 额外的插件实例 pytest.main() 实例应使用。

  • no_reraise_ctrlc -- 通常,我们会从子进程中重设键盘中断。如果为True,则捕获键盘中断异常。

返回

A HookRecorder 实例。

runpytest_inprocess(*args: Union[str, os.PathLike[str]], **kwargs: Any)_pytest.pytester.RunResult[源代码]

返回进程内运行pytest的结果,提供类似于self.runpytest()提供的接口。

runpytest(*args: Union[str, os.PathLike[str]], **kwargs: Any)_pytest.pytester.RunResult[源代码]

根据命令行选项--run pytest“在内联或子进程中运行pytest,并返回 RunResult .

parseconfig(*args: Union[str, os.PathLike[str]])_pytest.config.Config[源代码]

从给定的命令行参数返回新的pytest配置实例。

这会调用pytest.config中的pytest引导代码来创建新的 _pytest.core.PluginManager 并调用pytest命令行分析钩子来创建一个新的 _pytest.config.Config 实例。

如果 plugins 已填充,它们应该是要向PluginManager注册的插件模块。

parseconfigure(*args: Union[str, os.PathLike[str]])_pytest.config.Config[源代码]

返回新的Pytest配置配置实例。

返回新的 _pytest.config.Config 类实例 parseconfig() ,但也调用pytest_configure hook。

getitem(source: str, funcname: str = 'test_func') → _pytest.nodes.Item[源代码]

返回测试函数的测试项。

将源代码写入python文件,并在生成的模块上运行pytest的集合,返回请求的函数名的测试项。

参数
  • source -- 模块源。

  • funcname -- 要为其返回测试项的测试函数的名称。

getitems(source: str) → List[_pytest.nodes.Item][源代码]

返回从模块收集的所有测试项。

返回Python模块中包含的所有测试项,并将测试结果写入Python模块中。

getmodulecol(source: Union[str, pathlib.Path], configargs=(), *, withinit: bool = False)[源代码]

返回的模块收集节点 source .

source 使用文件 makepyfile() 然后在上面运行pytest集合,返回测试模块的集合节点。

参数
  • source -- 要收集的模块的源代码。

  • configargs -- 要传递给其他参数吗 parseconfigure() .

  • withinit -- 是否也要写 __init__.py 文件到同一目录,以确保它是一个包。

collect_by_name(modcol: _pytest.nodes.Collector, name: str) → Optional[Union[_pytest.nodes.Item, _pytest.nodes.Collector]][源代码]

从模块集合中返回名称为的集合节点。

在模块集合节点中搜索与给定名称匹配的集合节点。

参数
  • modcol -- 模块集合节点;请参阅 getmodulecol() .

  • name -- 要返回的节点的名称。

popen(cmdargs, stdout: Union[int, TextIO] = -1, stderr: Union[int, TextIO] = -1, stdin=<class 'object'>, **kw)[源代码]

调用Subprocess.popen。

电话子流程.Popen确保当前工作目录在PYTHONPATH中。

你可能想用 run() 相反。

run(*cmdargs: Union[str, os.PathLike[str]], timeout: Optional[float] = None, stdin=<class 'object'>)_pytest.pytester.RunResult[源代码]

用参数运行命令。

使用Subprocess.Popen运行进程,保存stdout和stderr。

参数
  • cmdargs -- 要传递给的参数序列 subprocess.Popen() ,其中类似路径的对象被转换为 str 自动地。

  • timeout -- 以秒为单位的超时和提升时间 Pytester.TimeoutExpired .

  • stdin -- 可选标准输入。正在发送字节,关闭管道,否则将传递到 popen .默认为 CLOSE_STDIN ,即使用管道 (subprocess.PIPE )那就结束了。

返回类型

RunResult

runpython(script)_pytest.pytester.RunResult[源代码]

使用sys.executable作为解释器运行python脚本。

返回类型

RunResult

runpython_c(command)[源代码]

运行python-c“command”。

返回类型

RunResult

runpytest_subprocess(*args, timeout: Optional[float] = None)_pytest.pytester.RunResult[源代码]

将pytest作为具有给定参数的子进程运行。

任何添加到 plugins 将使用添加列表 -p 命令行选项。另外 --basetemp 用于将任何临时文件和目录放在前缀为“runpytest-”的编号目录中,以避免与临时文件和目录的常规编号pytest位置冲突。

参数
  • args -- 要传递给pytest子进程的参数序列。

  • timeout -- 以秒为单位的超时和提升时间 Pytester.TimeoutExpired .

返回类型

RunResult

spawn_pytest(string: str, expect_timeout: float = 10.0) → pexpect.spawn[源代码]

使用pexpect运行pytest。

这确保使用正确的pytest并设置临时目录位置。

返回pexpect子级。

spawn(cmd: str, expect_timeout: float = 10.0) → pexpect.spawn[源代码]

使用pexpect运行命令。

返回pexpect子级。

class RunResult[源代码]

运行命令的结果。

ret: Union[int, _pytest.config.ExitCode]

返回值。

outlines

从stdout捕获的行的列表。

errlines

从stderr捕获的行的列表。

stdout

LineMatcher 标准输出。

使用例如。 str(stdout) 重建标准输出,或通常使用的 stdout.fnmatch_lines() 方法。

stderr

LineMatcher 对stderr。

duration

持续时间(秒)。

parseoutcomes() → Dict[str, int][源代码]

从分析测试过程产生的终端输出返回结果名词->计数的字典。

返回的名词总是复数形式:

======= 1 failed, 1 passed, 1 warning, 1 error in 0.13s ====

会回来的 {{"failed": 1, "passed": 1, "warnings": 1, "errors": 1}} .

classmethod parse_summary_nouns(lines) → Dict[str, int][源代码]

从pytest终端摘要行提取名词。

它总是返回复数名词以保持一致性:

======= 1 failed, 1 passed, 1 warning, 1 error in 0.13s ====

会回来的 {{"failed": 1, "passed": 1, "warnings": 1, "errors": 1}} .

assert_outcomes(passed: int = 0, skipped: int = 0, failed: int = 0, errors: int = 0, xpassed: int = 0, xfailed: int = 0)None[源代码]

断言指定的结果在测试运行的文本输出中以相应的数字出现(0表示没有出现)。

class LineMatcher[源代码]

灵活匹配文本。

这是一个方便的类,用于测试像命令输出这样的大文本。

构造器获取一个没有尾随新行的行列表,即 text.splitlines() .

__str__()str[源代码]

返回整个原始文本。

6.2 新版功能: 你可以使用 str() 在旧版本中。

fnmatch_lines_random(lines2: Sequence[str])None[源代码]

检查输出中以任何顺序存在的行(使用 fnmatch.fnmatch()

re_match_lines_random(lines2: Sequence[str])None[源代码]

检查输出中以任何顺序存在的行(使用 re.match()

get_lines_after(fnline: str) → Sequence[str][源代码]

返回文本中给定行之后的所有行。

给定行可以包含全局通配符。

fnmatch_lines(lines2: Sequence[str], *, consecutive: bool = False)None[源代码]

检查输出中存在的行(使用 fnmatch.fnmatch()

参数是必须匹配并且可以使用glob通配符的行的列表。如果它们不匹配pytest.失败()被调用。匹配和不匹配也显示为错误消息的一部分。

参数
  • lines2 -- 要匹配的字符串模式。

  • consecutive -- 连续匹配线条?

re_match_lines(lines2: Sequence[str], *, consecutive: bool = False)None[源代码]

检查输出中存在的行(使用 re.match()

参数是必须使用匹配的行的列表 re.match . 如果它们不匹配,则调用pytest.fail()。

匹配和不匹配也显示为错误消息的一部分。

参数
  • lines2 -- 要匹配的字符串模式。

  • consecutive -- 连续匹配线条?

no_fnmatch_line(pat: str)None[源代码]

确保捕获的行与给定的模式不匹配,使用 fnmatch.fnmatch .

参数

pat (str) -- 匹配线条的图案。

no_re_match_line(pat: str)None[源代码]

确保捕获的行与给定的模式不匹配,使用 re.match .

参数

pat (str) -- 匹配行的正则表达式。

str()str[源代码]

返回整个原始文本。

class HookRecorder[源代码]

记录插件管理器中调用的所有挂钩。

这包装了插件管理器中的所有挂钩调用,在传播正常调用之前记录每个调用。

matchreport(inamepart: str = '', names: Union[str, Iterable[str]] = ('pytest_runtest_logreport', 'pytest_collectreport'), when: Optional[str] = None) → Union[_pytest.reports.CollectReport, _pytest.reports.TestReport][源代码]

返回虚线导入路径匹配的测试报告。

测试数据

相同的 pytester ,但是提供一个实例,该实例的方法返回遗留版本。 py.path.local 对象,而不是在适用的情况下。

新代码应避免使用 testdir 赞成 pytester .

final class Testdir[源代码]

类似 Pytester ,但是这个类使用遗留的py.path.local对象。

All methods just forward to an internal Pytester instance, converting results to py.path.local objects as necessary.

CLOSE_STDIN

alias of object

exception TimeoutExpired
class Session(*k, **kw)
exception Failed

测试运行失败时发出停止信号。

exception Interrupted

发出测试运行中断的信号。

for ... in collect() → Iterator[Union[_pytest.nodes.Item, _pytest.nodes.Collector]]

返回此集合节点的子级(项和收集器)列表。

classmethod from_config(config: _pytest.config.Config) → _pytest.main.Session
for ... in genitems(node: Union[_pytest.nodes.Item, _pytest.nodes.Collector]) → Iterator[_pytest.nodes.Item]
gethookproxy(fspath: py._path.local.LocalPath)
isinitpath(path: py._path.local.LocalPath)bool
perform_collect(args: Optional[Sequence[str]] = None, genitems: bool = True) → Sequence[Union[_pytest.nodes.Item, _pytest.nodes.Collector]]

执行此会话的收集阶段。

默认情况下会调用此函数 pytest_collection 钩子实现;有关详细信息,请参阅该钩子的文档。出于测试目的,也可以直接调用 Session .

此函数通常递归地将从会话收集的所有收集器扩展到它们的项,并且只返回项。出于测试目的,可以通过 genitems=False ,在这种情况下,返回值包含这些未展开的收集器,以及 session.items 是空的。

pytest_collectreport(report: Union[_pytest.reports.TestReport, _pytest.reports.CollectReport])None
pytest_collectstart()None
pytest_runtest_logreport(report: Union[_pytest.reports.TestReport, _pytest.reports.CollectReport])None
tmpdir

执行测试的临时目录。

make_hook_recorder(pluginmanager)_pytest.pytester.HookRecorder[源代码]

Pytester.make_hook_recorder() .

chdir()None[源代码]

Pytester.chdir() .

finalize()None[源代码]

Pytester._finalize() .

makefile(ext, *args, **kwargs) → py._path.local.LocalPath[源代码]

Pytester.makefile() .

makeconftest(source) → py._path.local.LocalPath[源代码]

Pytester.makeconftest() .

makeini(source) → py._path.local.LocalPath[源代码]

Pytester.makeini() .

getinicfg(source: str) → iniconfig.SectionWrapper[源代码]

Pytester.getinicfg() .

makepyprojecttoml(source) → py._path.local.LocalPath[源代码]

Pytester.makepyprojecttoml() .

makepyfile(*args, **kwargs) → py._path.local.LocalPath[源代码]

Pytester.makepyfile() .

maketxtfile(*args, **kwargs) → py._path.local.LocalPath[源代码]

Pytester.maketxtfile() .

syspathinsert(path=None)None[源代码]

Pytester.syspathinsert() .

mkdir(name) → py._path.local.LocalPath[源代码]

Pytester.mkdir() .

mkpydir(name) → py._path.local.LocalPath[源代码]

Pytester.mkpydir() .

copy_example(name=None) → py._path.local.LocalPath[源代码]

Pytester.copy_example() .

getnode(config: _pytest.config.Config, arg) → Optional[Union[_pytest.nodes.Item, _pytest.nodes.Collector]][源代码]

Pytester.getnode() .

getpathnode(path)[源代码]

Pytester.getpathnode() .

genitems(colitems: List[Union[_pytest.nodes.Item, _pytest.nodes.Collector]]) → List[_pytest.nodes.Item][源代码]

Pytester.genitems() .

runitem(source)[源代码]

Pytester.runitem() .

inline_runsource(source, *cmdlineargs)[源代码]

Pytester.inline_runsource() .

inline_genitems(*args)[源代码]

Pytester.inline_genitems() .

inline_run(*args, plugins=(), no_reraise_ctrlc: bool = False)[源代码]

Pytester.inline_run() .

runpytest_inprocess(*args, **kwargs)_pytest.pytester.RunResult[源代码]

Pytester.runpytest_inprocess() .

runpytest(*args, **kwargs)_pytest.pytester.RunResult[源代码]

Pytester.runpytest() .

parseconfig(*args)_pytest.config.Config[源代码]

Pytester.parseconfig() .

parseconfigure(*args)_pytest.config.Config[源代码]

Pytester.parseconfigure() .

getitem(source, funcname='test_func')[源代码]

Pytester.getitem() .

getitems(source)[源代码]

Pytester.getitems() .

getmodulecol(source, configargs=(), withinit=False)[源代码]

Pytester.getmodulecol() .

collect_by_name(modcol: _pytest.nodes.Collector, name: str) → Optional[Union[_pytest.nodes.Item, _pytest.nodes.Collector]][源代码]

Pytester.collect_by_name() .

popen(cmdargs, stdout: Union[int, TextIO] = -1, stderr: Union[int, TextIO] = -1, stdin=<class 'object'>, **kw)[源代码]

Pytester.popen() .

run(*cmdargs, timeout=None, stdin=<class 'object'>)_pytest.pytester.RunResult[源代码]

Pytester.run() .

runpython(script)_pytest.pytester.RunResult[源代码]

Pytester.runpython() .

runpython_c(command)[源代码]

Pytester.runpython_c() .

runpytest_subprocess(*args, timeout=None)_pytest.pytester.RunResult[源代码]

Pytester.runpytest_subprocess() .

spawn_pytest(string: str, expect_timeout: float = 10.0) → pexpect.spawn[源代码]

Pytester.spawn_pytest() .

spawn(cmd: str, expect_timeout: float = 10.0) → pexpect.spawn[源代码]

Pytester.spawn() .

重述

教程使用警告功能断言警告

recwarn()[源代码]

返回A WarningsRecorder 记录测试函数发出的所有警告的实例。

有关警告类别的信息,请参阅http://docs.python.org/library/warnings.html。

class WarningsRecorder[源代码]

要记录的上下文管理器引发了警告。

改编自 warnings.catch_warnings .

list

记录的警告列表。

pop(cls: Type[Warning] = <class 'Warning'>) → warnings.WarningMessage[源代码]

弹出第一个记录的警告,如果不存在则引发异常。

clear()None[源代码]

清除记录的警告列表。

每个记录的警告都是 warnings.WarningMessage .

注解

DeprecationWarningPendingDeprecationWarning 被区别对待;见 确保代码触发拒绝警告 .

tmp_path

教程临时目录和文件

tmp_path()[源代码]

返回一个临时目录路径对象,该对象对于每个测试函数调用都是唯一的,创建为基本临时目录的子目录。

默认情况下,每个测试会话都会创建一个新的基本临时目录,并在3个会话之后删除旧的基本目录,以帮助调试。如果 --basetemp 则它将在每个会话中被清除。看见 默认的基本临时目录 .

返回的对象是 pathlib.Path 对象。

tmp_path_factory

教程这个 tmp_path_factory 固定装置

tmp_path_factory 是的实例 TempPathFactory

final class TempPathFactory[源代码]

公共基本临时目录下临时目录的工厂。

基目录可以使用 --basetemp 选择权。

tmpdir

教程临时目录和文件

tmpdir()[源代码]

返回一个临时目录路径对象,该对象对于每个测试函数调用都是唯一的,创建为基本临时目录的子目录。

默认情况下,每个测试会话都会创建一个新的基本临时目录,并在3个会话之后删除旧的基本目录,以帮助调试。如果 --basetemp 则它将在每个会话中被清除。看见 默认的基本临时目录 .

返回的对象是 py.path.local 路径对象。

tmpdir_factory

教程“'tmpdir_factory'夹具

tmp_path_factory 是的实例 TempdirFactory

final class TempdirFactory[源代码]

实现以下功能的向后可压缩性包装器 :class:``py.path.local` 用于 :class:``TempPathFactory '.

钩子

教程编写插件 .

引用所有可以通过 conftest.py filesplugins .

引导挂钩

引导挂钩调用了足够早注册的插件(内部插件和安装工具插件)。

pytest_load_initial_conftests(early_config: Config, parser: Parser, args: List[str])None[源代码]

调用以在命令行选项解析之前实现初始conftest文件的加载。

注解

这个钩子不用了 conftest.py 文件,仅用于安装工具插件。

参数
pytest_cmdline_preparse(config: Config, args: List[str])None[源代码]

已弃用 )在选项分析之前修改命令行参数。

此挂钩被视为已弃用,将在将来的pytest版本中删除。考虑使用 pytest_load_initial_conftests() 相反。

注解

这个钩子不用了 conftest.py 文件,仅用于安装工具插件。

参数
pytest_cmdline_parse(pluginmanager: PytestPluginManager, args: List[str]) → Optional[Config][源代码]

返回初始化的配置对象,解析指定的参数。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .

注解

仅对传递给 plugins 当使用时 pytest.main 执行进程内测试运行。

参数
pytest_cmdline_main(config: Config) → Optional[Union[ExitCode, int]][源代码]

调用以执行主命令行操作。默认实现将调用configure hooks和runtestu mainloop。

注解

这个钩子不用了 conftest.py 文件,仅用于安装工具插件。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .

参数

config (_pytest.config.Config) -- pytest配置对象。

初始化挂钩

为插件和 conftest.py 文件夹。

pytest_addoption(parser: Parser, pluginmanager: PytestPluginManager)None[源代码]

注册argparse样式选项和ini样式配置值,在测试运行开始时调用一次。

注解

此功能只能在插件或 conftest.py 由于pytest discovers plugins during startup .

参数

以后可以通过 config 对象,分别为:

配置对象通过 .config 属性或可以作为 pytestconfig 固定装置。

注解

这个钩子与 hookwrapper=True .

pytest_addhooks(pluginmanager: PytestPluginManager)None[源代码]

在插件注册时调用,以允许通过调用 pluginmanager.add_hookspecs(module_or_class, prefix) .

参数

pluginmanager (_pytest.config.PytestPluginManager) -- pytest插件管理器。

注解

这个钩子与 hookwrapper=True .

pytest_configure(config: Config)None[源代码]

允许插件和conftest文件执行初始配置。

在解析命令行选项之后,会为每个插件和初始conftest文件调用这个钩子。

之后,在导入其他conftest文件时调用钩子。

注解

这个钩子与 hookwrapper=True .

参数

config (_pytest.config.Config) -- pytest配置对象。

pytest_unconfigure(config: Config)None[源代码]

在退出测试进程之前调用。

参数

config (_pytest.config.Config) -- pytest配置对象。

pytest_sessionstart(session: Session)None[源代码]

Session 对象已创建,在执行收集和进入运行测试循环之前。

参数

session (pytest.Session) -- pytest会话对象。

pytest_sessionfinish(session: Session, exitstatus: Union[int, ExitCode])None[源代码]

在整个测试运行完成后,在将退出状态返回到系统之前调用。

参数
  • session (pytest.Session) -- pytest会话对象。

  • exitstatus (int) -- pytest将返回到系统的状态。

pytest_plugin_registered(plugin: _PluggyPlugin, manager: PytestPluginManager)None[源代码]

注册了一个新的pytest插件。

参数

注解

这个钩子与 hookwrapper=True .

收集挂钩

pytest 调用以下挂钩以收集文件和目录:

pytest_collection(session: Session) → Optional[object][源代码]

为给定会话执行收集阶段。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 . 不使用返回值,但只会停止进一步的处理。

默认的收集阶段是这样的(有关完整的详细信息,请参见各个钩子):

  1. 从开始 session 作为初始收集器:

  1. pytest_collectstart(collector)

  2. report = pytest_make_collect_report(collector)

  3. pytest_exception_interact(collector, call, report) 如果发生交互异常

  4. 对于每个收集的节点:

  1. 如果是一个项目, pytest_itemcollected(item)

  2. 如果是收集器,则递归到它。

  1. pytest_collectreport(report)

  1. pytest_collection_modifyitems(session, config, items)

  1. pytest_deselected(items) 对于任何取消选择的项目(可以多次调用)

  1. pytest_collection_finish(session)

  2. 集合 session.items 到收集的项目列表中

  3. 集合 session.testscollected 收集到的项目数

您可以实现这个钩子来只在收集之前执行一些操作,例如终端插件使用它来开始显示收集计数器(并返回 None

参数

session (pytest.Session) -- pytest会话对象。

pytest_ignore_collect(path: py._path.local.LocalPath, config: Config) → Optional[bool][源代码]

正在考虑返回True以阻止此集合。

在调用更具体的钩子之前,将查询所有文件和目录的钩子。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .

参数
pytest_collect_file(path: py._path.local.LocalPath, parent: Collector) → Optional[Collector][源代码]

为给定路径创建一个收集器,如果不相关,则不创建收集器。

新节点需要具有指定的 parent 作为父母。

参数

path (py.path.local) -- 收集的路径。

pytest_pycollect_makemodule(path: py._path.local.LocalPath, parent) → Optional[Module][源代码]

返回给定路径的模块收集器或无。

将为每个匹配的测试模块路径调用此钩子。如果要为与测试模块不匹配的文件创建测试模块,则需要使用pytest_collect_file钩子。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .

参数

path (py.path.local) -- 要收集的模块的路径。

为了影响Python模块中对象的集合,可以使用以下钩子:

pytest_pycollect_makeitem(collector: PyCollector, name: str, obj: object) → Union[None, Item, Collector, List[Union[Item, Collector]]][源代码]

返回模块中Python对象的自定义项/收集器,或无。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .

pytest_generate_tests(metafunc: Metafunc)None[源代码]

生成对测试函数的(多个)参数化调用。

pytest_make_parametrize_id(config: Config, val: object, argname: str) → Optional[str][源代码]

返回给定的用户友好的字符串表示形式 val 将由@pytest.mark.parametrize打电话,如果钩子不知道 val .

参数名称可用作 argname 如果需要的话。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .

参数
  • config (_pytest.config.Config) -- pytest配置对象。

  • val -- 参数化值。

  • argname (str) -- pytest生成的自动参数名。

收集完成后,您可以修改项目顺序、删除或修改测试项目:

pytest_collection_modifyitems(session: Session, config: Config, items: List[Item])None[源代码]

在执行收集后调用。可以过滤或重新排序。

参数

注解

如果此挂接是在 conftest.py 文件时,它始终接收所有收集的项,而不仅仅是 conftest.py 它在哪里实施。

pytest_collection_finish(session: Session)None[源代码]

在执行和修改收集后调用。

参数

session (pytest.Session) -- pytest会话对象。

测试运行(运行测试)挂钩

所有与运行测试相关的挂钩都将收到 pytest.Item 对象。

pytest_runtestloop(session: Session) → Optional[object][源代码]

执行主运行测试循环(在收集完成后)。

默认的钩子实现对会话中收集的所有项执行runtest协议 (session.items ),除非收集失败或 collectonly 设置了pytest选项。

如果在任何时候 pytest.exit() 调用时,循环立即终止。

如果在任何时候 session.shouldfailsession.shouldstop ,则在当前项的runtest协议完成后终止循环。

参数

session (pytest.Session) -- pytest会话对象。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 . 不使用返回值,但只会停止进一步的处理。

pytest_runtest_protocol(item: Item, nextitem: Optional[Item]) → Optional[object][源代码]

对单个测试项执行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)

参数
  • item -- 对其执行runtest协议的测试项。

  • nextitem -- 预定的下一个测试项目(或者没有,如果这是结束我的朋友)。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 . 不使用返回值,但只会停止进一步的处理。

pytest_runtest_logstart(nodeid: str, location: Tuple[str, Optional[int], str])None[源代码]

在为单个项运行runtest协议开始时调用。

pytest_runtest_protocol() 有关runtest协议的说明。

参数
  • nodeid (str) -- 项的完整节点ID。

  • location -- 一个元组 (filename, lineno, testname) .

pytest_runtest_logfinish(nodeid: str, location: Tuple[str, Optional[int], str])None[源代码]

在运行单个项的runtest协议结束时调用。

pytest_runtest_protocol() 有关runtest协议的说明。

参数
  • nodeid (str) -- 项的完整节点ID。

  • location -- 一个元组 (filename, lineno, testname) .

pytest_runtest_setup(item: Item)None[源代码]

调用以执行测试项的设置阶段。

默认实现运行 setup()item 以及它的所有父对象(尚未设置)。这包括获取项目所需的固定装置值(尚未获得)。

pytest_runtest_call(item: Item)None[源代码]

调用以运行测试项的测试(调用阶段)。

默认实现调用 item.runtest() .

pytest_runtest_teardown(item: Item, nextitem: Optional[Item])None[源代码]

调用以执行测试项的拆卸阶段。

默认实现运行终结器和调用 teardown()item 以及它所有的父母(需要拆掉)。这包括运行项目所需的固定装置的拆卸阶段(如果它们超出范围)。

参数

nextitem -- 计划作为下一个测试项目(如果没有计划进一步的测试项目,则无)。此参数可用于执行精确的拆分,即调用足够的终结器,以便nextitem只需调用设置函数。

pytest_runtest_makereport(item: Item, call: CallInfo[None]) → Optional[TestReport][源代码]

调用以创建 _pytest.reports.TestReport 对于测试项的每个安装、调用和拆卸runtest阶段。

pytest_runtest_protocol() 有关runtest协议的说明。

参数

call (CallInfo[None]) -- 这个 CallInfo 对于这个阶段。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .

为了更深入地了解,您可以查看这些钩子的默认实现 _pytest.runner 也可能在 _pytest.pdb 它与 _pytest.capture 以及它的输入/输出捕获,以便在测试失败时立即进入交互式调试。

pytest_pyfunc_call(pyfuncitem: Function) → Optional[object][源代码]

调用底层测试函数。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .

报告挂钩

与会话相关的报告挂钩:

pytest_collectstart(collector: Collector)None[源代码]

收集器开始收集。

pytest_make_collect_report(collector: Collector) → Optional[CollectReport][源代码]

表演 collector.collect() 并返回一个CollectReport。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .

pytest_itemcollected(item: Item)None[源代码]

我们刚收集了一个测试项目。

pytest_collectreport(report: CollectReport)None[源代码]

收藏家收集完毕。

pytest_deselected(items: Sequence[Item])None[源代码]

调用取消选择的测试项,例如按关键字。

可以多次调用。

pytest_report_header(config: Config, startdir: py._path.local.LocalPath) → Union[str, List[str]][源代码]

返回要显示为终端报告标题信息的字符串或字符串列表。

参数

注解

插件返回的行显示在它之前运行的插件的行之前。如果要先显示行,请使用 trylast=True .

注解

此功能只能在插件或 conftest.py 由于pytest discovers plugins during startup .

pytest_report_collectionfinish(config: Config, startdir: py._path.local.LocalPath, items: Sequence[Item]) → Union[str, List[str]][源代码]

返回要在成功完成收集后显示的字符串或字符串列表。

这些字符串将显示在标准的“收集的X项”消息之后。

3.2 新版功能.

参数
  • config (_pytest.config.Config) -- pytest配置对象。

  • startdir (py.path.local) -- 起始方向。

  • items -- 将要执行的pytest项的列表;不应修改此列表。

注解

插件返回的行显示在它之前运行的插件的行之前。如果要先显示行,请使用 trylast=True .

pytest_report_teststatus(report: Union[CollectReport, TestReport], config: Config) → Tuple[str, str, Union[str, Mapping[str, bool]]][源代码]

返回结果类别,状态报告的短字母和详细单词。

结果类别是对结果进行计数的类别,例如“通过”、“跳过”、“错误”或空字符串。

在测试过程中会显示短字母,例如“.”、“s”、“E”或空字符串。

在详细模式下,随着测试的进行,将显示详细单词,例如“PASSED”、“SKIPPED”、“ERROR”或空字符串。

pytest可以根据报告结果隐式地设置这些样式。例如,要提供显式样式,请返回详细单词的元组 "rerun", "R", ("RERUN", {{"yellow": True}}) .

参数

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .

pytest_terminal_summary(terminalreporter: TerminalReporter, exitstatus: ExitCode, config: Config)None[源代码]

在终端摘要报告中添加一节。

参数
  • terminalreporter (_pytest.terminal.TerminalReporter) -- 内部终端报告器对象。

  • exitstatus (int) -- 将向操作系统报告的退出状态。

  • config (_pytest.config.Config) -- pytest配置对象。

4.2 新版功能: 这个 config 参数。

pytest_fixture_setup(fixturedef: FixtureDef[Any], request: SubRequest) → Optional[object][源代码]

执行夹具设置。

返回

fixture函数调用的返回值。

在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .

注解

如果fixture函数返回none,则将根据 第一个结果:在第一个非无结果处停止 选择权。

pytest_fixture_post_finalizer(fixturedef: FixtureDef[Any], request: SubRequest)None[源代码]

在fixture teardown之后,但在清除缓存之前调用,因此fixture结果 fixturedef.cached_result 仍然可用(不可用 None

pytest_warning_captured(warning_message: warnings.WarningMessage, when: Literal['config', 'collect', 'runtest'], item: Optional[Item], location: Optional[Tuple[str, int, str]])None[源代码]

已弃用 )处理由内部pytest warnings插件捕获的警告。

6.0 版后已移除.

这个钩子被认为是不推荐使用的,将在将来的pytest版本中删除。使用 pytest_warning_recorded() 相反。

参数
  • warning_message (warnings.WarningMessage) -- 捕获的警告。这是由 warnings.catch_warnings() ,并包含与的参数相同的属性 warnings.showwarning() .

  • when (str) -- 指示捕获警告的时间。可能值: * "config": during pytest configuration/initialization stage. * "collect" :在测试收集期间。* "runtest" :测试执行期间。

  • item (pytest.Item|None) -- 如果 when"runtest" ,否则 None .

  • location (tuple) -- 如果可用,则保存有关捕获的警告(文件名、行号、函数)的执行上下文的信息。 function 当执行上下文在模块级别时,计算结果为<module>。

pytest_warning_recorded(warning_message: warnings.WarningMessage, when: Literal['config', 'collect', 'runtest'], nodeid: str, location: Optional[Tuple[str, int, str]])None[源代码]

处理内部pytest warnings插件捕获的警告。

参数
  • warning_message (warnings.WarningMessage) -- 捕获的警告。这是由 warnings.catch_warnings() ,并包含与的参数相同的属性 warnings.showwarning() .

  • when (str) -- 指示捕获警告的时间。可能值: * "config": during pytest configuration/initialization stage. * "collect" :在测试收集期间。* "runtest" :测试执行期间。

  • nodeid (str) -- 项目的完整id。

  • location (tuple|None) -- 如果可用,则保存有关捕获的警告(文件名、行号、函数)的执行上下文的信息。 function 当执行上下文在模块级别时,计算结果为<module>。

6.0 新版功能.

用于报告测试执行的中央挂钩:

pytest_runtest_logreport(report: TestReport)None[源代码]

处理 _pytest.reports.TestReport 为项目的每个安装、调用和拆卸运行测试阶段生成。

pytest_runtest_protocol() 有关runtest协议的说明。

断言相关挂钩:

pytest_assertrepr_compare(config: Config, op: str, left: object, right: object) → Optional[List[str]][源代码]

返回失败的断言表达式中比较的说明。

如果没有自定义解释,则返回None,否则返回字符串列表。字符串将由换行符连接,但任何换行符 in 字符串将被转义。请注意,除第一行外,所有行都将稍微缩进,其目的是将第一行作为摘要。

参数

config (_pytest.config.Config) -- pytest配置对象。

pytest_assertion_pass(item: Item, lineno: int, orig: str, expl: str)None[源代码]

(实验性) 每当断言通过时调用。

5.0 新版功能.

使用这个钩子在传递断言之后进行一些处理。原始断言信息可在 orig 字符串和pytest自省断言信息可在 expl 字符串。

此钩子必须由 enable_assertion_pass_hook ini文件选项:

[pytest]
enable_assertion_pass_hook=true

你需要 清理.pyc 启用此选项时,项目目录和解释器库中的文件,因为将需要重新编写断言。

参数
  • item (pytest.Item) -- 当前测试的pytest item对象。

  • lineno (int) -- assert语句的行号。

  • orig (str) -- 带有原始断言的字符串。

  • expl (str) -- 带有assert解释的字符串。

注解

这个钩子是 实验的 ,因此在将来的pytest版本中,可能会在没有警告的情况下更改/删除其参数甚至钩子本身。

如果你觉得这个钩子有用,请在某个问题上分享你的反馈。

调试/交互挂钩

很少有钩子可用于特殊报告或交互,但有例外:

pytest_internalerror(excrepr: ExceptionRepr, excinfo: ExceptionInfo[BaseException]) → Optional[bool][源代码]

要求内部错误。

Return True可禁止将INTERNALERROR消息直接打印到的回退处理系统标准.

pytest_keyboard_interrupt(excinfo: ExceptionInfo[Union[KeyboardInterrupt, Exit]])None[源代码]

要求键盘中断。

pytest_exception_interact(node: Union[Item, Collector], call: CallInfo[Any], report: Union[CollectReport, TestReport])None[源代码]

当引发可交互处理的异常时调用。

可在收集期间调用(请参阅 pytest_make_collect_report() ),在这种情况下 report 是一个 _pytest.reports.CollectReport .

在项目的运行测试期间调用(请参阅 pytest_runtest_protocol() ),在这种情况下 report 是一个 _pytest.reports.TestReport .

如果引发的异常是内部异常,则不调用此钩子 skip.Exception .

pytest_enter_pdb(config: Config, pdb: pdb.Pdb)None[源代码]

号召pdb.set_跟踪().

可以被插件用来在python调试器进入交互模式之前执行特殊操作。

参数

物体

完全引用可从访问的对象 fixtureshooks .

等级

class Class[源代码]

基类:_pytest.python.PyCollector

试验方法收集器。

classmethod from_parent(parent, *, name, obj=None)[源代码]

公共构造函数。

collect() → Iterable[Union[_pytest.nodes.Item, _pytest.nodes.Collector]][源代码]

返回此集合节点的子级(项和收集器)列表。

收藏家

class Collector[源代码]

基类:_pytest.nodes.Node

收集器实例通过collect()创建子级,从而迭代地构建树。

exception CollectError[源代码]

基类:Exception

收集期间出错,包含自定义消息。

collect() → Iterable[Union[_pytest.nodes.Item, _pytest.nodes.Collector]][源代码]

返回此集合节点的子级(项和收集器)列表。

repr_failure(excinfo: _pytest._code.code.ExceptionInfo[BaseException]) → Union[str, _pytest._code.code.TerminalRepr][源代码]

返回失败的集合。

参数

excinfo -- 失败的异常信息。

CollectReport

final class CollectReport[源代码]

基类:_pytest.reports.BaseReport

集合报表对象。

nodeid: str

规范化集合节点ID。

outcome

测试结果,总是“通过”、“失败”、“跳过”之一。

longrepr: Union[None, _pytest._code.code.ExceptionInfo[BaseException], Tuple[str, int, str], str, _pytest._code.code.TerminalRepr]

无或故障表示。

result

收集的项和集合节点。

caplog

如果启用了日志捕获,则返回捕获的日志行。

3.5 新版功能.

capstderr

如果启用了捕获,则从stderr返回捕获的文本。

3.0 新版功能.

capstdout

如果启用了捕获,则从stdout返回捕获的文本。

3.0 新版功能.

count_towards_summary

实验 该报告是否应计入测试结束时显示的总数:“1个通过,1个失败,等等”。

注解

考虑到该功能 实验的 ,因此请注意,即使在补丁发布中,它也会发生变化。

head_line

实验 此报告的longrepr输出中显示的标题行,通常在失败期间的回溯表示期间:

________ Test.foo ________

在上面的例子中,head_行是“test.foo”。

注解

考虑到该功能 实验的 ,因此请注意,即使在补丁发布中,它也会发生变化。

longreprtext

只读属性,返回 longrepr .

3.0 新版功能.

配置

final class Config[源代码]

访问配置值、pluginmanager和plugin hooks。

参数
final class InvocationParams(args, plugins: Optional[Sequence[Union[str, object]]], dir: pathlib.Path)[源代码]

保存期间传递的参数 pytest.main() .

对象属性是只读的。

5.1 新版功能.

注解

请注意,环境变量 PYTEST_ADDOPTS 以及 addopts ini选项由pytest处理,不包含在 args 属性。

插件访问 InvocationParams 必须意识到这一点。

args

传递给的命令行参数 pytest.main() .

类型

元组 [str。。。]

plugins

额外的插件,可能是 None .

类型

可选的 [序列[Union[str,plugin] ] ]

dir

从哪个目录 pytest.main() 已调用。

类型

pathlib.Path

option

作为属性访问命令行选项。

类型

argparse.Namespace

invocation_params

调用pytest所用的参数。

类型

InvocationParams

pluginmanager

插件管理器处理插件注册和钩子调用。

类型

PytestPluginManager

invocation_dir

从中调用pytest的目录。

喜欢使用 invocation_params.dir ,这是一个 pathlib.Path .

类型

py.path.local

rootpath

通往那条路的路 rootdir .

类型

pathlib.Path

6.1 新版功能.

rootdir

通往那条路的路 rootdir .

喜欢使用 rootpath ,这是一个 pathlib.Path .

类型

py.path.local

inipath

通往那条路的路 configfile .

类型

Optional[pathlib.Path]

6.1 新版功能.

inifile

通往那条路的路 configfile .

喜欢使用 inipath ,这是一个 pathlib.Path .

类型

Optional[py.path.local]

add_cleanup(func: Callable[], None])None[源代码]

添加一个在配置对象停止使用时要调用的函数(通常是与pytest_unconfigure并置)。

classmethod fromdictargs(option_dict, args)_pytest.config.Config[源代码]

可用于子进程的构造函数。

for ... in pytest_collection() → Generator[None, None, None][源代码]

收集完成后验证无效的ini键,因此我们考虑到延迟加载conftest文件所添加的选项。

issue_config_time_warning(warning: Warning, stacklevel: int)None[源代码]

在“配置”阶段发出并处理警告。

期间 pytest_configure 我们无法使用 catch_warnings_for_item 函数,因为不可能有钩子包装 pytest_configure .

此函数主要用于需要在 pytest_configure (或类似阶段)。

参数
  • warning -- 警告实例。

  • stacklevel -- 堆栈级别转发到警告。警告.

addinivalue_line(name: str, line: str)None[源代码]

在ini文件选项中添加一行。该选项必须已声明,但可能尚未设置,在这种情况下,该行将成为其值中的第一行。

getini(name: str)[源代码]

从返回配置值 ini file .

如果指定的名称尚未通过 parser.addini 调用(通常来自插件),会引发ValueError。

getoption(name: str, default=<NOTSET>, skip: bool = False)[源代码]

返回命令行选项值。

参数
  • name -- 选项的名称。您也可以指定文字 --OPT 选项而不是“dest”选项名。

  • default -- 如果不存在该名称的选项,则为默认值。

  • skip -- 如果是真的,提高pytest.跳过如果选项不存在或没有值。

getvalue(name: str, path=None)[源代码]

已弃用,请改用getoption()。

getvalueorskip(name: str, path=None)[源代码]

已弃用,请改用getoption(skip=True)。

ExceptionInfo

final class ExceptionInfo(excinfo: Optional[Tuple[Type[_E], _E, traceback]], striptext: str = '', traceback: Optional[_pytest._code.code.Traceback] = None)[源代码]

包裹系统执行信息()对象,并提供导航回溯的帮助。

classmethod from_exc_info(exc_info: Tuple[Type[_E], _E, traceback], exprinfo: Optional[str] = None) → _pytest._code.code.ExceptionInfo[_E][源代码]

返回现有excu info元组的ExceptionInfo。

警告

实验原料药

参数

exprinfo -- 一个文本字符串,帮助确定是否应该剥离 AssertionError 从输出。默认为异常消息/``uu str_uu3;()`

classmethod from_current(exprinfo: Optional[str] = None) → _pytest._code.code.ExceptionInfo[BaseException][源代码]

返回与当前回溯匹配的ExceptionInfo。

警告

实验原料药

参数

exprinfo -- 一个文本字符串,帮助确定是否应该剥离 AssertionError 从输出。默认为异常消息/``uu str_uu3;()`

classmethod for_later() → _pytest._code.code.ExceptionInfo[_E][源代码]

返回未填充的ExceptionInfo。

fill_unfilled(exc_info: Tuple[Type[_E], _E, traceback])None[源代码]

填充用创建的未填充的ExceptionInfo for_later() .

type

异常类。

value

异常值。

tb

异常原始回溯。

typename

异常的类型名称。

traceback

回溯。

exconly(tryshort: bool = False)str[源代码]

以字符串形式返回异常。

当“tryshort”解析为True,并且异常是一个_pytest.u code.u AssertionError时,只返回异常表示的实际异常部分(因此“AssertionError:”从一开始就被删除)。

errisinstance(exc: Union[Type[BaseException], Tuple[Type[BaseException], ...]])bool[源代码]

如果异常是exc的实例,则返回True。

考虑使用 isinstance(excinfo.value, exc) 相反。

getrepr(showlocals: bool = False, style: _TracebackStyle = 'long', abspath: bool = False, tbfilter: bool = True, funcargs: bool = False, truncate_locals: bool = True, chain: bool = True) → Union[ReprExceptionInfo, ExceptionChainRepr][源代码]

返回此异常信息的str()表形式。

参数
  • showlocals (bool) -- 显示每个回溯条目的局部变量。忽略如果 style=="native" .

  • style (str) -- 长的 |short||native| 值回溯样式。

  • abspath (bool) -- 如果路径应更改为绝对路径或保持不变。

  • tbfilter (bool) -- 隐藏包含局部变量的条目 __tracebackhide__==True . 忽略如果 style=="native" .

  • funcargs (bool) -- 每个追溯条目显示装置(“funcargs”用于遗留目的)。

  • truncate_locals (bool) -- 用 showlocals==True ,确保局部变量可以安全地表示为字符串。

  • chain (bool) -- 应该显示python3中的If-chained异常。

在 3.9 版更改: 增加了 chain 参数。

match(regexp: Union[str, Pattern[str]]) → Literal[True][源代码]

检查正则表达式 regexp 使用匹配异常的字符串表示形式 re.search() .

如果匹配 True 返回,否则返回 AssertionError 提高了。

ExitCode

final class ExitCode(value)[源代码]

通过pytest对有效的退出代码进行编码。

目前用户和插件也可能提供其他退出代码。

5.0 新版功能.

OK = 0

测试通过。

TESTS_FAILED = 1

测试失败。

INTERRUPTED = 2

pytest被中断。

INTERNAL_ERROR = 3

一个内部错误挡住了去路。

USAGE_ERROR = 4

pytest被滥用了。

NO_TESTS_COLLECTED = 5

pytest找不到测试。

文件

class File[源代码]

基类:_pytest.nodes.FSCollector

用于从文件收集测试的基类。

使用非python测试 .

FixtureDef

final class FixtureDef[源代码]

基类:Generic[_pytest.fixtures._FixtureValue]

工厂定义的容器。

FSCollector

class FSCollector[源代码]

基类:_pytest.nodes.Collector

classmethod from_parent(parent, *, fspath, **kw)[源代码]

公共构造函数。

功能

class Function[源代码]

基类:_pytest.python.PyobjMixin, _pytest.nodes.Item

负责设置和执行Python测试函数的项。

参数名称:

完整的函数名,包括任何像参数化添加的装饰 (my_func[my_param]

参数父级:

父节点。

参数配置:

pytest配置对象。

参数调用规范:

如果给定,则此is函数已参数化,并且callspec包含有关参数化的元信息。

参数callobj:

如果给定,则为调用函数时将调用的对象,否则将从 parent 使用 originalname .

参数关键字:

为“-k”匹配绑定到函数对象的关键字。

参数会话:

pytest会话对象。

参数fixtureinfo:

夹具信息已在此夹具节点解析。。

参数原始名称:

用于访问基础函数对象的属性名。默认为 name . 如果名称与原始名称不同,请设置此选项,例如,当名称包含参数化添加的装饰时 (my_func[my_param]

originalname

原始函数名,没有任何修饰(例如参数化添加了 "[...]" 函数名后缀),用于从 parent (以防 callobj 没有明确给出)。

3.0 新版功能.

classmethod from_parent(parent, **kw)[源代码]

公共构造函数。

function

底层python“function”对象。

runtest()None[源代码]

执行底层测试函数。

repr_failure(excinfo: _pytest._code.code.ExceptionInfo[BaseException]) → Union[str, _pytest._code.code.TerminalRepr][源代码]

返回集合或测试失败的表示。

参数

excinfo -- 失败的异常信息。

FunctionDefinition

class FunctionDefinition[源代码]

基类:_pytest.python.Function

这个类是一个步骤差距解决方案,直到我们发展到拥有实际的函数定义节点并设法去掉 metafunc .

runtest()None[源代码]

执行底层测试函数。

setup()None

执行底层测试函数。

项目

class Item[源代码]

基类:_pytest.nodes.Node

一个基本的测试调用项。

请注意,对于单个函数,可能存在多个测试调用项。

user_properties: List[Tuple[str, object]]

保存此测试的用户定义属性的元组(名称、值)列表。

add_report_section(when: str, key: str, content: str)None[源代码]

添加一个新的报告部分,类似于在内部添加stdout和stderr捕获的输出:

item.add_report_section("call", "stdout", "report section contents")
参数
  • when (str) -- 可能的捕获状态之一, "setup""call""teardown" .

  • key (str) -- 该部分的名称,可随意定制。皮特斯使用 "stdout""stderr" 内部的。

  • content (str) -- 以字符串形式显示全部内容。

模块

class Module[源代码]

基类:_pytest.nodes.File, _pytest.python.PyCollector

用于测试类和函数的收集器。

collect() → Iterable[Union[_pytest.nodes.Item, _pytest.nodes.Collector]][源代码]

返回此集合节点的子级(项和收集器)列表。

结点

class Node[源代码]

收集器和项的基类,测试集合树的组件。

收集器子类有子类;项是叶节点。

name

父节点范围内的唯一名称。

parent

父收集器节点。

fspath

从中收集此节点的文件系统路径(可以是None)。

keywords

从所有范围收集的关键字/标记。

own_markers: List[_pytest.mark.structures.Mark]

属于此节点的标记对象。

extra_keyword_matches: Set[str]

允许添加用于匹配的额外关键字。

classmethod from_parent(parent: _pytest.nodes.Node, **kw)[源代码]

节点的公共构造函数。

引入这种间接寻址是为了能够从节点构造函数中删除脆弱的逻辑。

子类可以使用 super().from_parent(...) 重写构造时。

参数

parent -- 此节点的父节点。

ihook

用于调用pytest钩子的fspath敏感钩子代理。

warn(warning: Warning)None[源代码]

对此节点发出警告。

除非明确禁止,否则测试会话后将显示警告。

参数

warning (Warning) -- 要发出的警告实例。

引发

ValueError -- 如果 warning 实例不是警告的子类。

示例用法:

node.warn(PytestWarning("some message"))
node.warn(UserWarning("some message"))

在 6.2 版更改: 的任何子类 Warning 现在已被接受,而不仅仅是 PytestWarning 子类。

nodeid

一个::分隔的字符串,表示其集合树地址。

listchain() → List[_pytest.nodes.Node][源代码]

从集合树的根开始,返回所有父收集器的列表,直至自身。

add_marker(marker: Union[str, _pytest.mark.structures.MarkDecorator], append: bool = True)None[源代码]

将标记对象动态添加到节点。

参数

append -- 是追加标记,还是预先添加标记。

iter_markers(name: Optional[str] = None) → Iterator[_pytest.mark.structures.Mark][源代码]

迭代节点的所有标记。

参数

name -- 如果给定,则按name属性过滤结果。

for ... in iter_markers_with_node(name: Optional[str] = None) → Iterator[Tuple[_pytest.nodes.Node, _pytest.mark.structures.Mark]][源代码]

迭代节点的所有标记。

参数

name -- 如果给定,则按name属性过滤结果。

返回

(节点,标记)元组的迭代器。

get_closest_marker(name: str) → Optional[_pytest.mark.structures.Mark][源代码]
get_closest_marker(name: str, default: _pytest.mark.structures.Mark) → _pytest.mark.structures.Mark

返回与名称匹配的第一个标记,从最近的(例如function)到更远的级别(例如module level)。

参数
  • default -- 如果找不到标记,则返回值。

  • name -- 筛选依据的名称。

listextrakeywords() → Set[str][源代码]

返回self和任何父级中所有额外关键字的集合。

addfinalizer(fin: Callable[], object])None[源代码]

注册一个在完成此节点时要调用的函数。

仅当此节点在安装链中处于活动状态时,才能调用此方法,例如在self.setup()期间。

getparent(cls: Type[_NodeType]) → Optional[_NodeType][源代码]

获取下一个父节点(包括self),它是给定类的实例。

repr_failure(excinfo: _pytest._code.code.ExceptionInfo[BaseException], style: Optional[_TracebackStyle] = None) → Union[str, _pytest._code.code.TerminalRepr][源代码]

返回集合或测试失败的表示。

参数

excinfo -- 失败的异常信息。

语法分析器

final class Parser[源代码]

用于命令行参数和ini文件值的分析器。

变量

extra_info -- 在处理命令行参数时出错时要显示的generic param->value的Dict。

getgroup(name: str, description: str = '', after: Optional[str] = None) → _pytest.config.argparsing.OptionGroup[源代码]

获取(或创建)命名选项组。

名称

选项组的名称。

描述

--help输出的详细说明。

之后

另一组的名称,用于排序--帮助输出。

返回的组对象具有 addoption 与具有相同签名的方法 parser.addoption 但将在相应的组中显示 pytest. --help .

addoption(*opts: str, **attrs: Any)None[源代码]

注册命令行选项。

奥普茨

选项名称,可以是短选项或长选项。

阿特斯

相同的属性 add_argument() 功能 argparse library 接受。

在命令行解析之后,可以通过以下方式在pytest config对象上使用选项 config.option.NAME 在哪里? NAME 通常通过传递 dest 例如,属性 addoption("--long", dest="NAME", ...) .

parse_known_args(args: Sequence[Union[str, py._path.local.LocalPath]], namespace: Optional[argparse.Namespace] = None)argparse.Namespace[源代码]

此时解析并返回一个带有已知参数的命名空间对象。

parse_known_and_unknown_args(args: Sequence[Union[str, py._path.local.LocalPath]], namespace: Optional[argparse.Namespace] = None) → Tuple[argparse.Namespace, List[str]][源代码]

解析并返回一个命名空间对象,该对象具有已知参数,其余参数此时未知。

addini(name: str, help: str, type: Optional[Literal['string', 'pathlist', 'args', 'linelist', 'bool']] = None, default=None)None[源代码]

注册ini文件选项。

名称

ini变量的名称。

类型

变量的类型,可以是 stringpathlistargslinelistbool . 默认为 string 如果 None 或者不通过。

违约

如果不存在ini文件选项但被查询,则为默认值。

可以通过调用 config.getini(name) .

PytestPluginManager

final class PytestPluginManager[源代码]

基类:pluggy.manager.PluginManager

A pluggy.PluginManager 使用附加的pytest特定功能:

  • 从命令行加载插件, PYTEST_PLUGINS env变量和 pytest_plugins 在加载的插件中找到全局变量。

  • conftest.py 启动时加载。

parse_hookimpl_opts(plugin: object, name: str)[源代码]
parse_hookspec_opts(module_or_class, name: str)[源代码]
register(plugin: object, name: Optional[str] = None) → Optional[str][源代码]

注册插件并返回其规范名称或 None 如果名字被阻止注册。提高 ValueError 如果插件已经注册。

getplugin(name: str)[源代码]
hasplugin(name: str)bool[源代码]

返回是否注册了具有给定名称的插件。

consider_preparse(args: Sequence[str], *, exclude_only: bool = False)None[源代码]
consider_pluginarg(arg: str)None[源代码]
consider_conftest(conftestmodule: module)None[源代码]
consider_env()None[源代码]
consider_module(mod: module)None[源代码]
import_plugin(modname: str, consider_entry_points: bool = False)None[源代码]

使用导入插件 modname .

如果 consider_entry_points 为真,入口点名称也被视为查找插件。

add_hookcall_monitoring(before, after)

为所有钩子添加before/after跟踪函数,并返回一个撤消函数,调用该函数时,将删除添加的跟踪程序。

before(hook_name, hook_impls, kwargs) 将在所有钩子调用之前调用并接收钩子调用方实例、钩子调用的钩子impl实例列表和关键字参数。

after(outcome, hook_name, hook_impls, kwargs) 接收的参数与 before 而且也是 pluggy.callers._Result 对象,它表示整个钩子调用的结果。

add_hookspecs(module_or_class)

添加在给定的 module_or_class . 如果对函数进行了相应的修饰,则可以识别这些函数。

check_pending()

确认所有未按照吊钩规格进行验证的吊钩都是可选的,否则升起 PluginValidationError .

enable_tracing()

启用钩子调用跟踪并返回一个撤消函数。

get_canonical_name(plugin)

返回插件对象的规范名称。请注意,插件可能注册在不同的名称下,该名称由的调用方指定 register(plugin, name) . 要获取已注册插件的名称,请使用 get_name(plugin) 相反。

get_hookcallers(plugin)

获取指定插件的所有挂钩调用程序。

get_name(plugin)

返回已注册插件的名称或 None 如果没有注册。

get_plugin(name)

返回插件或 None 为了这个名字。

get_plugins()

返回一组已注册的插件。

has_plugin(name)

返回 True 如果注册了具有给定名称的插件。

is_blocked(name)

返回 True 如果给定的插件名称被阻止。

is_registered(plugin)

返回 True 如果插件已经注册。

list_name_plugin()

返回名称/插件对列表。

list_plugin_distinfo()

返回所有安装工具注册插件的distinfo/plugin元组列表。

load_setuptools_entrypoints(group, name=None)

从查询指定的设置工具加载模块 group .

参数
  • group (str) -- 加载插件的入口点组

  • name (str) -- 如果给定,则只加载具有给定 name .

返回类型

int

返回

返回此调用加载的插件数。

set_blocked(name)

阻止给定名称的注册,如果已注册,则取消注册。

subset_hook_caller(name, remove_plugins)

返回一个新的 hooks._HookCaller 指定方法的实例,该方法管理对所有已注册插件的调用(removeu plugins中的插件除外)。

unregister(plugin=None, name=None)

从内部数据结构中注销插件对象及其包含的所有hook实现。

会话

final class Session[源代码]

基类:_pytest.nodes.FSCollector

exception Interrupted

基类:KeyboardInterrupt

发出测试运行中断的信号。

exception Failed

基类:Exception

测试运行失败时发出停止信号。

perform_collect(args: Optional[Sequence[str]] = '...', genitems: Literal[True] = '...') → Sequence[_pytest.nodes.Item][源代码]
perform_collect(args: Optional[Sequence[str]] = '...', genitems: bool = '...') → Sequence[Union[_pytest.nodes.Item, _pytest.nodes.Collector]]

执行此会话的收集阶段。

默认情况下会调用此函数 pytest_collection 钩子实现;有关详细信息,请参阅该钩子的文档。出于测试目的,也可以直接调用 Session .

此函数通常递归地将从会话收集的所有收集器扩展到它们的项,并且只返回项。出于测试目的,可以通过 genitems=False ,在这种情况下,返回值包含这些未展开的收集器,以及 session.items 是空的。

for ... in collect() → Iterator[Union[_pytest.nodes.Item, _pytest.nodes.Collector]][源代码]

返回此集合节点的子级(项和收集器)列表。

TestReport

final class TestReport[源代码]

基类:_pytest.reports.BaseReport

基本测试报告对象(如果失败,也用于安装和拆卸调用)。

nodeid: str

规范化集合节点ID。

location: Optional[Tuple[str, Optional[int], str]]

如果它是从一个文件系统的实际位置继承的,那么它可能是从一个文件系统的实际位置继承的。

keywords

包含与测试调用相关联的所有关键字和标记的名称->值字典。

outcome

测试结果,总是“通过”、“失败”、“跳过”之一。

longrepr: Union[None, _pytest._code.code.ExceptionInfo[BaseException], Tuple[str, int, str], str, _pytest._code.code.TerminalRepr]

无或故障表示。

when: Optional[str]

“setup”、“call”、“teardown”之一指示runtest阶段。

user_properties

User properties是保存测试的用户定义属性的元组(名称、值)列表。

sections: List[Tuple[str, str]]

对列表 (str, str) 需要整理的额外信息。由pytest用于添加捕获的文本 stdoutstderr ,但也可以被其他插件用于向报表添加任意信息。

duration

运行测试所花的时间。

classmethod from_item_and_call(item: _pytest.nodes.Item, call: CallInfo[None])TestReport[源代码]

创建并用标准项和调用信息填充测试报告。

caplog

如果启用了日志捕获,则返回捕获的日志行。

3.5 新版功能.

capstderr

如果启用了捕获,则从stderr返回捕获的文本。

3.0 新版功能.

capstdout

如果启用了捕获,则从stdout返回捕获的文本。

3.0 新版功能.

count_towards_summary

实验 该报告是否应计入测试结束时显示的总数:“1个通过,1个失败,等等”。

注解

考虑到该功能 实验的 ,因此请注意,即使在补丁发布中,它也会发生变化。

head_line

实验 此报告的longrepr输出中显示的标题行,通常在失败期间的回溯表示期间:

________ Test.foo ________

在上面的例子中,head_行是“test.foo”。

注解

考虑到该功能 实验的 ,因此请注意,即使在补丁发布中,它也会发生变化。

longreprtext

只读属性,返回 longrepr .

3.0 新版功能.

_Result

结果使用范围 hook wrappers .

class _Result(result, excinfo)[源代码]
_Result.get_result()[源代码]

获取此挂钩调用的结果。

如果钩子被标记为 firstresult 只返回一个值,否则返回结果列表。

_Result.force_result(result)[源代码]

强制结果为 result .

如果钩子被标记为 firstresult 应设置单个值,否则应设置(修改)结果列表。调用期间发现的任何异常都将被删除。

全局变量

当在测试模块或 conftest.py 文件夹。

collect_ignore

教程自定义测试集合

可以在中声明 conftest.py文件 排除测试目录或模块。需要 list[str] .

collect_ignore = ["setup.py"]
collect_ignore_glob

教程自定义测试集合

可以在中声明 conftest.py文件 用unix shell风格的通配符排除测试目录或模块。需要 list[str] 在哪里? str 可以包含全局模式。

collect_ignore_glob = ["*_ignore.py"]
pytest_plugins

教程在测试模块或conftest文件中要求/加载插件

可以在 全球的 在水平 测试模块conftest.py文件 注册其他插件。可以是一个 strSequence[str] .

pytest_plugins = "myapp.testsupport.myplugin"
pytest_plugins = ("myapp.testsupport.tools", "myapp.testsupport.regression")
pytestmark

教程标记整个类或模块

可以在 全球的 在水平 测试模块 应用一个或多个 marks 所有测试功能和方法。可以是单个标记,也可以是标记列表(按从左到右的顺序应用)。

import pytest

pytestmark = pytest.mark.webtest
import pytest

pytestmark = [pytest.mark.integration, pytest.mark.slow]

环境变量

可用于更改Pytest行为的环境变量。

PYTEST_ADDOPTS

这包含一个命令行(由py:mod:shlex`模块解析),将 **预先准备的** 到用户提供的命令行,请参见 :ref:`adding default options 更多信息。

PYTEST_CURRENT_TEST

这并不意味着由用户设置,而是由pytest在内部使用当前测试的名称进行设置,以便其他进程可以检查它,请参见 PYTEST_CURRENT_TEST 环境变量 更多信息。

PYTEST_DEBUG

设置后,pytest将打印跟踪和调试信息。

PYTEST_DISABLE_PLUGIN_AUTOLOAD

设置后,禁用通过设置工具入口点自动加载插件。只加载显式指定的插件。

PYTEST_PLUGINS

包含应作为插件加载的模块的逗号分隔列表:

export PYTEST_PLUGINS=mymodule.plugin,xdist
PY_COLORS

当设置为 1 ,pytest将在终端输出中使用颜色。设置为时 0 ,pytest将不使用颜色。 PY_COLORS 优先于 NO_COLORFORCE_COLOR .

NO_COLOR

设置后(不管值如何),pytest将不在终端输出中使用颜色。 PY_COLORS takes precedence over NO_COLOR, which takes precedence over FORCE_COLOR. See no-color.org 支持此社区标准的其他库。

FORCE_COLOR

设置后(不管值如何),pytest将在终端输出中使用颜色。 PY_COLORSNO_COLOR 优先于 FORCE_COLOR .

例外情况

final class UsageError[源代码]

基类:Exception

pytest用法或调用出错。

警告

在某些情况下生成的自定义警告,例如使用不当或不推荐使用的功能。

class PytestWarning

基类:UserWarning

pytest发出的所有警告的基类。

class PytestAssertRewriteWarning

基类:pytest.PytestWarning

pytest assert重写模块发出的警告。

class PytestCacheWarning

基类:pytest.PytestWarning

缓存插件在各种情况下发出的警告。

class PytestCollectionWarning

基类:pytest.PytestWarning

当py无法收集文件中的警告时,会发出警告。

class PytestConfigWarning

基类:pytest.PytestWarning

针对配置问题发出警告。

class PytestDeprecationWarning

基类:pytest.PytestWarning, DeprecationWarning

将在未来版本中删除的功能的警告类。

class PytestExperimentalApiWarning

基类:pytest.PytestWarning, FutureWarning

在pytest中用来表示实验的警告类别。

谨慎使用,因为API可能会在将来的版本中更改甚至完全删除。

class PytestUnhandledCoroutineWarning

基类:pytest.PytestWarning

为未处理的协同进程发出警告。

收集测试函数时遇到协同程序,但没有被任何异步感知插件处理。协同程序测试函数本机不受支持。

class PytestUnknownMarkWarning

基类:pytest.PytestWarning

使用未知标记时发出警告。

用属性标记测试函数 有关详细信息。

class PytestUnraisableExceptionWarning

基类:pytest.PytestWarning

报告了一个无可辩驳的例外情况。

不可撤销的异常是在 __del__ 实现以及无法正常引发异常的类似情况。

class PytestUnhandledThreadExceptionWarning

基类:pytest.PytestWarning

中发生未经处理的异常。 Thread .

此类异常不会正常传播。

咨询 内部Pytest警告 有关详细信息,请参阅文档中的。

配置选项

下面是一个内置配置选项列表,可以在 pytest.inipyproject.tomltox.inisetup.cfg 文件,通常位于存储库的根目录。要查看每个文件格式的详细信息,请参阅 配置文件格式 .

警告

用法 setup.cfg 除了非常简单的用例外,不建议使用。 .cfg 文件使用不同于 pytest.initox.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 . 另外,路径可能包含将要展开的环境变量。有关缓存插件的详细信息,请参阅 缓存:使用交叉测试运行状态 .

confcutdir

设置向上搜索的目录 conftest.py files stops. By default, pytest will stop searching for conftest.py files upwards from pytest.ini/tox.ini /``如果有的话,可以设置项目的.cfg``或文件系统根目录。

console_output_style

在运行测试时设置控制台输出样式:

  • classic :经典Pytest输出。

  • progress :类似于经典的pytest输出,但带有进度指示器。

  • count :与进度类似,但进度显示为已完成的测试数而不是百分比。

默认值为 progress ,但你可以退回到 classic 如果您喜欢或新模式导致意外问题:

# content of pytest.ini
[pytest]
console_output_style = classic
doctest_encoding

用于用docstring解码文本文件的默认编码。 See how pytest handles doctests .

doctest_optionflags

标准中的一个或多个doctest标志名 doctest 模块。 See how pytest handles doctests .

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: produces xunit 2.0 style output ,它应该与最新的Jenkins版本更兼容。 这是默认值 .

[pytest]
junit_family = xunit2
junit_logging

3.5 新版功能.

在 5.4 版更改: logallout-err 添加了选项。

配置捕获的输出是否应写入JUnit XML文件。有效值为:

  • log :只写 logging 捕获的输出。

  • system-out :写入捕获 stdout 内容。

  • system-err :写入捕获 stderr 内容。

  • out-err :写入捕获的两个 stdoutstderr 内容。

  • all :写入捕获 loggingstdoutstderr 内容。

  • 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 [value] 和配置选项 log_auto_indent = [value] 为所有日志记录设置自动缩进行为。

[value] 可以是:
  • True或“On”-动态自动缩进多行日志消息

  • False或“Off”或0-不自动缩进多行日志消息(默认行为)

  • [正整数] -多行日志消息的自动缩进方式 [价值] 空间

[pytest]
log_auto_indent = False

支持通过kwarg extra={{"auto_indent": [value]}} 打电话给 logging.log() 为日志中的特定项指定自动缩进行为。 extra kwarg重写命令行或配置中指定的值。

log_cli

在测试期间启用显示(也称为运行日志 "live logging" )默认值为 False .

[pytest]
log_cli = True
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.ini 除了其他活动的日志记录工具之外,还应写入日志消息的文件。

[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

有关详细信息,请参阅 登录 .

log_level

设置日志捕获应捕获的最小日志消息级别。可以使用整数值或级别名称。

[pytest]
log_level = INFO

有关详细信息,请参阅 登录 .

markers

--strict-markers--strict 使用命令行参数时,只允许使用已知标记(由core pytest或某些插件在代码中定义)。

您可以在此设置中列出其他标记以将它们添加到白名单,在这种情况下,您可能希望添加 --strict-markersaddopts 为了避免将来的倒退:

[pytest]
addopts = --strict-markers
markers =
    slow
    serial

注解

The use of --strict-markers is highly preferred. --strict was kept for backward compatibility only and may be confusing for others as it only applies to markers and not to other options.

minversion

指定运行测试所需的最小pytest版本。

# content of pytest.ini
[pytest]
minversion = 3.0  # will fail if we run with pytest-2.8
norecursedirs

设置在递归测试发现时避免使用的目录basename模式。单独的(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构建目录或 tmp 前缀目录。

此外, pytest 将尝试通过激活脚本智能地识别和忽略virtualenv。任何被视为虚拟环境根目录的目录在测试收集期间都不会被考虑,除非 ‑‑collect‑in‑virtualenv 给出。还要注意 norecursedirs 优先于 ‑‑collect‑in‑virtualenv ;例如,如果要在具有匹配的基目录的virtualenv中运行测试 '.*'must 覆盖 norecursedirs 除了使用 ‑‑collect‑in‑virtualenv 旗帜。

python_classes

一个或多个名称前缀或全局样式模式,用于确定要为测试集合考虑哪些类。通过在模式之间添加空格来搜索多个全局模式。默认情况下,pytest将考虑以 Test 作为测试集合。下面是一个如何从以 Suite

[pytest]
python_classes = *Suite

注意 unittest.TestCase 无论此选项如何,派生类总是被收集,因为 unittest 使用自己的收集框架来收集这些测试。

python_files

一个或多个全局样式的文件模式,用于确定哪些python文件被视为测试模块。通过在模式之间添加空格来搜索多个全局模式:

[pytest]
python_files = test_*.py check_*.py example_*.py

或每行一个:

[pytest]
python_files =
    test_*.py
    check_*.py
    example_*.py

默认情况下,文件匹配 test_*.py*_test.py 将被视为测试模块。

python_functions

一个或多个名称前缀或全局模式决定哪些测试函数和方法被视为测试。通过在模式之间添加空格来搜索多个全局模式。默认情况下,pytest将考虑前缀为 test 作为一个测试。下面是一个如何收集以 _test

[pytest]
python_functions = *_test

请注意,这对使用 unittest .TestCase 派生类,as unittest 使用自己的收集框架来收集这些测试。

更改命名约定 更详细的例子。

required_plugins

必须存在才能运行pytest的插件的空格分隔列表。插件可以直接在其名称后面列出,也可以不带版本说明符。不同版本说明符之间不允许有空格。如果没有找到任何一个插件,发出一个错误。

[pytest]
required_plugins = pytest-django>=3.0.0,<4.0.0 pytest-html pytest-xdist>=1.0.0
testpaths

当命令行中没有指定特定目录、文件或测试ID时,从中执行pytest时,应搜索的目录列表。 rootdir 目录。当所有项目测试都在一个已知的位置时很有用,以加速测试收集并避免意外地获取不需要的测试。

[pytest]
testpaths = testing doc

这会告诉pytest只在 testingdoc 从根目录执行时的目录。

usefixtures

将应用于所有测试函数的设备列表;这在语义上与应用 @pytest.mark.usefixtures 标记所有测试功能。

[pytest]
usefixtures =
    clean_db
xfail_strict

如果设置为 True ,测试标记为 @pytest.mark.xfail 默认情况下,实际成功的测试将使测试套件失败。有关详细信息,请参阅 strict 参数 .

[pytest]
xfail_strict = True

命令行标志

所有命令行标志都可以通过运行 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
                        start a custom interactive Python debugger on
                        errors. 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}
                        which tests to run with no previously (known)
                        failures.
  --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

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 is 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).
  --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 is '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)
  --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               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 is to 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 ImportErrors
  --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               store internal tracing debug information in
                        '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 as used by the logging module.
  --log-date-format=LOG_DATE_FORMAT
                        log date format as used by the logging module.
  --log-cli-level=LOG_CLI_LEVEL
                        cli logging level.
  --log-cli-format=LOG_CLI_FORMAT
                        log format as used by the logging module.
  --log-cli-date-format=LOG_CLI_DATE_FORMAT
                        log date format as used by the logging module.
  --log-file=LOG_FILE   path to a file when logging will be written to.
  --log-file-level=LOG_FILE_LEVEL
                        log file logging level.
  --log-file-format=LOG_FILE_FORMAT
                        log format as used by the logging module.
  --log-file-date-format=LOG_FILE_DATE_FORMAT
                        log date format as 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.

[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found:

  markers (linelist):   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 in the command line.
  filterwarnings (linelist):
                        Each line specifies a pattern for
                        warnings.filterwarnings. Processed after
                        -W/--pythonwarnings.
  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").
  xfail_strict (bool):  default for the strict parameter of xfail markers
                        when not given explicitly (default: False)
  enable_assertion_pass_hook (bool):
                        Enables the pytest_assertion_pass hook.Make sure to
                        delete any previously generated pyc cache files.
  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_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
  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