Pytest精通指南(11)利用Mark标记测试用例

46 篇文章 2 订阅
32 篇文章 3 订阅


请添加图片描述

简介

在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 cases
    product: Product-related test cases
    order: Order-related test cases
        

获取所有标记

执行pytest --markers可以获取所有的标记,自定义的标记展示在前。

请添加图片描述

自定义标记分类

  • 模块、函数、方法、类上都是允许注册一个或多个标记的。
  • 模块注册标记方式:pytestmark = [pytest.mark.xx1, pytest.mark.xx2]
  • 其他注册标记方式:利用装饰器完成,如@pytest.mark.xxx

test_case_01.py文件代码

import pytest

pytestmark = 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.order
    def test_create_order(self):
        print(f"---> test_create_order 被调用,创建订单")

    @pytest.mark.order
    def 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"

执行结果:符合预期

请添加图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要休息的KK.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值