Pytest精通指南(11)利用Mark标记测试用例

2024-04-15 20:36

本文主要是介绍Pytest精通指南(11)利用Mark标记测试用例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


文章目录

      • 简介
      • 应用场景
      • 标记注册流程
      • 标记注册示例
      • 获取所有标记
      • 自定义标记分类
      • 运行所有用例
      • 运行模块标记
      • 运行类标记
      • 运行多个标记
      • 验证标记重叠
      • 排除标记运行


请添加图片描述

简介

在pytest测试框架中,标记(mark)是一种用于对测试用例进行分类和标注的机制。

允许我们为测试函数添加元数据,这些元数据随后可以用于过滤排序分组或执行特定的测试子集。

标记是通过装饰器实现的,可以将它们直接应用于测试函数或类上,例如,@pytest.mark.feature可以用于标记一个测试函数属于某个特定的功能模块。
这样,当需要运行与特定功能相关的测试时,就可以通过指定-m feature参数来只执行带有该标记的测试用例。

应用场景

分类和筛选:根据功能、模块、优先级或其他属性对测试用例进行分类,并通过标记来筛选特定的测试子集。

并行执行:标记可以帮助你识别哪些测试可以并行执行,从而提高测试效率。

文档和报告:通过标记,可以为测试用例提供额外的描述或上下文,这在生成测试报告或文档时非常有用。

标记注册流程

  • pytest.ini配置文件中通过markers注册标记
  • 在模块、类、函数中应用注册的标记
  • 根据需求使用-m xxx命令运行标记的测试用例

标记注册示例

注意事项:

  • 标记名称应该使用英文,并且建议具有业务含义,这样可以更容易地理解每个标记的用途。
  • 所以自定义的标记,建议在pytest.ini配置文件中统一管理,并通过命令参数--strict-markers开启严格标记,开启后,执行pytest.ini配置文件中未注册的标记会报错,如果不开启,则只会抛出警告,而不是警告。
  • pytest.ini配置文件中的markers选项可以说是我们自定义标签的汇总和归类,方便我们清楚在项目中使用了哪些标记,而这些标记是什么意义。
[pytest]# markers选项以列表的形式管理和配置标记项
markers =# user是标记名称,:冒号后面的是标记名称的描述user: User-related test casesproduct: Product-related test casesorder: Order-related test cases

获取所有标记

执行pytest --markers可以获取所有的标记,自定义的标记展示在前。

请添加图片描述

自定义标记分类

  • 模块、函数、方法、类上都是允许注册一个或多个标记的。
  • 模块注册标记方式:pytestmark = [pytest.mark.xx1, pytest.mark.xx2]
  • 其他注册标记方式:利用装饰器完成,如@pytest.mark.xxx

test_case_01.py文件代码

import pytestpytestmark = pytest.mark.module  # 模块类标记# 可以注册多个标记,pytest.ini配置文件中存在即可
# pytestmark = [pytest.mark.module1, pytest.mark.module2]@pytest.mark.user  # 函数标记
def test_user_sign():print(f"---> test_user_sign 被调用,用户注册")@pytest.mark.user
def test_user_login():print(f"---> test_user_login 被调用,用户登录")@pytest.mark.product  # 类标记
class TestProduct:def test_create_product(self):print(f"---> test_create_product 被调用,创建产品")def test_delete_product(self):print(f"---> test_delete_product 被调用,删除产品")@pytest.mark.orderdef test_create_order(self):print(f"---> test_create_order 被调用,创建订单")@pytest.mark.orderdef test_delete_order(self):print(f"---> test_delete_order 被调用,删除订单")

test_case_02.py文件代码

def test_case_02():print(f"---> test_case_02.py 被调用")

test_case_03.py文件代码

def test_case_03():print(f"---> test_case_03.py 被调用")

运行所有用例

执行命令:pytest

执行结果:符合预期,没有被mark标记影响

请添加图片描述

运行模块标记

执行命令:pytest -m module

执行结果:符合预期,成功收集模块内所有的测试用例

请添加图片描述

运行类标记

执行命令:pytest -m product

执行结果:符合预期,成功收集类中所有的测试用例

请添加图片描述

运行多个标记

请添加图片描述

验证标记重叠

如果运行多个标记,其中标记2的作用域比标记1的作用域小时是什么情况呢?

执行命令:pytest -m "user or module"

执行结果:优先执行作用域范围大的标记下的测试用例且不会重复执行

请添加图片描述

