本文主要是介绍Pytest精通指南(11)利用Mark标记测试用例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 简介
- 应用场景
- 标记注册流程
- 标记注册示例
- 获取所有标记
- 自定义标记分类
- 运行所有用例
- 运行模块标记
- 运行类标记
- 运行多个标记
- 验证标记重叠
- 排除标记运行
简介
在pytest测试框架中,标记(mark)是一种用于对测试用例进行分类和标注的机制。
允许我们为测试函数添加
元数据
,这些元数据随后可以用于过滤
、排序
、分组
或执行特定
的测试子集。标记是通过装饰器实现的,可以将它们直接应用于测试函数或类上,例如,
@pytest.mark.feature
可以用于标记一个测试函数属于某个特定的功能模块。
这样,当需要运行与特定功能相关的测试时,就可以通过指定-m feature
参数来只执行带有该标记的测试用例。
应用场景
分类和筛选:根据功能、模块、优先级或其他属性对测试用例进行分类,并通过标记来筛选特定的测试子集。
并行执行:标记可以帮助你识别哪些测试可以并行执行,从而提高测试效率。
文档和报告:通过标记,可以为测试用例提供额外的描述或上下文,这在生成测试报告或文档时非常有用。
标记注册流程
- 在
pytest.ini
配置文件中通过markers
注册标记- 在模块、类、函数中应用注册的标记
- 根据需求使用
-m xxx
命令运行标记的测试用例
标记注册示例
注意事项:
- 标记名称应该使用英文,并且建议具有业务含义,这样可以更容易地理解每个标记的用途。
- 所以自定义的标记,建议在
pytest.ini
配置文件中统一管理,并通过命令参数--strict-markers
开启严格标记,开启后,执行pytest.ini
配置文件中未注册的标记会报错,如果不开启,则只会抛出警告,而不是警告。pytest.ini
配置文件中的markers
选项可以说是我们自定义标签的汇总和归类,方便我们清楚在项目中使用了哪些标记,而这些标记是什么意义。
[pytest]# markers选项以列表的形式管理和配置标记项
markers =# user是标记名称,:冒号后面的是标记名称的描述user: User-related test casesproduct: Product-related test casesorder: Order-related test cases
获取所有标记
执行
pytest --markers
可以获取所有的标记,自定义的标记展示在前。
自定义标记分类
- 模块、函数、方法、类上都是允许注册一个或多个标记的。
- 模块注册标记方式:
pytestmark = [pytest.mark.xx1, pytest.mark.xx2]
- 其他注册标记方式:利用装饰器完成,如
@pytest.mark.xxx
test_case_01.py
文件代码
import pytestpytestmark = pytest.mark.module # 模块类标记# 可以注册多个标记,pytest.ini配置文件中存在即可
# pytestmark = [pytest.mark.module1, pytest.mark.module2]@pytest.mark.user # 函数标记
def test_user_sign():print(f"---> test_user_sign 被调用,用户注册")@pytest.mark.user
def test_user_login():print(f"---> test_user_login 被调用,用户登录")@pytest.mark.product # 类标记
class TestProduct:def test_create_product(self):print(f"---> test_create_product 被调用,创建产品")def test_delete_product(self):print(f"---> test_delete_product 被调用,删除产品")@pytest.mark.orderdef test_create_order(self):print(f"---> test_create_order 被调用,创建订单")@pytest.mark.orderdef test_delete_order(self):print(f"---> test_delete_order 被调用,删除订单")
test_case_02.py
文件代码
def test_case_02():print(f"---> test_case_02.py 被调用")
test_case_03.py
文件代码
def test_case_03():print(f"---> test_case_03.py 被调用")
运行所有用例
执行命令:
pytest
执行结果:符合预期,没有被mark标记影响
运行模块标记
执行命令:
pytest -m module
执行结果:符合预期,成功收集模块内所有的测试用例
运行类标记
执行命令:
pytest -m product
执行结果:符合预期,成功收集类中所有的测试用例
运行多个标记
验证标记重叠
如果运行多个标记,其中标记2的作用域比标记1的作用域小时是什么情况呢?
执行命令:
pytest -m "user or module"
执行结果:优先执行作用域范围大的标记下的测试用例且不会重复执行
排除标记运行
执行命令:
pytest -m "not module"
执行结果:符合预期
这篇关于Pytest精通指南(11)利用Mark标记测试用例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!