Pytest教程:Pytest的跳过与标记功能用法

一、pytest跳过功能 


1. 使用 @pytest.skip 装饰器跳过测试用例

Pytest中的 @pytest.skip 装饰器允许你跳过指定的测试用例。你可以将该装饰器应用于测试函数或测试类上。

import pytest@pytest.mark.skip(reason="Skipping this test case")
def test_skip():assert 1 + 1 == 3@pytest.mark.skipif(sys.version_info < (3, 7), reason="Python version is below 3.7")
def test_skip_if():assert 2 * 3 == 6@pytest.mark.skip("Outdated feature, skipping test")
def test_skip_with_reason():assert "hello".upper() == "HELLO"

在上面的示例中,我们使用了不同的方式来标记需要跳过的测试用例。@pytest.skip 装饰器可以接受一个可选的 reason 参数,用于提供跳过测试的原因。

2. 使用 pytest.skip() 函数动态跳过测试用例

除了使用装饰器跳过测试用例外,你还可以在测试函数中使用 pytest.skip() 函数来动态地跳过测试。

import pytestdef test_skip_dynamic():condition = False  # 设置一个条件,决定是否跳过测试用例if condition:pytest.skip("Skipping this test dynamically")assert 10 / 2 == 5

在上述示例中,我们根据条件动态地决定是否跳过测试用例。如果条件为真,那么测试用例将被跳过,并在测试报告中显示跳过的原因。

3. 使用 pytest.mark.skip 和 pytest.mark.skipif 跳过测试函数或模块

除了跳过单个测试用例外,你还可以使用 pytest.mark.skippytest.mark.skipif 标记整个测试函数或测试模块。

import pytest@pytest.mark.skip(reason="Skipping the entire test function")
def test_skip_function():assert 1 + 1 == 3@pytest.mark.skipif(sys.platform != "win32", reason="Only runs on Windows platform")
def test_skip_module():assert "hello" != "world"

在上面的示例中,我们使用 @pytest.mark.skip 装饰器标记了整个测试函数,以及使用 @pytest.mark.skipif 装饰器标记了整个测试模块。这样,这些被标记的测试将在运行时被跳过。

4. 应用场景

跳过功能在以下常见的应用场景中非常有用:

  • 当某些条件不满足时,可以跳过相关的测试用例。例如,跳过需要特定环境或特定版本的测试。
  • 当某些功能被废弃或不再可用时,可以跳过相关的测试用例,以避免浪费时间和资源。
  • 在进行持续集成(CI)时,可以根据特定的条件跳过一些测试用例,以加快构建和部署过程。

二、pytest标记功能 


1. 使用 @pytest.mark 装饰器添加标记

你可以使用 @pytest.mark 装饰器为测试函数、类或模块添加标记。这样可以将不同的标记应用于不同的测试,以便在运行时根据标记执行相应的操作。

import pytest@pytest.mark.smoke
def test_login():assert True@pytest.mark.regression
class TestUser:def test_create_user(self):assert True

在上述示例中,我们使用 @pytest.mark 装饰器分别为一个测试函数和一个测试类添加了不同的标记(smokeregression)。这样就可以根据标记来执行特定类型的测试。

2. 运行带有特定标记的测试

你可以使用 -m 参数来运行带有特定标记的测试。例如,要只运行带有 smoke 标记的测试,可以运行以下命令:

pytest -m smoke

这将只运行带有 smoke 标记的测试用例。

3. 自定义标记参数化

除了预定义的标记外,你还可以定义自己的标记,并将其用于参数化测试。这样可以为不同的测试场景提供更多灵活性。

import pytest@pytest.mark.parametrize("input, expected", [(1, 2),(2, 4),(3, 6)
], ids=["input_1", "input_2", "input_3"])
def test_multiply(input, expected):assert input * 2 == expected

在上述示例中,我们定义了一个带有参数化标记的测试函数。这样可以为不同的输入数据提供不同的期望输出,并在报告中使用自定义的标识符(ids)来标记每组参数化测试。

4.标记优先级 

Pytest 中的标记优先级是通过 @pytest.mark 装饰器的 priority 参数实现的。你可以为测试函数、类或模块添加优先级标记,以控制它们的执行顺序。

import pytest@pytest.mark.smoke
@pytest.mark.priority(1)
def test_login():assert True@pytest.mark.regression
@pytest.mark.priority(2)
class TestUser:def test_create_user(self):assert True

 在上述示例中,我们通过 @pytest.mark.priority 装饰器为测试函数和测试类分别设置了不同的优先级。这样就可以确保在运行测试时,具有更高优先级的测试将首先执行。

