按空格和冒号分割_pytest按tag动态挑选测试用例

pytest是个成熟全套的 python 自动化测试工具。单元测试,功能测试、接口自动化测试中均可应用;与 unittest相比,它能支持更多、更全面的功能,同时也具备更多特色和优势,可以参考之前同学发布的文章。

动态挑选测试用例一直是测试框架使用的必要功能,比如执行冒烟case进行预测试,针对开发对改动模块进行测试等,根据需求不同的测试阶段或测试范围内动态调整执行对应的case。在 pytest 里可以按照tag或者按文件动态挑选测试用例,下面简单介绍一下按tag动态挑选用例。

需要以下两个步骤:

1.首先给测试用例打标签(mark),在class、method 上加上如下格式装饰器,如下面简单示例:

@pytest.mark.xxx

8844a5288373fb0b84be9cf0e5535947.png

执行class中的用例

f372d87ec1602a18d4befa81c69e52e6.png

执行函数中的用例

e90938a97b79671f5201dc9497bba023.png

执行class中的函数

8b4f9f278e0f61f24437b0943954042b.png

2.在运行时,命令行动态指定标签运行:

# 同时选中带有这两个标签的所有测试用例运行

pytest -m "mark1 and mark2"

# 选中带有mark1或 mark2标签的所有测试用例

pytest -m "mark1 or mark2"

# 选中带有mark1的测试用例,不运行mark2的测试用例

pytest -m "mark1 and not mark2" 

下面用命令行执行-v查看执行详细信息,使用以上规则执行,可以看到没有同时满足important和smoke的用例,important且unrun的用例一条,smoke或unrun的用例两条,important但不是un的用例一条,且执行结果如标签内容

18f8367cd6023a53e8170931411751e3.png

16234e7561242c358f93f7fb0242af8d.png

09154e48369d29f35e657c96f8be28ed.png

c7f9c37472a111fca1be2a9c0829b90d.png

在执行-m 参数 mark 标记的用例时,pytest 会发出告警信息 “PytestUnknownMarkWarning: Unknown pytest.mark.login - is this a typo? ”如

e3c707e6a64f5f43062e588a2eec44c9.png

这是一个 pytest 未知的一个标记,为了消除告警,需要在 pytest的配置文件中注册 mark 标记。

注册 mark 标记:

首先在项目根目录创建一个文件pytest.ini ,这个是 pytest 的配置文件;

然后在 pytest.ini 文件的markers 中写入 mark 标记, 冒号 “:” 前面是标记名称,后面是 mark 标记的说明,可以是空字符串;

注意:pytest.ini文件中只能使用纯英文字符,绝对不能使用中文的字符(尤其是冒号和空格)!

注册完 mark 标记之后 pytest 便不会再告警。注意:pytest.ini 配置文件不支持注释

[pytest]

markers =testclass   : 'marks tests as classlevel'

    smoke : 'marks tests as smoke'

    important : 'marks tests as important'

    unrun : 'marks tests as not to run'