『德不孤』Pytest框架 — 6、Mark分组执行测试用例
1、Pytest中的Mark介绍
Mark主要用于在测试用例/测试类中给用例打标记,实现测试分组功能,并能和其它插件配合设置测试方法执行顺序等。
在实际工作当中,我们要写的自动化用例会比较多,而且不会都放在一个.py文件里。
如下图,现在需要只执行红色部分的测试方法,其它方法不执行。

2、Mark的使用
在Pytest当中,先给用例打标记,在运行时,通过标记名来过滤测试用例。
步骤:
@pytest.mark.标签名标记在需要执行的用力上。(标签名自定义)- 执行测试:
pytest 测试套件名 -m 标签名 - 这样执行会有警告,提示标签未注册。
示例:
# 如:在test_01.py文件的testa()方法上进行mark标识。
@pytest.mark.hellotest
def test_a():
"""购物下单"""
print("test_01文件的函数a")
assert True
# 其他两个文件中的方法同理。
执行命令,查看结果:
if __name__ == '__main__':
pytest.main(["-vs", "-m", "hellotest"])
# 同理也可以用命令行的方式执行。
"""
执行结果:
test_01.py::test_a test_01文件的函数a
PASSED
test_02.py::test_b test_02文件的函数b
PASSED
test_03.py::test_a test_03文件的函数a
PASSED
3 passed, 3 deselected, 3 warnings
说明:3个用例通过,3个用例没有选择,有3个警告
"""
这样就简单的实现了Mark标记的使用,但是我们在工作中不这样用,我们需要把Mark标记进行注册。
3、Mark的注册和使用
Mark标签官方提供的注册方式有2种,这里只提供一种最简单直接的方式:
通过pytest.ini配置文件注册。
在pytest.ini文件当中配置:
[pytest] # 固定的section名
markers= # 固定的option名称,注意缩进。
标签名1: 标签名的说明内容。
标签名2: 不写也可以
标签名N
示例:还是上面的练习。
pytest.ini配置文件内容如下:
[pytest]
addopts = -vs
testpaths = scripts
python_files = test*
python_classes = Test*
python_functions = test*
markers=
hellotest: Mark Description
smoke
执行命令,查看结果:
if __name__ == '__main__':
pytest.main(["-m", "hellotest"])
"""
执行结果:
test_01.py::test_a test_01文件的函数a
PASSED
test_02.py::test_b test_02文件的函数b
PASSED
test_03.py::test_a test_03文件的函数a
PASSED
3 passed, 3 deselected,
说明:3个用例通过,3个用例没有选择,没有警告了。
"""
4、使用Mark完成失败重试
只执行test_01.py文件中的测试用例:
import pytest
@pytest.mark.hellotest
def test_a():
"""购物下单"""
print("test_01文件的函数a")
assert True
@pytest.mark.Fail_retry
def test_b():
"""购物下单"""
print("test_01文件的函数b")
assert False
if __name__ == '__main__':
pytest.main(["-m", "Fail_retry"])
"""
执行结果:
test_01.py::test_b test_01文件的函数b
RERUN
test_01.py::test_b test_01文件的函数b
RERUN
test_01.py::test_b test_01文件的函数b
FAILED
1 failed, 1 deselected, 2 rerun
说明:1个失败,1个取消选择,2次重跑用例
"""
下面是pytest.ini配置文件内容:
[pytest]
addopts = -vs --reruns 2(配置重跑两次)
testpaths = scripts
python_files = test_01.py
python_classes = Test*
python_functions = test*
markers=
hellotest: Mark Description
Fail_retry:
5、扩展
1)多个Mark标签可以用在同一个用例上。
@pytest.mark.hello
@pytest.mark.world
def test_a():
"""购物下单"""
print("test_01文件的函数a")
assert True
2)Mark标签也可以用到测试类上。
@pytest.mark.hello
class Test_Mark:
@pytest.mark.world
def test_a(self):
"""购物下单"""
print("test_01文件的函数a")
assert True
工作中的使用场景:冒烟测试,分模块执行测试用例,分接接口执行测试用例等。
参考:
『德不孤』Pytest框架 — 6、Mark分组执行测试用例的更多相关文章
- 『德不孤』Pytest框架 — 3、Pytest的基础说明
目录 1.Pytest参数介绍 2.Pytest框架用例命名规则 3.Pytest Exit Code说明 4.pytest.ini全局配置文件 5.Pytest执行测试用例的顺序 1.Pytest参 ...
- 『德不孤』Pytest框架 — 1、Pytest测试框架介绍
目录 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5.Pytest框架和Unittest框架区别 (1)Unittes ...
- 『德不孤』Pytest框架 — 2、Pytest的基本使用
目录 1.Pytest安装 2.Pytest常用插件 3.Pytest运行的第一个例子 4.Pytest框架的运行方式 5.在PyCharm中以Pytest的方式运行测试用例 1.Pytest安装 C ...
- 『德不孤』Pytest框架 — 9、Pytest测试报告
目录 1.pytest-html插件 2.Allure测试报告 (1)Allure框架说明 (2)Allure框架的使用 1.pytest-html插件 Pytest可以通过命令行方式,生成xml/h ...
- 『德不孤』Pytest框架 — 10、setUp()和tearDown()函数
目录 1.setUp()和tearDown()函数介绍 2.setUp()和tearDown()函数作用 3.setUp()和tearDown()函数说明 4.示例 (1)方法级 (2)类级 (3)函 ...
- 『德不孤』Pytest框架 — 11、Pytest中Fixture装饰器(一)
目录 1.Fixture装饰器的用途 2.Fixture参数说明 3.Fixture装饰器简单应用 4.yield执行后置函数 1.Fixture装饰器的用途 做测试前后的初始化设置,如测试数据准备, ...
- 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件
目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...
- 『德不孤』Pytest框架 — 15、Pytest参数化
目录 1.Pytest参数化说明 2.Pytest参数化方式 3.parametrize装饰器参数说明 4.Pytest参数化(单个参数) 5.Pytest参数化(多个参数) 6.ids参数说明 1. ...
- 『德不孤』Pytest框架 — 4、Pytest跳过测试用例
目录 1.无条件跳过skip 2.有条件跳过skipif 3.练习 自动化测试执行过程中,我们常常出现这种情况:因为功能阻塞,未实现或者环境有问题等等原因,一些用例执行不了, 如果我们注释掉或删除掉这 ...
随机推荐
- Python与Javascript相互调用超详细讲解(2022年1月最新)(一)基本原理 Part 1 - 通过子进程和进程间通信(IPC)
TL; DR 适用于: python和javascript的runtime(基本特指cpython[不是cython!]和Node.js)都装好了 副语言用了一些复杂的包(例如python用了nump ...
- Android官方文档翻译 十八 4.2Pausing and Resuming an Activity
Pausing and Resuming an Activity 暂停和恢复一个activity This lesson teaches you to 这节课教给你 Pause Your Activi ...
- Solon 开发,六、提取Bean的函数进行定制开发
Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...
- leetcode 509. 斐波那契数
问题描述 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0, F(1) = 1 F(N) ...
- ES6随笔D1
1.数值解构赋值 ES6 允许按照一定模式,可以从数组中提取值,按照对应位置,对变量赋值,这被称为解构. 解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象.由于undefined和n ...
- 【体验】在Adobe After Effects CC 2018中使用脚本创建窗口
1.主界面 2.脚本编辑器主界面 3.对象浏览器 在脚本编辑器中按F1 4.写一段 ScriptUI var win = new Window('window', 'my win', [100, 10 ...
- 实习之bii--源码安装bind9
刚学习linux时安装过fctix小企鹅输入法,那个比这个安装还要复杂,不过在这里也写一写,还是用的./configure make makeinstall这套命令.不像fctix有些高版本开始用cm ...
- gin框架中项目的初始化
核心知识点 json配置文件解析成结构体 将路由对应的接口抽离到单独的文件中,main函数中直接注册路由即可 项目目录图 项目代码 app.json代码 { "app_name": ...
- linux编译安装(全面教程解析)
目录 一:编译安装 1.编译安装特点 2.编译安装 简介 编译安装 1.使用源代码,编译打包软件 2,编译安装,只能按照源代码 一:编译安装 1.编译安装特点 1.可以自定制软件 2.按需求构建软件 ...
- ElementUI常遇到的一些问题
一.form 下面只有一个 input 时回车键刷新页面 原因是:触发了表单默认的提交行为,给el-form 加上 @submit.native.prevent 就行了. <el-form in ...