当你运行带有优先级标记的测试时,Pytest 将按照优先级顺序执行测试用例。例如,要运行带有优先级标记的测试,可以运行以下命令:

pytest --prioritize

5. 标记应用场景

标记功能在以下情况下特别有用:

  • 将测试用例分组为不同的类别(如 smoke、regression、performance 等),以便根据需要执行或排除特定类型的测试。
  • 为测试用例添加额外的元数据,以便在运行时执行特定操作或生成详细的测试报告。
  • 使用标记来控制测试的执行顺序或并发度。
  • 通过自定义标记实现参数化测试,灵活地处理不同的测试场景。
  • 确保关键测试优先执行:你可以为关键测试添加高优先级标记,以确保它们在其他测试之前运行,从而及早发现潜在问题。
  • 控制测试顺序:如果你需要控制测试的执行顺序,可以使用优先级标记来定义测试的执行顺序,以满足特定需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源文生图大模型Playground v2.5发布:超越SD、DALL·E 3和 Midjourney

前言 在AI技术迅速发展的今天&#xff0c;文生图模型成为了艺术创作、设计创新等领域的重要工具。Playground v2.5的发布&#xff0c;不仅在技术上取得了突破&#xff0c;更在开源文化的推广与实践上迈出了重要一步。 Huggingface模型下载&#xff1a;https://huggingface.co/…

虚拟化相关面试题集锦(1)—— 如何在QEMU/KVM中跑通AI相关训练

接前一篇文章&#xff1a;虚拟化相关面试题集锦&#xff08;0&#xff09;—— 引言 问题1 问&#xff1a;如何在QEMU/KVM虚拟机上跑通AI相关模型的训练和测试&#xff0c;并对虚拟机的GPU资源的分配进行配置和优化&#xff1f; 备注&#xff1a;此问题是笔者年上周参加中科时…

图论练习5

Going Home Here 解题思路 模板 二分图最优匹配&#xff0c;前提是有完美匹配&#xff08;即存在一一配对&#xff09;左右集合分别有顶标&#xff0c;当时&#xff0c;为有效边&#xff0c;即选中初始对于左集合每个点&#xff0c;选择其连边中最优的&#xff0c;然后对于每…

Sqli-labs靶场第18关详解[Sqli-labs-less-18]自动化注入-SQLmap工具注入

Sqli-labs-Less-18 通过测试发现&#xff0c;在登录界面没有注入点&#xff0c;通过已知账号密码admin&#xff0c;admin进行登录发现&#xff1a; 返回了User Agent&#xff0c;设想如果在User Agent尝试加上注入语句&#xff08;报错注入&#xff09;&#xff0c;测试是否会…

react hooks useReducer使用

在React中&#xff0c;useReducer是一个用于管理组件状态的Hook&#xff0c;它特别适用于处理复杂的状态逻辑和多个相关状态。这个Hook接收一个reducer函数&#xff08;与Redux中的reducer概念类似&#xff09;和一个初始状态作为参数&#xff0c;并返回一个新的state值以及一个…

Unity中关于继承ScriptableObject的类

在游戏中我们会经常看到一些.asset的配置文件&#xff0c;而这些文件就是用一个自定义的类去继承ScriptableObject来生成的。比如当前有一些零散特效需要预加载&#xff0c;这个时候我们可以声明一个类去保存这些零散特效对象的信息&#xff0c;然后统一读取加载。 代码&#…

JavaScript极速入门(1)

初识JavaScript JavaScript是什么 JavaScript(简称JS),是一个脚本语言,解释型或者即时编译型语言.虽然它是作为开发Web页面的脚本语言而著名,但是也应用到了很多非浏览器的环境中. 看似这门语言叫JavaScript,其实在最初发明之初,这门语言的名字其实是在蹭Java的热度,实际上和…

.jsonl 格式文件的解释

根据 CHATGPT .jsonl 文件格式是一种文本文件格式&#xff0c;通常用于存储每行一个JSON对象的数据。.jsonl 文件的每一行都是一个独立的JSON对象&#xff0c;这些对象之间没有任何分隔符。 以下是一个示例.jsonl文件的内容&#xff1a; {"name": "John"…

【LeetCode】876_链表的中间结点_C

