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. X-Forwarded-for漏洞解析

    首先了解X-Forwarded-for(简称:XFF) X-Forwarded-for:简称XFF,它代表客户端,也就是HTTP的请求真实的IP,只有在通过了HTTP代理或者负载均衡器时才会添加该项. ...

  2. dart系列之:和null说再见,null使用最佳实践

    目录 简介 不需要初始化对象为null null的三元操作符 如果在使用中需要判断类型是否为空,则不要使用late 本地变量的类型提升 总结 简介 null可能是大家在编写程序中最为头疼的一个东西,稍 ...

  3. 小程序onShareAppMessage有点迷

    小程序遇到的问题 起因 目前项目需求是分享时携带参数去进行裂变,但是在查看微信文档后发现有onShareAppMessage这个页面处理事件可以使用.事件可以使用return一个Object,用于自定 ...

  4. 【记录一个问题】linux+opencv+cuvid解码1080P视频,当使用CUDA核函数的时候,必然崩溃

    崩溃的信息如下: 1 OpenCV(4.1.0-dev) Error: Gpu API call (invalid configuration argument) in videoDecPostPro ...

  5. Cesium入门4 - 创建Cesium Viewer

    Cesium入门4 - 创建Cesium Viewer Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 任何Ce ...

  6. java-异常-异常应用

    1 package p1.exception; 2 3 4 /* 5 * 老师用电脑上课. 6 * 7 * 问题领域中涉及两个对象. 8 * 老师,电脑. 9 * 10 * 分析其中的问题. 11 * ...

  7. How to check in Windows if you are using UEFI

    You might be wondering if Windows is using UEFI or the legacy BIOS, it's easy to check. Just fire up ...

  8. python16day

    昨日回顾 自定义模块 模块的两种执行方式:脚本方式.调用方式 name 模块导入的方式 相对导入 random:获取随机数相关 今日内容 常用模块的介绍 time:和时间相关 datetime os ...

  9. Linux 学习2

    1.配置好阿里云yum源生成yum缓存下载nginx,并且启动nginx服务,使用浏览器访问,nginx页面 yum源的工作目录是? https://www.cnblogs.com/dlh-lmsh/ ...

  10. NOI Online 2021 入门组 T1

    Description 题目描述 Alice.Bob 和 Cindy 三个好朋友得到了一个圆形蛋糕,他们打算分享这个蛋糕. 三个人的需求量分别为 \(a, b, c\),现在请你帮他们切蛋糕,规则如下 ...