Pytest框架中pytest.mark功能

2024-06-17 01:12
文章标签 功能 框架 pytest mark

本文主要是介绍Pytest框架中pytest.mark功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

mark功能

1. 使用@pytest.mark.skip

2. 使用@pytest.mark.skipif

3. 使用 @pytest.mark.xfail

4使用@pytest.mark.parametrize

5 使用@pytest.mark.自定义标记

6 使用@pytest.mark.usefixtures

pytest 的mark功能在pytest官方文档是这样解释的:
https://docs.pytest.org/en/latest/how-to/mark.html

由于英语不好,只能百度翻译如下:

通过使用pytest.mark助手,您可以轻松地设置测试函数的元数据。您可以在API参考中找到内置标记的完整列表。或者,您可以使用CLI-pytest-标记列出所有标记,包括内置标记和自定义标记。

以下是一些内置标记:

usefixtures-在测试函数或类上使用fixtures

filterwarnings-筛选测试函数的某些警告

skip-始终跳过测试函数

skipif-如果满足特定条件,则跳过测试函数

xfail-如果满足特定条件,则产生“预期失败”结果

parameterize-对同一测试函数执行多个调用。

创建自定义标记或将标记应用于整个测试类或模块很容易。这些标记可以由插件使用,也通常用于通过-m选项在命令行上选择测试。

我们可以通过 @pytest.mark装饰器来为测试函数做标记。

1 mark功能

使用@pytest.mark的功能时,我们跳到原始代码文件中,看到其实用到的如下类

下面主要介绍几个常用的风mark功能

1. 使用@pytest.mark.skip

@pytest.mark.skip 装饰器可以用来无条件地跳过某个测试。

import pytest@pytest.mark.skip
def test_1():assert Truedef test_2():assert True

以上用例执行结果:test_1不会被执行

2. @pytest.mark.skipif

与 @pytest.mark.skip 不同,@pytest.mark.skipif 允许我们基于某个条件来跳过测试。如果给定的条件为真,则测试会被跳过。

举例:根据python版本判断是否执行某用例。

import pytest
import sys
def value_a_b():if sys.version_info < (3, 8):return 'a'else:return 'b'
@pytest.mark.skipif(str(value_a_b()=='b'),reason='当值为b时不执行用例')
def test_1():assert Truedef test_2():assert True

用例执行结果如下:当前python版本为3.10,当函数返回value_a_b返回值为‘b’时,用例被skip。

使用 @pytest.mark.xfail

该功能标记一个测试用例为预期失败。

举例:标记测试用例test_1为预期失败用例

@pytest.mark.xfail(reason="该用例执行会失败")
def test_1():assert Falsedef test_2():assert True

用例执行结果如下:

4使用@pytest.mark.parametrize

可以为测试函数提供多个输入和期望的输出,从而在一次运行多个测试用例

语法:

@pytest.mark.parametrize("arg1, arg2", [("value1","value2" ), ("value3", "value4"), ...])

  • arg1, arg2:这些是在测试函数内部使用的参数名
  • [("value1","value2" ), ("value3", "value4"), ...]:这是一个包含元组的列表,每个元组对应一组测试参数。

举例:用例中传入2个参数arg1和arg2,对应3组参数

import pytest@pytest.mark.parametrize("arg1, arg2", [(1,2), (3,4),(5,6)])
def test_1(arg1,arg2):print(f'\narg1+arg2 = {arg1+arg2}')

执行后结果:运行了3条用例

5 @pytest.mark.自定义标记

除了上述的内置标记外,我们可以使用 @pytest.mark 装饰器为测试用例添加标记。例如标记测试用例为version1_1_0,我们可以使用 -m version1_1_0来只运行这些测试用例。

使用方式跟-k参数类似,可以填and 或者or等表达式符号。

举例:将test_1和test_2标记为version1_1_0,将test_3标记为version1_1_1

#函数1
@pytest.mark.version1_1_0
def test_1():assert 1==1print('\n用例test_1执行成功')class TestCase(): @pytest.mark.version1_1_0def test_2(self): #函数2assert 1 == 1print('\n用例test_2执行成功') @pytest.mark.version1_1_1def test_3(self): #函数3assert 1 == 1print('\n用例test_3执行成功')

pytest.main(['-v','-m version1_1_0','test_case3.py']),执行结果如下:只执行被标记的用例test_1,test_2

6 使用@pytest.mark.usefixtures

在测试类和测试函数中使用@pytest.mark.usefixtures运行定义的fixture函数

举例:定义一个fixture

@pytest.fixture(scope='class')
def class_setup_teardown():print("\nClass setup (equal to setup_class)")# 设置代码 yieldprint("\nClass teardown (equal to teardown_class)")# 清理代码

在测试类中注明使用上面定义的 fixture

@pytest.mark.usefixtures("class_setup_teardown")
class Testcase:def test_one(self):print("\nRunning test_one")# 测试代码def test_two(self):print("\nRunning test_two")# 测试代码

用例执行后结果如下:两种方式都实现了测试类setup和teardown的功能


共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,点个赞和关注,谢谢大家

这篇关于Pytest框架中pytest.mark功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

录音功能在哪里? 电脑手机等设备打开录音功能的技巧

《录音功能在哪里?电脑手机等设备打开录音功能的技巧》很多时候我们需要使用录音功能,电脑和手机这些常用设备怎么使用录音功能呢?下面我们就来看看详细的教程... 我们在会议讨论、采访记录、课堂学习、灵感创作、法律取证、重要对话时,都可能有录音需求,便于留存关键信息。下面分享一下如何在电脑端和手机端上找到录音功能

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功