pytest教程-5-mark标记测试用例

本文介绍了如何在pytest中使用和管理标记来组织和分组测试用例,包括自定义标记、注册标记以及使用-m参数组合执行不同标记的用例。通过标记,可以有效区分冒烟测试、登录测试等,并避免警告,提升测试执行效率。
摘要由CSDN通过智能技术生成

上一节我们对pytest的assert断言方法,做了细致的讲解,本小节我们学习pytest标记测试用例的方法。

首先我们先讲一下,为什么要标记测试用例,标记好用例后,有什么实际的作用?

在实际的接口自动化测试用例的执行中,我们往往会根据用例的不同特点来分别执行,比如新需求提测后,test环境我们会先挑一部分接口用例来执行主流程冒烟测试,来评估一下开发的提测质量,如果质量较差,我们有权力打回需求,另外,我们的新需求上到stg(预发布)环境后,我们会在stg执行全量接口用例回归,确保新需求不会影响老的功能,还有在线上环境,我们会挑出一些主要服务的核心p0/p1接口用例,来做线上服务的监控告警。基于以上说的这些真实需求,我们需要有将不同的测试用例进行分组的能力,即每组用例单独运行,各司其职,互不影响。 pytest的mark关键字就是用于在测试用例/测试类中给用例打标记(只能使用已注册的标记名),从而实现测试分组的能力。

比如只执行冒烟用例,那么这个时候就需要使用@pytest.mark.smoke来进行打标签过滤。

  • 直接使用自定义mark标签

在pytest中,可以通过@pytest.mark.xxx的方式直接自定义标签使用,比如欲对一个测试函数增加smoke标签,即直接在测试函数上使用@pytest.mark.smoke即可,比如某些用例添加登录标签,在测试函数上使用

@pytest.mark.login即可,l另外,同一个用例的标签可以为多个。

示例1:

#test_demo.py
import pytest

@pytest.mark.smoke
def test_01():
    assert 1==1

@pytest.mark.login
@pytest.mark.smoke
def test_login_success():
	"""登陆成功"""
 	print("---用例1:登录成功---")

需要运行命令pytest -m "smoke" test_demo.py,才能执行刚才标记为“smoke”标签的用例,结果如下

PS D:\PycharmProjects\Source_Code\pytest_demo\test> pytest -m "smoke" .\test_demo.py
========================================================================================= test session starts ==========================================================================================
platform win32 -- Python 3.9.12, pytest-7.4.3, pluggy-1.3.0
rootdir: D:\PycharmProjects\Source_Code\pytest_demo\test
collected 2 items                                                                                                                                                                                       

test_demo.py ..                                                                                                                                                                                   [100%]

=========================================================================================== warnings summary ===========================================================================================
test_demo.py:6
  D:\PycharmProjects\Source_Code\pytest_demo\test\test_demo.py:6: PytestUnknownMarkWarning: Unknown pytest.mark.smoke - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.smoke

test_demo.py:11
  D:\PycharmProjects\Source_Code\pytest_demo\test\test_demo.py:11: PytestUnknownMarkWarning: Unknown pytest.mark.smoke - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.smoke

test_demo.py:12
  D:\PycharmProjects\Source_Code\pytest_demo\test\test_demo.py:12: PytestUnknownMarkWarning: Unknown pytest.mark.login - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.login

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
==================================================================================== 2 passed, 3 warnings in 0.02s ===================================================================================== 
PS D:\PycharmProjects\Source_Code\pytest_demo\test> 
  • 注册、管理 mark 标记

由上面的运行结果可以看出,用例只运行了标签为"smoke"的用例,但是运行会出现告警信息。那么如何解决这些告警呢?首先要明白,使用mark标记时,是需要注册的,如果不注册就会出现告警。下面介绍两种注册标签的方法。

方式一:在conftest.py文件当中,通过hock注册:

#conftest.py文件
def pytest_configure(config):
    config.addinivalue_line("markers", "smoke:标记只运行冒烟用例")
    config.addinivalue_line("markers", "login:标记只运行登录模块用例")

方式二:创建pytest.ini文件,在文件中注册:

#pytest.ini文件
[pytest]
markers =
    smoke:smoke case
    login:login case
addopts = --strict

addopts = --strict” 参数来严格规范 mark 标记的使用,当使用未注册的 mark 标记时,pytest会直接报错。pytest.ini文件文件的更多用法,我们后面专门拿出一小节来介绍。

使用以上两种方法后,执行pytest -m "smoke" test_demo.py,结果如下,已经没有告警信息信息了

 pytest -m "smoke" .\test_demo.py
========================================================================================= test session starts ==========================================================================================
platform win32 -- Python 3.9.12, pytest-7.4.3, pluggy-1.3.0
rootdir: D:\PycharmProjects\Source_Code\pytest_demo
configfile: pytest.ini
collected 2 items                                                                                                                                                                                       

test_demo.py ..                                                                                                                                                                                   [100%]

========================================================================================== 2 passed in 0.01s ===========================================================================================
  • 组合运行用例

其实当我们运行的时候,也可以指定多个标签。

使用 -m 参数运行标记的测试用例;-m 参数支持 and、or 、not 等表达式

上面的示例1中,我们可以同时执行smoke标签和login标签的所有用例

终端执行: pytest -m "login or smoke" test_demo.py

我们也可以执行,同时具有smoke标签和login标签的用例

终端执行: pytest -m "login and smoke" test_demo.py

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值