排除标记运行

执行命令:pytest -m "not module"

执行结果:符合预期

请添加图片描述

这篇关于Pytest精通指南(11)利用Mark标记测试用例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/906858

相关文章

打造坚固的SSH防护网:端口敲门入门指南

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 打造坚固的SSH防护网:端口敲门入门指南 前言什么是端口敲门端口敲门的优点1. 增强安全性2. 动态防火墙规则3. 隐匿服务4. 改善日志管理5. 灵活性和兼容性6. 低资源消耗7. 防御暴力破解和扫描8. 便于合法用户访问9. 适用于不同类型的服务 端口敲

ROS2从入门到精通4-4:局部控制插件开发案例(以PID算法为例)

目录 0 专栏介绍1 控制插件编写模板1.1 构造控制插件类1.2 注册并导出插件1.3 编译与使用插件 2 基于PID的路径跟踪原理3 控制插件开发案例(PID算法)常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 🚀详情:《ROS2从入门到精通》 1 控制插

Pytest和Unitest框架对比

在学到自动化的时候,很多同学都遇到了Pytest和Unitest框架,有的人是两个都学,但是学的不精只是知道分别怎么用.不了解两个区别是什么.有的是犹豫到底要学习那个框架.其实要做好自动化测试,是有必要了解不同框架之间的差异化的. Pytest 特点: Pytest采用了更简洁、更灵活的语法风格,使用“assert”语句来进行断言,Pytest可以自动发现并执行以“test_”开头的函数

Chromium 调试指南2024 - 远程开发(下)

1. 引言 在《Chromium 调试指南2024 - 远程开发(上)》中,我们探讨了远程开发的基本概念、优势以及如何选择合适的远程开发模式。掌握了这些基础知识后,接下来我们将深入了解如何在远程环境中高效地进行Chromium项目的调试工作。 调试是开发过程中至关重要的一环,特别是对于像Chromium这样复杂的大型项目。远程调试不仅可以充分利用远程服务器的强大计算资源,还能确保开发环境的一致

Android WebView选择标记

前言 最近项目中有个需求是对后台返回的Html数据显示并且能够进行标记,点击标记还要能显示对应的笔记数据,那么这样的需求,对于同类型的小说来说是我们力所能及First想到的,但是你看遍所有的博客和Demo之后你会发现,他们使用的返回数据是完全不一样的,那么对于网页数据怎么来实现标记呢,首先选择获取文字就是一个问题,怎么获取到选中的文字,那么就只有重写WebView,对WebView的菜单栏进行编

Go 三色标记法:一种高效的垃圾回收策略

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO系列: 记录博主学习GO语言的笔

在Qt5中创建、读取和写入JSON文件的完整指南

Qt5 提供了一个非常方便的JSON解析器,使得在C++中处理JSON数据变得非常简单。本文将详细介绍如何在Qt5中创建、读取和写入JSON文件。 读取JSON文件的示例 假设我们有一个名为test.json的JSON文件,内容如下: {"appDesc": {"description": "SomeDescription","message": "SomeMessage"},"appNam

写给Android开发的Binder指南

为什么选用binder? Linux 已经提供了管道、消息队列、共享内存和 Socket 等 IPC 机制。那为什么 Android 还要提供 Binder 来实现 IPC 呢?主要是基于性能、稳定性和安全性几方面的原因。 性能 Socket 作为一款通用接口,其传输效率低,开销大,主要用在跨网络的进程间通信和本机上进程间的低速通信。 消息队列和管道采用存储-转发方式,即数据先从发送方缓存区拷

pytest测试框架flaky插件重试失败用例

Pytest提供了丰富的插件来扩展其功能,本章介绍下插件flaky ,用于在测试用例失败时自动重新运行这些测试用例。与前面文章介绍的插件pytest-rerunfailures功能有些类似,但是功能上不如pytest-rerunfailures插件丰富。 flaky官方并没有明确python和pytest版本限制。 flaky安装 使用pip命令安装: pip install flaky

C++初学者指南第一步---14.函数调用机制

C++初学者指南第一步—14.函数调用机制 文章目录 C++初学者指南第一步---14.函数调用机制1.记住:内存的结构2.函数调用是如何工作的3. 不要引用局部变量4. 常见编译器优化5. Inlining内联 1.记住:内存的结构 堆(自由存储) 用于动态存储期对象,例如 std::vector 的内容。空间大,可以用于大容量存储(大多数用于主内存)。可以根据需要分配