pytest是个成熟全套的 python 自动化测试工具。单元测试,功能测试、接口自动化测试中均可应用;与 unittest相比,它能支持更多、更全面的功能,同时也具备更多特色和优势,可以参考之前同学发布的文章。
动态挑选测试用例一直是测试框架使用的必要功能,比如执行冒烟case进行预测试,针对开发对改动模块进行测试等,根据需求不同的测试阶段或测试范围内动态调整执行对应的case。在 pytest 里可以按照tag或者按文件动态挑选测试用例,下面简单介绍一下按tag动态挑选用例。
需要以下两个步骤:
1.首先给测试用例打标签(mark),在class、method 上加上如下格式装饰器,如下面简单示例:
@pytest.mark.xxx
执行class中的用例
执行函数中的用例
执行class中的函数
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的用例一条,且执行结果如标签内容
在执行-m 参数 mark 标记的用例时,pytest 会发出告警信息 “PytestUnknownMarkWarning: Unknown pytest.mark.login - is this a typo? ”如
这是一个 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'