♥ 前 言
上一篇文章入门篇咱们介绍了 pytest 的前后置方法和 fixture 机制,这个章节主要给大家介绍 pytest 中的标记机制和用例执行的方法。pytest 可以通过标记将数据传入于测试函数中,也可以通过标记中对执行的用例做筛选,接下来直接进入正题。
一、pytest 中内置的标记
pytest 标记使用需要通过 pytest.mark.标记 来使用,pytest 中为应对各种测试场景也内置了很多的标记。
1.1、pytest.mark.parametrize:用例参数化的标记
通过 parametrize 可以将用例数据和用例执行的逻辑代码分离,并实现根据用例,自动生成测试用例。
Demo:
@pytest.mark.parametrize('item',[11,22,33,44,55,66])
def test_demo(item)
assert item > 50
1.2、pytest.mark.skip:跳过用例执行
通过 skip 装饰的用例,在执行的时候会无条件跳过,
参数 reason:跳过测试函数的原因。
Demo
# 不写跳过原因
@pytest.mark.skip
def test_demo()
assert item > 50
# 写跳过原因
@pytest.mark.skip(reason='不需要执行')
def test_demo()
assert item > 50
1.3、pytest.mark.skipif:根据条件跳过用例
skipif 可以根据条件来决定是否跳过用例的执行, 如果条件为 True 则跳过测试函数执行。
参数 :condition —跳过的条件
参数 :reason —跳过的原因
Demo
a = 10
@pytest.mark.skipif(a > 20,reason='条件不成立,不执行')
def test_demo()
assert item > 50
1.4、pytest.mark.xfail:标记预期失败的用例
xfail 可以将测试函数标记为预期执行失败的用例。
参数 :condition — 将测试函数标记为 xfail 的条件(True/False )
参数 :reason — 测试函数被标记为 xfail 的原因
参数 :raises — 预期失败的异常类型
参数 :run — 是否应该实际执行测试函数。如果 False,该函数将始终 xfail 并且不会被执行 。
参数 :strict — 严格模式(True/False )
Demo
a = 10
@pytest.mark.xfail(a > 20,reason='条件不成立,不执行' raises=AssertionError )
def test_demo()
assert item > 50
1.5、pytest.mark.usefixtures:给测试类或模块设置测试夹具
usefixtures 标记一般用于给测试类下面的测试方法统一设置测试夹具。
Demo
# TestDome这个测试类的所有测试用例均执行my_fixture这个夹具
@pytest.mark.usefixtures('my_fixture这个夹具')
class TestDome:
# 函数用例 指定测试夹具
def test_02(self):
print('----测试用例:test_01------')
# 函数用例 指定测试夹具
def test_03(self):
print('----测试用例:test_02------')
二、自定义标记
pytest 支持通过 pytest.ini 文件注册自定义的标记。以满足执行用例时,通过标记对用例进行筛选。,
2.1、注册标记
pytest.ini 文件注册标记的语法如下:
[pytest]
markers =
标记1
标记2
2.2、标记函数
Demo:
# 用例前面加载标签:@pytest.mark.标签名
@pytest.mark.main
def test_demo():
pass
2.3、标记类
Demo:
# 方式一:直接类上面打标记
@pytest.mark.main
class TestClass(object):
def test_demo1(self):
assert 10 > 20
# 方式二:通过类属性pytestmark,可以同时添加多个标记
class TestClass(object):
pytestmark = [pytest.mark.main, pytest.mark.main]
def test_demo1(self):
assert 10 > 20
三、通过标记筛选用例执行
Demo:现有用例如下:
import pytest
@pytest.mark.yuze
@pytest.mark.musen
def test_01():
print("用例一")
def test_02():
print("用例二")
@pytest.mark.musen
def test_03():
print("用例三")
@pytest.mark.musen
def test_04():
print("用例四")
@pytest.mark.yuze
def test_05():
print("用例五")
@pytest.mark.yuze
def test_06():
print("用例六")
上面 Demo 中有 6 条测试用例,分别通过 pytest.mark.yuze 和 pytest.mark.musen 进行标记了,接下来我们一起来看看如何通过标记选择用例执行。
3.1、通过单个标记筛选
语法:pytest -m ‘标签名’
Demo: pytest -m musen
执行结果如下:
========================== test session starts ==========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\project\, inifile: pytest.ini
plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2
collected 6 items / 3 deselected / 3 selected
test_mode.py ... [100%]
========================== 3 passed, 3 deselected in 0.29s ==========================
可以看到执行结果执行了 3 条用例,3 条未选中。
3.2、同时选中多个标记
语法:pytest -m “标记 1 or 标记 2”
命令:pytest -m “musen ro yuze”
执行通过 musen 或者 yuze 标记的的用例。执行结果如下:
========================== test session starts ==========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\project\, inifile: pytest.ini
plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2
collected 6 items / 1 deselected / 5 selected
test_mode.py ..... [100%]
========================== 5 passed, 1 deselected in 0.29s ==========================
从上述结果可以看到,只要加了 musen 或 yuze 这两个标记中的任意一个
语法:pytest -m “标记 1 and 标记 2”
命令:pytest -m “musen and yuze”
执行通过 musen 和 yuze 这两个标记同时标记的用例。执行结果如下
========================== test session starts ==========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\project\, inifile: pytest.ini
plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2
collected 6 items / 5 deselected / 1 selected
test_mode.py . [100%]
========================== 1 passed, 5 deselected in 0.29s ==========================
现在就有这么一个机会,我邀请你进入我们的软件测试学习交流群:914172719,备注“csdn”大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。
送给大家一句话,共勉:当我们能力不足的时候,首先要做的是内修!当我们能力足够强大的时候,就可以外寻了!
最后也为大家准备了一份配套的学习资源,你能在 公众号:【伤心的辣条】免费获取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中资料包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
好文推荐
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…
4个月自学软件测试面进阿里!如何从功能测试转成自动化…我经历了什么
6000元报了培训班,3个月后我成功“骗”进了腾讯大厂,月薪15000