Pytest 分组测试

有时候需要针对不同的测试环境跑不同的测试用例,如:冒烟测试、sit、uat、prd,所以给自动化测试用例做标记分组是很有必要的,pytest.mark 可以轻松实现这个功能。首先需要注册自定义标记。

注册marks

有3中方法注册marks,第一种事在pytest.ini文件

通过pytest.ini文件注册自定义标记

如下:

[pytest]
markers =
    sit: 标记测试为sit (deselect with '-m "not sit"')
    uat: 标记测试为uat
    prd: 标记测试为prd 
    serial

通过 pyproject.toml文件注册自定义标记

[tool.pytest.ini_options]
markers = [
    "sit: 标记测试为sit (deselect with '-m \"not sit\"')",
    "serial",
]

注意标记名:后面的为可选的标记描述

通过pytest_configure hook动态注册标记

def pytest_configure(config):
    config.addinivalue_line(
        "markers", "env(name): mark test to run only on named environment"
    )

给未知标记抛出异常

使用@pytest.mark.name_of_the_mark装饰器应用的未注册标记将始终发出警告,以避免由于键入错误的名称而导致的意外行为。可以通过在pytest.ini文件中注册自定义标记或使用自定义pytest_configure钩子来禁用自定义标记的警告。

当传递--strict marks命令行标志时,使用@pytest.mark.name_of_the_mark装饰器应用的任何未知标记都将触发错误。您可以在项目中通过向addopts添加--strict标记来强制执行此验证:

[pytest]
addopts = --strict-markers
markers =
    slow: marks tests as slow (deselect with '-m "not slow"')
    serial

使用自定义标记

import pytest


class TestPractise:

    @pytest.mark.sit
    def test_sit(self):
        print('sit环境测试')

    @pytest.mark.uat
    def test_uat(self):
        print('uat环境测试')


if __name__ == "__main__":
    pytest.main(["-v", "-s", "-m sit and not uat"])

以上测试选择sit标记的测试,不选中uat标记的测试

输出如下:

Pytest 分组测试_第1张图片

 从图片看出运行结果与期望一致~

你可能感兴趣的:(Pytest,pytest,测试用例)