01
—
引言
上一篇总结了pytest的失败重试机制,这篇pytest的mark功能,mark翻译成中文译为《标记,做标记》,简单理解就是在用例上打一个标记,运行时,可以只运行打过标记的case。
pytest提供了标记机制,允许你使用masker对测试函数(测试用例)做标记,一个测试用例可以用多个marker。针对冒烟测试测试,我们可以使用marker标记,检查系统有无重大缺陷。因为冒烟测试通常是主流程的测试,不会包含全套测试的。
02
—
用法
# 可以标记类,也可以标记测试函数(用例),也可以标记测试模块
pytest.mark.{marker_name}
在测试类里,使用以下申明(测试类下,所有用例都被打上该标签)
class TestDemo:
# 单个标签
pytestmark = pytest.mark.已注册标签名
# 多个标签
pytestmark = [pytest.mark.标签1, pytest.mark.标签1]
在模块文件里(py文件下,所有测试函数和测试类里面的测试函数,都有会打上该标签)
import pytest
# 单个标签
pytestmark = pytest.mark.已注册标签名
# 多个标签
pytestmark = [pytest.mark.标签1, pytest.mark.标签1]
03
—
运用1-标记用例
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2021/4/20 19:24 下午
# @Author : Maynard
# @File : demo01_mark.py
# @Software: PyCharm
import pytest
class TestLogin():
@pytest.mark.success
def test_login(self):
pass
@pytest.mark.error
def test_login_error(self):
pass
@pytest.mark.error
def test_login_invalid(self):
pass
if __name__ == '__main__':
pytest.main(['-m error','demo01_mark.py'])
运行
# 1、命令行方式运行(-m 含义为mark,标记)
pytest demo01_mark.py -m "error"
# 2、直接使用main函数运行
pytest.main(['-m error','demo01_mark.py'])
结果
会发现上述有3 warning,是因为没有pytest.ini配置文件中参数,如下
04
—
结合pytest.ini配置文件使用
[pytest]
markers =
# mark 标记说明
success :this is success case
smoke :this is smoke case
login :this is login case
error :this is error case
再次运行时,就会发现没有warning了
pytest.ini配置文件说明
- 文件名必须为pytest.ini,名字不能随意改动;
- 配置文件可以放在项目根目录下, 全局生效;
- markers它的作用是注册标记,不能写成mark;
- 使用pytest.ini中参数时,是不需要导入操作的;
- 标记名‘error’后面是注释,可以写在冒号后面;
- 后续会介绍pytest.ini其他更多的功能;
05
—
运用2-标记类 or 标记模块
class TestLogin():
# 单个标记
pytestmark = [pytest.mark.error]
# 多个标记
pytestmark = [pytest.mark.error,pytest.mark.success]
def test_login(self):
pass
def test_login_error(self):
pass
def test_login_invalid(self):
pass
if __name__ == '__main__':
pytest.main(['-m error','demo01_mark.py'])
'''
此类会有三条用例运行pass,标记的都被运行,并且都通过
'''
结果
06
—
总结
- 一条用例可以有多个标记;
- 可以同时运行符合多个条件的标签,-m "success and error";
- 取消警告信息,需要结合pytest.ini文件来使用;
- 可以使用pytest.mark来标记类、模块,多个标记使用列表形式;
07
—
PS
- 后续会继续总结pytest框架,个人觉得最强py单元测试框架;