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
如果超过规定的绝对公差,仍将被视为不相等。如果您同时指定abs
和rel
,如果满足以下任一公差,则数字视为相等:>>> 1 + 1e-8 == approx(1) True >>> 1 + 1e-8 == approx(1, abs=1e-12) False >>> 1 + 1e-8 == approx(1, rel=1e-6, abs=1e-12) True
您也可以使用
approx
比较非数值类型,或包含非数值类型的字典和序列,在这种情况下,它将退回到严格相等。这对于比较可以包含可选值的字典和序列非常有用:>>> {"required": 1.0000005, "optional": None} == approx({"required": 1, "optional": None}) True >>> [None, 1.0000005] == approx([None,1]) True >>> ["foo", 1.0000005] == approx([None,1]) False
如果你想用
approx
,那么您可能想知道它如何与其他比较浮点数的好方法进行比较。所有这些算法都是基于相对公差和绝对公差的,在大多数情况下应该是一致的,但它们确实有意义的区别:math.isclose(a, b, rel_tol=1e-9, abs_tol=0.0)
:如果相对公差满足w.r.t.或a
或b
或者满足绝对公差。因为相对公差是用两种方法计算的a
和b
,此测试是对称的(即两者都不是a
也不b
是“参考值”)。如果要与比较,必须指定绝对公差0.0
因为默认情况下没有公差。 `More information...`_ _numpy.isclose(a, b, rtol=1e-5, atol=1e-8)
:如果a
和b
小于相对公差w.r.t.b
以及绝对容忍度。因为相对公差只计算w.r.t.b
,这个测试是不对称的,你可以想到b
作为参考值。支持比较序列的是numpy.allclose
. `More information...`_ _unittest.TestCase.assertAlmostEqual(a, b)
如果是真a
和b
在绝对公差范围内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.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¶
pytest.xfail¶
-
xfail
(reason: str = '') → NoReturn[源代码]¶ 根据给定的原因强制地发送正在执行的测试或设置函数。
只应在测试(设置、调用或拆卸)期间调用此函数。
注解
最好用 pytest.mark.xfail 标记(如果可能)在某些情况下声明测试为Xfailed,如已知错误或缺少特性。
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 断言代码生成
DeprecationWarning
或PendingDeprecationWarning
.此函数可用作上下文管理器::
>>> 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.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.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.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_markers
或 Node.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实例将被注入。
夹具可以提供它们的值来测试使用
return
或yield
声明。使用时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 -- 必须是不包含
/
分离器。确保该名称包含插件或应用程序标识符,以防止与其他缓存用户发生冲突。
-
卡普西斯¶
教程 : 捕获stdout/stderr输出 .
-
capsys
()[源代码]¶ 启用写入的文本捕获
sys.stdout
和sys.stderr
.捕获的输出通过
capsys.readouterr()
方法调用,它返回(out, err)
命名元组。out
和err
将text
物体。返回的实例
CaptureFixture[str]
.例子:
def test_output(capsys): print("hello") captured = capsys.readouterr() assert captured.out == "hello\n"
双星¶
教程 : 捕获stdout/stderr输出 .
-
capsysbinary
()[源代码]¶ 启用写入的字节捕获
sys.stdout
和sys.stderr
.捕获的输出通过
capsysbinary.readouterr()
方法调用,它返回(out, err)
命名元组。out
和err
将bytes
物体。返回的实例
CaptureFixture[bytes]
.例子:
def test_output(capsysbinary): print("hello") captured = capsysbinary.readouterr() assert captured.out == b"hello\n"
CAPFD¶
教程 : 捕获stdout/stderr输出 .
-
capfd
()[源代码]¶ 启用写入文件描述符的文本捕获
1
和2
.捕获的输出通过
capfd.readouterr()
方法调用,它返回(out, err)
命名元组。out
和err
将text
物体。返回的实例
CaptureFixture[str]
.例子:
def test_system_echo(capfd): os.system('echo "hello"') captured = capfd.readouterr() assert captured.out == "hello\n"
二元二进制¶
教程 : 捕获stdout/stderr输出 .
-
capfdbinary
()[源代码]¶ 启用写入文件描述符的字节捕获
1
和2
.捕获的输出通过
capfd.readouterr()
方法调用,它返回(out, err)
命名元组。out
和err
将byte
物体。返回的实例
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
属性,以防设备被间接参数化。-
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函数,以便在请求的测试上下文中的最后一个测试完成执行后调用。
-
PyTestCONFIG¶
-
pytestconfig
()[源代码]¶ 会话范围的fixture,返回
_pytest.config.Config
对象。例子::
def test_foo(pytestconfig): if pytestconfig.getoption("verbose") > 0: ...
record_property¶
教程 : record_property .
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_info
或stack_info
日志函数的参数)不包括在内,因为它是由处理程序中的格式化程序添加的。3.7 新版功能.
-
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[源代码]¶ 删除属性
name
从target
.如果没有
name
已指定并且target
是一个字符串,它将被解释为一个点式导入路径,最后一部分是属性名。引发AttributeError属性不存在,除非
raising
设置为False。
-
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[源代码]¶ 设置环境变量
name
到value
.如果
prepend
是一个字符,读取当前环境变量值,并在value
与…相连prepend
性格。
烘干机¶
6.2 新版功能.
提供了一个 Pytester
实例,该实例可用于运行和测试pytest本身。
它提供了一个空目录,可以在其中隔离执行pytest,并包含用于编写测试、配置文件和匹配预期输出的工具。
要使用它,请将其包含在您的最上面 conftest.py
文件:
pytest_plugins = "pytester"
-
final class
Pytester
[源代码]¶ 编写测试/配置文件、隔离执行pytest以及匹配预期输出的功能,非常适合pytest插件的黑盒测试。
它试图尽可能地将测试运行与外部因素隔离,将当前工作目录修改为
path
以及初始化期间的环境变量。属性:
- 变量
path (Path) -- 用于创建文件/从中运行测试等的临时目录路径。
plugins -- 与一起使用的插件列表
parseconfig()
和runpytest()
. 最初这是一个空列表,但是插件可以添加到列表中。要添加到列表中的项的类型取决于使用它们的方法,有关详细信息,请参阅它们。
-
path
¶ 创建文件并执行pytest的临时目录。
-
make_hook_recorder
(pluginmanager: _pytest.config.PytestPluginManager) → _pytest.pytester.HookRecorder[源代码]¶ 创建新的
HookRecorder
对于一个插件管理器。
-
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文件。
-
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)¶
-
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_runtest_logreport
(report: Union[_pytest.reports.TestReport, _pytest.reports.CollectReport]) → None¶
-
exception
-
getnode
(config: _pytest.config.Config, arg: Union[str, os.PathLike[str]]) → Optional[Union[_pytest.nodes.Item, _pytest.nodes.Collector]][源代码]¶ 返回文件的集合节点。
- 参数
config (_pytest.config.Config) -- pytest配置。看到了吗
parseconfig()
和parseconfigure()
为了创造它。arg (py.path.local) -- 文件的路径。
-
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
)那就结束了。
- 返回类型
-
runpython
(script) → _pytest.pytester.RunResult[源代码]¶ 使用sys.executable作为解释器运行python脚本。
- 返回类型
-
runpytest_subprocess
(*args, timeout: Optional[float] = None) → _pytest.pytester.RunResult[源代码]¶ 将pytest作为具有给定参数的子进程运行。
任何添加到
plugins
将使用添加列表-p
命令行选项。另外--basetemp
用于将任何临时文件和目录放在前缀为“runpytest-”的编号目录中,以避免与临时文件和目录的常规编号pytest位置冲突。- 参数
args -- 要传递给pytest子进程的参数序列。
timeout -- 以秒为单位的超时和提升时间
Pytester.TimeoutExpired
.
- 返回类型
-
class
RunResult
[源代码]¶ 运行命令的结果。
-
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}}
.
-
-
class
LineMatcher
[源代码]¶ 灵活匹配文本。
这是一个方便的类,用于测试像命令输出这样的大文本。
构造器获取一个没有尾随新行的行列表,即
text.splitlines()
.-
fnmatch_lines_random
(lines2: Sequence[str]) → None[源代码]¶ 检查输出中以任何顺序存在的行(使用
fnmatch.fnmatch()
)
-
re_match_lines_random
(lines2: Sequence[str]) → None[源代码]¶ 检查输出中以任何顺序存在的行(使用
re.match()
)
-
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 -- 连续匹配线条?
-
-
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 topy.path.local
objects as necessary.-
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)¶
-
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_runtest_logreport
(report: Union[_pytest.reports.TestReport, _pytest.reports.CollectReport]) → None¶
-
exception
-
tmpdir
¶ 执行测试的临时目录。
-
make_hook_recorder
(pluginmanager) → _pytest.pytester.HookRecorder[源代码]¶
-
chdir
() → None[源代码]¶ 见
Pytester.chdir()
.
-
mkdir
(name) → py._path.local.LocalPath[源代码]¶ 见
Pytester.mkdir()
.
-
getnode
(config: _pytest.config.Config, arg) → Optional[Union[_pytest.nodes.Item, _pytest.nodes.Collector]][源代码]¶
-
genitems
(colitems: List[Union[_pytest.nodes.Item, _pytest.nodes.Collector]]) → List[_pytest.nodes.Item][源代码]¶
-
runpytest_inprocess
(*args, **kwargs) → _pytest.pytester.RunResult[源代码]¶
-
runpytest
(*args, **kwargs) → _pytest.pytester.RunResult[源代码]¶
-
parseconfig
(*args) → _pytest.config.Config[源代码]¶
-
parseconfigure
(*args) → _pytest.config.Config[源代码]¶
-
collect_by_name
(modcol: _pytest.nodes.Collector, name: str) → Optional[Union[_pytest.nodes.Item, _pytest.nodes.Collector]][源代码]¶
-
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[源代码]¶
-
runpytest_subprocess
(*args, timeout=None) → _pytest.pytester.RunResult[源代码]¶
-
spawn
(cmd: str, expect_timeout: float = 10.0) → pexpect.spawn[源代码]¶ 见
Pytester.spawn()
.
-
exception
重述¶
教程 : 使用警告功能断言警告
-
recwarn
()[源代码]¶ 返回A
WarningsRecorder
记录测试函数发出的所有警告的实例。有关警告类别的信息,请参阅http://docs.python.org/library/warnings.html。
每个记录的警告都是 warnings.WarningMessage
.
注解
DeprecationWarning
和 PendingDeprecationWarning
被区别对待;见 确保代码触发拒绝警告 .
tmp_path¶
教程 : 临时目录和文件
-
tmp_path
()[源代码]¶ 返回一个临时目录路径对象,该对象对于每个测试函数调用都是唯一的,创建为基本临时目录的子目录。
默认情况下,每个测试会话都会创建一个新的基本临时目录,并在3个会话之后删除旧的基本目录,以帮助调试。如果
--basetemp
则它将在每个会话中被清除。看见 默认的基本临时目录 .返回的对象是
pathlib.Path
对象。
tmp_path_factory¶
tmp_path_factory
是的实例 TempPathFactory
:
tmpdir¶
教程 : 临时目录和文件
-
tmpdir
()[源代码]¶ 返回一个临时目录路径对象,该对象对于每个测试函数调用都是唯一的,创建为基本临时目录的子目录。
默认情况下,每个测试会话都会创建一个新的基本临时目录,并在3个会话之后删除旧的基本目录,以帮助调试。如果
--basetemp
则它将在每个会话中被清除。看见 默认的基本临时目录 .返回的对象是 py.path.local 路径对象。
钩子¶
教程 : 编写插件 .
引用所有可以通过 conftest.py files 和 plugins .
引导挂钩¶
引导挂钩调用了足够早注册的插件(内部插件和安装工具插件)。
-
pytest_load_initial_conftests
(early_config: Config, parser: Parser, args: List[str]) → None[源代码]¶ 调用以在命令行选项解析之前实现初始conftest文件的加载。
注解
这个钩子不用了
conftest.py
文件,仅用于安装工具插件。- 参数
early_config (_pytest.config.Config) -- pytest配置对象。
args (List[str]) -- 在命令行上传递的参数。
parser (_pytest.config.argparsing.Parser) -- 添加命令行选项。
-
pytest_cmdline_preparse
(config: Config, args: List[str]) → None[源代码]¶ ( 已弃用 )在选项分析之前修改命令行参数。
此挂钩被视为已弃用,将在将来的pytest版本中删除。考虑使用
pytest_load_initial_conftests()
相反。注解
这个钩子不用了
conftest.py
文件,仅用于安装工具插件。- 参数
config (_pytest.config.Config) -- pytest配置对象。
args (List[str]) -- 在命令行上传递的参数。
-
pytest_cmdline_parse
(pluginmanager: PytestPluginManager, args: List[str]) → Optional[Config][源代码]¶ 返回初始化的配置对象,解析指定的参数。
在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .
注解
仅对传递给
plugins
当使用时 pytest.main 执行进程内测试运行。- 参数
pluginmanager (_pytest.config.PytestPluginManager) -- Pytest插件管理器。
args (List[str]) -- 在命令行上传递的参数列表。
-
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 .- 参数
parser (_pytest.config.argparsing.Parser) -- 要添加命令行选项,请调用
parser.addoption(...)
. 要添加ini文件值,请调用parser.addini(...)
.pluginmanager (_pytest.config.PytestPluginManager) -- pytest插件管理器,可用于安装
hookspec()
的或hookimpl()
,并允许一个插件调用另一个插件的钩子来更改添加命令行选项的方式。
以后可以通过
config
对象,分别为:config.getoption(name)
检索命令行选项的值。config.getini(name)
从ini样式文件中检索值。
配置对象通过
.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插件。
- 参数
plugin -- 插件模块或实例。
manager (_pytest.config.PytestPluginManager) -- pytest插件管理器。
注解
这个钩子与
hookwrapper=True
.
收集挂钩¶
pytest
调用以下挂钩以收集文件和目录:
-
pytest_collection
(session: Session) → Optional[object][源代码]¶ 为给定会话执行收集阶段。
在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 . 不使用返回值,但只会停止进一步的处理。
默认的收集阶段是这样的(有关完整的详细信息,请参见各个钩子):
从开始
session
作为初始收集器:
pytest_collectstart(collector)
report = pytest_make_collect_report(collector)
pytest_exception_interact(collector, call, report)
如果发生交互异常对于每个收集的节点:
如果是一个项目,
pytest_itemcollected(item)
如果是收集器,则递归到它。
pytest_collectreport(report)
pytest_collection_modifyitems(session, config, items)
pytest_deselected(items)
对于任何取消选择的项目(可以多次调用)
pytest_collection_finish(session)
集合
session.items
到收集的项目列表中集合
session.testscollected
收集到的项目数
您可以实现这个钩子来只在收集之前执行一些操作,例如终端插件使用它来开始显示收集计数器(并返回
None
)- 参数
session (pytest.Session) -- pytest会话对象。
-
pytest_ignore_collect
(path: py._path.local.LocalPath, config: Config) → Optional[bool][源代码]¶ 正在考虑返回True以阻止此集合。
在调用更具体的钩子之前,将查询所有文件和目录的钩子。
在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .
- 参数
path (py.path.local) -- 分析的路径。
config (_pytest.config.Config) -- pytest配置对象。
-
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_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[源代码]¶ 在执行收集后调用。可以过滤或重新排序。
- 参数
session (pytest.Session) -- pytest会话对象。
config (_pytest.config.Config) -- pytest配置对象。
items (List[pytest.Item]) -- 项目对象列表。
注解
如果此挂接是在 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.shouldfail
或session.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_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_make_collect_report
(collector: Collector) → Optional[CollectReport][源代码]¶ 表演
collector.collect()
并返回一个CollectReport。在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .
-
pytest_report_header
(config: Config, startdir: py._path.local.LocalPath) → Union[str, List[str]][源代码]¶ 返回要显示为终端报告标题信息的字符串或字符串列表。
- 参数
config (_pytest.config.Config) -- pytest配置对象。
startdir (py.path.local) -- 起始方向。
注解
插件返回的行显示在它之前运行的插件的行之前。如果要先显示行,请使用 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}})
.- 参数
report -- 要返回其状态的报表对象。
config (_pytest.config.Config) -- pytest配置对象。
在第一个非“无”结果处停止,请参见 第一个结果:在第一个非无结果处停止 .
-
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
.
物体¶
完全引用可从访问的对象 fixtures 或 hooks .
收藏家¶
CollectReport¶
-
final class
CollectReport
[源代码]¶ 基类:
_pytest.reports.BaseReport
集合报表对象。
-
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。
- 参数
pluginmanager (PytestPluginManager) --
invocation_params (InvocationParams) -- 对象包含有关
pytest.main()
召唤。
-
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()
已调用。- 类型
-
-
option
¶ 作为属性访问命令行选项。
-
invocation_params
¶ 调用pytest所用的参数。
-
pluginmanager
¶ 插件管理器处理插件注册和钩子调用。
-
invocation_dir
¶ 从中调用pytest的目录。
喜欢使用
invocation_params.dir
,这是一个pathlib.Path
.- 类型
py.path.local
-
rootdir
¶ 通往那条路的路 rootdir .
喜欢使用
rootpath
,这是一个pathlib.Path
.- 类型
py.path.local
-
inipath
¶ 通往那条路的路 configfile .
- 类型
Optional[pathlib.Path]
6.1 新版功能.
-
inifile
¶ 通往那条路的路 configfile .
喜欢使用
inipath
,这是一个pathlib.Path
.- 类型
Optional[py.path.local]
-
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。
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;()`
。
-
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"
.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
提高了。
-
classmethod
功能¶
-
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 新版功能.
-
function
¶ 底层python“function”对象。
-
repr_failure
(excinfo: _pytest._code.code.ExceptionInfo[BaseException]) → Union[str, _pytest._code.code.TerminalRepr][源代码]¶ 返回集合或测试失败的表示。
- 参数
excinfo -- 失败的异常信息。
项目¶
结点¶
-
class
Node
[源代码]¶ 收集器和项的基类,测试集合树的组件。
收集器子类有子类;项是叶节点。
-
name
¶ 父节点范围内的唯一名称。
-
parent
¶ 父收集器节点。
-
fspath
¶ 从中收集此节点的文件系统路径(可以是None)。
-
keywords
¶ 从所有范围收集的关键字/标记。
-
own_markers
: List[_pytest.mark.structures.Mark]¶ 属于此节点的标记对象。
-
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 -- 筛选依据的名称。
-
addfinalizer
(fin: Callable[], object]) → None[源代码]¶ 注册一个在完成此节点时要调用的函数。
仅当此节点在安装链中处于活动状态时,才能调用此方法,例如在self.setup()期间。
-
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变量的名称。
- 类型
变量的类型,可以是
string
,pathlist
,args
,linelist
或bool
. 默认为string
如果None
或者不通过。- 违约
如果不存在ini文件选项但被查询,则为默认值。
可以通过调用
config.getini(name)
.
PytestPluginManager¶
-
final class
PytestPluginManager
[源代码]¶ 基类:
pluggy.manager.PluginManager
A
pluggy.PluginManager
使用附加的pytest特定功能:从命令行加载插件,
PYTEST_PLUGINS
env变量和pytest_plugins
在加载的插件中找到全局变量。conftest.py
启动时加载。
-
register
(plugin: object, name: Optional[str] = None) → Optional[str][源代码]¶ 注册插件并返回其规范名称或
None
如果名字被阻止注册。提高ValueError
如果插件已经注册。
-
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
.
-
set_blocked
(name)¶ 阻止给定名称的注册,如果已注册,则取消注册。
-
subset_hook_caller
(name, remove_plugins)¶ 返回一个新的
hooks._HookCaller
指定方法的实例,该方法管理对所有已注册插件的调用(removeu plugins中的插件除外)。
-
unregister
(plugin=None, name=None)¶ 从内部数据结构中注销插件对象及其包含的所有hook实现。
会话¶
-
final class
Session
[源代码]¶ -
-
exception
Interrupted
¶ -
发出测试运行中断的信号。
-
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
是空的。
-
exception
TestReport¶
-
final class
TestReport
[源代码]¶ 基类:
_pytest.reports.BaseReport
基本测试报告对象(如果失败,也用于安装和拆卸调用)。
-
keywords
¶ 包含与测试调用相关联的所有关键字和标记的名称->值字典。
-
outcome
¶ 测试结果,总是“通过”、“失败”、“跳过”之一。
-
longrepr
: Union[None, _pytest._code.code.ExceptionInfo[BaseException], Tuple[str, int, str], str, _pytest._code.code.TerminalRepr]¶ 无或故障表示。
-
user_properties
¶ User properties是保存测试的用户定义属性的元组(名称、值)列表。
-
sections
: List[Tuple[str, str]]¶ 对列表
(str, str)
需要整理的额外信息。由pytest用于添加捕获的文本stdout
和stderr
,但也可以被其他插件用于向报表添加任意信息。
-
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 新版功能.
-
全局变量¶
当在测试模块或 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.py文件 注册其他插件。可以是一个 str
或 Sequence[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_COLOR
和 FORCE_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_COLORS
和 NO_COLOR
优先于 FORCE_COLOR
.
警告¶
在某些情况下生成的自定义警告,例如使用不当或不推荐使用的功能。
-
class
PytestWarning
¶ 基类:
UserWarning
pytest发出的所有警告的基类。
-
class
PytestAssertRewriteWarning
¶ -
pytest assert重写模块发出的警告。
-
class
PytestCacheWarning
¶ -
缓存插件在各种情况下发出的警告。
-
class
PytestCollectionWarning
¶ -
当py无法收集文件中的警告时,会发出警告。
-
class
PytestConfigWarning
¶ -
针对配置问题发出警告。
-
class
PytestDeprecationWarning
¶ 基类:
pytest.PytestWarning
,DeprecationWarning
将在未来版本中删除的功能的警告类。
-
class
PytestExperimentalApiWarning
¶ 基类:
pytest.PytestWarning
,FutureWarning
在pytest中用来表示实验的警告类别。
谨慎使用,因为API可能会在将来的版本中更改甚至完全删除。
-
class
PytestUnhandledCoroutineWarning
¶ -
为未处理的协同进程发出警告。
收集测试函数时遇到协同程序,但没有被任何异步感知插件处理。协同程序测试函数本机不受支持。
咨询 内部Pytest警告 有关详细信息,请参阅文档中的。
配置选项¶
下面是一个内置配置选项列表,可以在 pytest.ini
, pyproject.toml
, tox.ini
或 setup.cfg
文件,通常位于存储库的根目录。要查看每个文件格式的详细信息,请参阅 配置文件格式 .
警告
用法 setup.cfg
除了非常简单的用例外,不建议使用。 .cfg
文件使用不同于 pytest.ini
和 tox.ini
这可能会导致难以追踪的问题。如果可能,建议使用后一个文件,或者 pyproject.toml
,以保存pytest配置。
可以使用命令行中的 -o/--override-ini
,也可以多次传递。预期格式为 name=value
. 例如::
pytest -o console_output_style=classic -o cache_dir=/tmp/mycache
-
addopts
¶ 添加指定的
OPTS
命令行参数集,就好像它们是由用户指定的一样。示例:如果您有这个ini文件内容:# content of pytest.ini [pytest] addopts = --maxfail=2 -rf # exit after 2 failures, report fail info
发行
pytest test_hello.py
实际上是指:pytest --maxfail=2 -rf test_hello.py
默认为不添加选项。
-
cache_dir
¶ 设置存储缓存插件内容的目录。默认目录为
.pytest_cache
创建于 rootdir . 目录可以是相对路径或绝对路径。如果设置相对路径,则创建目录相对于 rootdir . 另外,路径可能包含将要展开的环境变量。有关缓存插件的详细信息,请参阅 缓存:使用交叉测试运行状态 .
-
confcutdir
¶ 设置向上搜索的目录
conftest.py
files stops. By default, pytest will stop searching forconftest.py
files upwards frompytest.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 版更改:
log
,all
,out-err
添加了选项。配置捕获的输出是否应写入JUnit XML文件。有效值为:
log
:只写logging
捕获的输出。system-out
:写入捕获stdout
内容。system-err
:写入捕获stderr
内容。out-err
:写入捕获的两个stdout
和stderr
内容。all
:写入捕获logging
,stdout
和stderr
内容。no
(默认):不写入捕获的输出。
[pytest] junit_logging = system-out
-
junit_log_passing_tests
¶ 4.6 新版功能.
如果
junit_logging != "no"
,配置是否应将捕获的输出写入JUnit XML文件 经过 测验。默认为True
.[pytest] junit_log_passing_tests = False
-
junit_suite_name
¶ 要设置根测试套件XML项的名称,可以配置
junit_suite_name
配置文件中的选项:[pytest] junit_suite_name = my_suite
-
log_auto_indent
¶ 允许多行日志消息的选择性自动缩进。
支持命令行选项
--log-auto-indent [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_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_format
¶ 设置一个
logging
-用于格式化捕获的日志消息的兼容字符串。[pytest] log_format = %(asctime)s %(levelname)s %(message)s
有关详细信息,请参阅 登录 .
-
markers
¶ 当
--strict-markers
或--strict
使用命令行参数时,只允许使用已知标记(由core pytest或某些插件在代码中定义)。您可以在此设置中列出其他标记以将它们添加到白名单,在这种情况下,您可能希望添加
--strict-markers
到addopts
为了避免将来的倒退:[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
派生类,asunittest
使用自己的收集框架来收集这些测试。见 更改命名约定 更详细的例子。
-
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只在
testing
和doc
从根目录执行时的目录。
-
usefixtures
¶ 将应用于所有测试函数的设备列表;这在语义上与应用
@pytest.mark.usefixtures
标记所有测试功能。[pytest] usefixtures = clean_db
命令行标志¶
所有命令行标志都可以通过运行 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