题目描述 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 https://leetcode.cn/problems/middle-of-the-linked-list/description/ 示例 提示&#xff1a; 链表的结点数范围是 [1, 100]1 <…

Subversion svn 开源的版本控制系统入门介绍 VCS

拓展阅读 Subversion 开源的版本控制系统入门介绍 VCS Git 开源的版本控制系统-01-入门使用介绍 Git 开源的版本控制系统-02-base usage 基本用法 Git 开源的版本控制系统-03-时间数据回溯 Git 开源的版本控制系统-04-branch manage 分支管理 Git 开源的版本控制系统-05-…

SpringBoot使用Jackson 序列化小妙招

前言 SpringBoot默认使用Jackson进行json数据的序列化&#xff0c;在这个过程中总会有些奇奇怪怪的需求&#xff0c;对于这些小需求要么增加一堆配置类&#xff0c;要么重写方法&#xff0c;其实都有点杀鸡用牛刀了&#xff0c;那么我来列举下日常开发中这些小需求如何通过配置…

UE5数字孪生系列笔记(一)

智慧城市数字孪生系统 虚幻引擎连接数据库 将自己的mysql版本的libmysql.dll替换掉插件里面的libmysql.dll 然后将这个插件目录复制到虚幻项目目录下 然后添加这个插件即可 新建一个UMG&#xff0c;添加一个按钮试试&#xff0c;数据库是否连接 将UI添加到视口 打印是否连接…

力扣爆刷第87天之hot100五连刷21-25

力扣爆刷第87天之hot100五连刷21-25 文章目录 力扣爆刷第87天之hot100五连刷21-25一、240. 搜索二维矩阵 II二、160. 相交链表三、206. 反转链表四、234. 回文链表五、141. 环形链表 一、240. 搜索二维矩阵 II 题目链接&#xff1a;https://leetcode.cn/problems/search-a-2d-…

前端每日一练 :相邻元素、嵌套元素Margin 塌陷、合并问题如何额解决?

相邻元素外边距塌陷合并 表现示例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</t…

Python与FPGA——sobel边缘检测

文章目录 前言一、sobel边缘检测二、Python sobel边缘检测三、FPGA sobel边缘检测总结 前言 边缘存在于目标、背景区域之间&#xff0c;它是图像分割所依赖的较重要的依据&#xff0c;也是图像匹配的重要特征。边缘检测在图像处理和计算机视觉中&#xff0c;尤其在图像的特征提…

LVS----DR模式

一、LVS-DR工作原理 1、LVS-DR数据包流向分析 客户端发送请求到Director Server (负载均衡器)&#xff0c;请求的数据报文&#xff08;源IP是CIP&#xff0c;目标IP是VIP&#xff09;到达内核空间。Director Server 和Real Server 在同一个网络中&#xff0c;数据通过二层数据…

turtle海龟画图

10. 画笔设置 1. 画笔设置 海龟库绘制时的线条是可以设置的&#xff0c;例如画笔的颜色&#xff0c;方法名如下&#xff1a; 方法名方法说明.pencolor(‘red’)设置画笔颜色&#xff0c;例如红色 import turtle #导入海龟图库 turtle.shape(turtle) #召唤海龟 turtle.pencolo…

【vue3之组合式API及其新特性】

组合式API及其新特性 一、setup1.写法2.如何访问3.语法糖4.同步返回对象 二、reactive()和ref()1.reactive()2.ref() 三、computed四、watch函数1.侦听单个数据2.侦听多个数据3. immediate4. deep5.精确侦听对象的某个属性 五、生命周期函数六、组件通信1.父传子2. 子传父 七、…

Java开发从入门到精通(一):Java的基础语法进阶

Java大数据开发和安全开发 &#xff08;一&#xff09;Java注释符1.1 单行注释 //1.2 多行注释 /* */1.3 文档注释 /** */1.4 各种注释区别1.5 注释的特点1.5 注释的快捷键 &#xff08;二&#xff09;Java的字面量&#xff08;三&#xff09;Java的变量3.1 认识变量3.2 为什么…

(亲测可用)Adobe Photoshop 2024下载与安装

背景介绍&#xff1a;Adobe Photoshop 2024 是全球最受欢迎的图像编辑软件之一&#xff0c;2024年的版本带来了一系列令人印象深刻的功能&#xff1a; AI增强的自动选择和蒙版工具&#xff1a;现在&#xff0c;用户可以更轻松地选择和处理复杂的图像元素。更多的3D渲染功能&…