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