目录:
- 安装及入门
- 使用和调用方法
- 原有TestSuite使用方法
- 断言的编写和报告
- Pytest fixtures:清晰 模块化 易扩展
- 使用Marks标记测试用例
- Monkeypatching/对模块和环境进行Mock
- 使用tmp目录和文件
- 捕获stdout及stderr输出
- 捕获警告信息
- 模块及测试文件中集成doctest测试
- skip及xfail: 处理不能成功的测试用例
- Fixture方法及测试用例的参数化
- 缓存: 使用跨执行状态
- unittest.TestCase支持
- 运行Nose用例
- 经典xUnit风格的setup/teardown
- 安装和使用插件
- 插件编写
- 编写钩子(hook)方法
- 运行日志
- API参考
- 优质集成实践
- 片状测试
- Pytest导入机制及sys.path/PYTHONPATH
- 配置选项
- 示例及自定义技巧
- Bash自动补全设置
API参考-Marks
22-API参考-02-Marks
标记(Marks)
可以使用标记应用元数据来测试功能(但不是固定装置),然后可以通过装置或插件访问。
pytest.mark.filterwarnings
教程:@ pytest.mark.filterwarnings。
为标记的测试项添加警告过滤器。
pytest.mark.``filterwarnings
(过滤器)
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 参数: | 过滤器(str) -
一个警告规范字符串,由Python文档的“警告过滤器”部分中 指定的元组内容组成,由。分隔。可以省略可选字段。传递用于过滤的模块名称不是正则表达式转义。(action, message,category, module, lineno)
":"
例如:
@pytest.mark.warnings("ignore:.*usage will be deprecated.*:DeprecationWarning")
def test_foo():
...
|
pytest.mark.parametrize
教程:参数化夹具和测试功能。
Metafunc.``parametrize
(argnames,argvalues,indirect = False,ids = None,*scope = None *)[source]
使用给定argnames的argvalues列表向基础测试函数添加新调用。在收集阶段执行参数化。如果你需要设置昂贵的资源,请参阅设置间接,以便在测试设置时进行。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 参数: |
- argnames - 以逗号分隔的字符串,表示一个或多个参数名称,或参数字符串的列表/元组。
- argvalues - argvalues列表确定使用不同参数值调用测试的频率。如果只指定了一个argname,则argvalues是值列表。如果指定了N个argnames,则argvalues必须是N元组的列表,其中每个tuple-element为其各自的argname指定一个值。
- indirect - argnames或boolean的列表。参数列表名称(argnames的子集)。如果为True,则列表包含argnames中的所有名称。对应于此列表中的argname的每个argvalue将作为request.param传递到其各自的argname fixture函数,以便它可以在测试的设置阶段而不是在收集时执行更昂贵的设置。
- ids - 字符串ID列表或可调用的列表。如果字符串,则每个字符串对应于argvalues,以便它们是测试ID的一部分。如果将None作为特定测试的id给出,则将使用该参数的自动生成的id。如果是可调用的,它应该采用一个参数(单个argvalue)并返回一个字符串或返回None。如果为None,将使用该参数的自动生成的id。如果没有提供id,它们将自动从argvalues生成。
-
范围 - 如果指定,则表示参数的范围。范围用于按参数实例对测试进行分组。它还将覆盖任何fixture函数定义的范围,允许使用测试上下文或配置设置动态范围。
|
pytest.mark.skip
教程:跳过测试功能。
无条件地跳过测试功能。
pytest.mark.``skip
(**,reason = None *)
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 参数: | reason(str) - 跳过测试功能的原因。 |
pytest.mark.skipif
教程:跳过测试功能。
如果条件是,则跳过测试功能True
。
pytest.mark.``skipif
(条件,*,原因=无)
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 参数: |
pytest.mark.usefixtures
教程:使用类,模块或项目中的夹具。
将测试功能标记为使用给定的夹具名称。
警告
应用于夹具功能时,该标记无效。
pytest.mark.``usefixtures
(*名称)
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 参数: | args - 要使用的fixture的名称,作为字符串 |
pytest.mark.xfail
教程:XFail:将测试功能标记为预期失败。
标记测试功能按预期失败。
pytest.mark.``xfail
(condition = None,,reason = None,raises = None,run = True,strict = False *)
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 参数: |
-
condition(bool或str) - 将测试函数标记为xfail(
True/False
或条件字符串)的 条件。 - reason(str) - 测试函数标记为xfail的原因。
- 引发(异常) - 期望由测试函数引发的异常子类; 其他例外将无法通过测试。
-
run(bool) - 如果实际应该执行测试功能。如果
False
,该函数将始终为xfail并且不会被执行(如果函数是segfaulting则很有用)。 -
严格(布尔) -
- 如果
False
(默认值),该功能将在终端输出中显示,就xfailed
好像它失败一样,就像xpass
它通过一样。在这两种情况下,这都不会导致测试套件整体失败。这对于标记稍后要解决的片状测试(随机失败的测试)特别有用。 - 如果
True
,该函数将在终端输出中显示为xfailed
失败,但如果它意外通过则将使测试套件失败。这对于标记始终失败的函数特别有用,并且应该有明确的指示它们是否意外地开始通过(例如,库的新版本修复了已知错误)。
|
- 如果
自定义标记
标记是使用工厂对象动态创建的,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"}