1、Pytest中的Mark介绍

Mark主要用于在测试用例/测试类中给用例打标记,实现测试分组功能,并能和其它插件配合设置测试方法执行顺序等。

在实际工作当中,我们要写的自动化用例会比较多,而且不会都放在一个.py文件里。

如下图,现在需要只执行红色部分的测试方法,其它方法不执行。

2、Mark的使用

在Pytest当中,先给用例打标记,在运行时,通过标记名来过滤测试用例。

步骤:

  1. @pytest.mark.标签名标记在需要执行的用力上。(标签名自定义)
  2. 执行测试:pytest 测试套件名 -m 标签名
  3. 这样执行会有警告,提示标签未注册。

示例:

# 如:在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分组执行测试用例的更多相关文章

  1. 『德不孤』Pytest框架 — 3、Pytest的基础说明

    目录 1.Pytest参数介绍 2.Pytest框架用例命名规则 3.Pytest Exit Code说明 4.pytest.ini全局配置文件 5.Pytest执行测试用例的顺序 1.Pytest参 ...

  2. 『德不孤』Pytest框架 — 1、Pytest测试框架介绍

    目录 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5.Pytest框架和Unittest框架区别 (1)Unittes ...

  3. 『德不孤』Pytest框架 — 2、Pytest的基本使用

    目录 1.Pytest安装 2.Pytest常用插件 3.Pytest运行的第一个例子 4.Pytest框架的运行方式 5.在PyCharm中以Pytest的方式运行测试用例 1.Pytest安装 C ...

  4. 『德不孤』Pytest框架 — 9、Pytest测试报告

    目录 1.pytest-html插件 2.Allure测试报告 (1)Allure框架说明 (2)Allure框架的使用 1.pytest-html插件 Pytest可以通过命令行方式,生成xml/h ...

  5. 『德不孤』Pytest框架 — 10、setUp()和tearDown()函数

    目录 1.setUp()和tearDown()函数介绍 2.setUp()和tearDown()函数作用 3.setUp()和tearDown()函数说明 4.示例 (1)方法级 (2)类级 (3)函 ...

  6. 『德不孤』Pytest框架 — 11、Pytest中Fixture装饰器(一)

    目录 1.Fixture装饰器的用途 2.Fixture参数说明 3.Fixture装饰器简单应用 4.yield执行后置函数 1.Fixture装饰器的用途 做测试前后的初始化设置,如测试数据准备, ...

  7. 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件

    目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...

  8. 『德不孤』Pytest框架 — 15、Pytest参数化

    目录 1.Pytest参数化说明 2.Pytest参数化方式 3.parametrize装饰器参数说明 4.Pytest参数化(单个参数) 5.Pytest参数化(多个参数) 6.ids参数说明 1. ...

  9. 『德不孤』Pytest框架 — 4、Pytest跳过测试用例

    目录 1.无条件跳过skip 2.有条件跳过skipif 3.练习 自动化测试执行过程中,我们常常出现这种情况:因为功能阻塞,未实现或者环境有问题等等原因,一些用例执行不了, 如果我们注释掉或删除掉这 ...

随机推荐

  1. pycharm创建脚本头文件模板

    代码头文件信息可以包括:python 解析器的位置.字符集.作者信息.创建脚本时间等,pycharm工具创建头部信息模板操作步骤如下: 设置头文件:文件-->设置-->编辑器-->文 ...

  2. 我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. jsp文本框输入限制问题

    1.jsp文本窗口实现控制输入格式 <input onkeyup = "value=value.replace(/[\W]/g,'')" onbeforepaste=&quo ...

  4. 【一个idea】YesSql,一种在经典nosql数据库redis上实现SQL引擎的方案(我就要开历史的倒车)

    公众号链接 最高级的红酒,一定要掺上雪碧才好喝. 基于这样的品味,我设计出了一套在经典nosql数据库redis上实现SQL引擎的方法.既然redis号称nosql,而我偏要把SQL加到redis上, ...

  5. 刷机错误ERROR:STATUS_BROM_CMD__FAIL

    ERROR:STATUS_BROM_CMD_STARTCMD_FAIL window驱动没有安装好,几乎所有安装包都有问题,很难成功,成功了也很慢.这是因为之前检测到且烧写错误,然后上一次的驱动错误连 ...

  6. ROS之arduino交互

    一.第一种安装方式(不支持自定义消息) 第一步打开官网 http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup 第二 ...

  7. gin中只绑定url查询字符串

    package main import ( "github.com/gin-gonic/gin" "log" ) type Person struct{ Nam ...

  8. 最大公因数与最小公倍数-gcd&lcm

    一.一些性质 \(gcd(a,b)=gcd(b,a)\) \(gcd(-a,b)=gcd(a,b)\) \(gcd(a,a)=|a|, gcd(a,0)=|a|\) \(gcd(a,1)=1\) \( ...

  9. VUE3 之 作用域插槽 - 这个系列的教程通俗易懂,适合新手

    1. 概述 破窗效应告诉我们: 当一个建筑物窗户的玻璃完好无损时,很少有人想去破坏它,当有一个人破坏了一块窗户的玻璃,其他窗户的玻璃也很快会被人破坏. 同理,一个很干净的地方,人们不好意思去丢垃圾,但 ...

  10. webpack搭建react+ts+eslint项目

    [初始化项目] mkdir react_ts_eslint cd react_ts_eslint npm init [生成ts配置文件] tsc --init [安装相关依赖] npm install ...