单元测试框架Pytest的基本操作

Pytest基本操作

  • 1. 详解
    • 1.1 命名规则:
    • 1.2 自定义查找规则:
    • 1.3 3种运行方式
    • 1.4 执行顺序
  • 2. 断言
    • 2.1 定义
    • 2.2 断言的规则
  • 3. mark
    • 3.1 mark的作用
    • 3.2 mark的标记方式
    • 3.3 注册标签名
    • 3.4 skip跳过标记
  • 4. pytest的参数化
  • 5. pytest的夹具(fixture测试夹具)
    • 5.1. 作用
    • 5.2. 夹具应用场景
    • 5.3. 夹具的定义及使用:
    • 5.4. fixture的范围

1. 详解

一文5000字详解Pytest单元测试,看完不会来打我【保姆级教程】

1.1 命名规则:

 🔸 模块名: test_*.py或者是 *_test.py(即以test_开头或_test结尾的py文件)
​ 🔸类名:Test开头,且类里没有__init__函数(否则容易报错)
​ 🔸方法名:test_开头

1.2 自定义查找规则:

我们还可以自定义查找的规则,但自定义的规则配置文件要放在你要运行的项目的根目录下(见上图),且配置文件要严格以pytest.ini命名,pytest.ini文件内容举例如下:

[pytest]	# 只能修改=右边的值
python_files = demo_*.py	# 模块名以demo_开头
python_functions = demo_*	# 方法名以demo_开头
python_classes = Demo*	# 类名名以Demo开头

1.3 3种运行方式

【pytest】一、pytest的3种运行方式,运行指定测试用例,跳过测试用例

1.4 执行顺序

pytest有自己内置的执行顺序规则,一般是从上往下,即同一个py文件中,从上往下执行测试用例。

2. 断言

参考文章:pytest篇3-断言详解

2.1 定义

断言就是在测试代码中添加的一些判断逻辑,用于判断被测程序的实际输出是否符合预期结果。如果实际输出结果与预期不符,则断言抛出异常,测试失败;否则测试通过。(添加断言在对应的方法里面,做判断测试用例结果是否满足预期)

2.2 断言的规则

pytest断言的规则如下:

  1. 如果表达式为False,则断言失败,抛出AssertionError异常;
  2. 如果表达式为True,则断言成功,测试通过;
  3. 如果使用assert not表达式,则当表达式为True时,断言失败,测试失败;
  4. 如果使用assert == 表达式,则当两个表达式的值相等时,断言成功,否则断言失败。
    在这里插入图片描述

3. mark

【pytest】使用 mark 标记及运行测试用例,注册、管理 mark 标记

3.1 mark的作用

在实际工作中,我们要写的自动化用例会比较多,也不会都放在一个py文件中,如果有几十个py文件,上百个方法,而我们只想运行当中部分的用例时怎么办?
pytest提供了一个非常好用的mark功能,可以给测试用例打上各种各样的标签,运行用例时可以指定运行某个标签。mark功能作用就是灵活的管理和运行测试用例。

pytest的mark功能允许我们通过自定义标记来对测试用例进行分组、选择和过滤

3.2 mark的标记方式

​ 标签既可以打到方法上,也可以打到类上,标记的两种方式:
🍊 直接标记类或方法或函数:@pytest.mark.标签名
🍊 类属性:pytestmark = [pytest.mark.标签名, pytest.mark.标签名],需要注意的是属性名称是固定的

使用mark标记测试用例非常简单,只需要在测试函数或类上方添加注解即可。例如,我们可以使用@pytest.mark.feature来标记一个测试函数属于某个特定的功能模块:

3.3 注册标签名

我们要想运行已经打好标记的函数,还需要对标签名进行注册,告诉pytest有哪些标签,如果不进行注册运行时(pytest的高级版本)可能会报警告让你进行注册。

​ 我们只需要在项目根目录下创建一个pytest.ini文件,注意文件名是不可修改的,否则pytest会找不到。内容格式如下

 - 首先在项目根目录创建一个文件 pytest.ini ,这个是 pytest 的配置文件; 然后在 pytest.ini 文件的- markers 中写入你的 mark 标记, 冒号 “:” 前面是标记名称,后面是 mark 标记的说明,可以是空字符串;- 注意:pytest.ini 文件中只能使用纯英文字符,绝对不能使用中文的字符(尤其是冒号和空格)!
# pytest.ini
# 只能修改=右边的值
[pytest]	
python_files = demo_*.py	# 模块名以demo_开头
python_functions = demo_*	# 方法名以demo_开头
python_classes = Demo*	# 类名名以Demo开头# 注册标签
markers = login   : 'marks tests as login'logout  : 'marks tests as logout'success : 'marks tests as success'failed  : 'marks tests as failed'

规范使用 mark 标记:
注册完 mark 标记之后 pytest 便不会再告警,但是有时手残容易写错 mark 名,导致 pytest 找不到用例,一时想不开很难debug,尤其是团队协作时很容易出现类似问题,所以我们需要 “addopts = --strict” 参数来严格规范 mark 标记的使用!

  • 在 pytest.ini 文件中添加参数 “addopts = --strict”;
  • 注意要另起一行,不要在 markers 中添加;
  • 添加该参数后,当使用未注册的 mark 标记时,pytest会直接报错:“ ‘xxx’ not found in markersconfiguration option ”,不执行测试任务; 注意:pytest.ini
  • 配置文件不支持注释,不支持注释,不支持注释…
# pytest.ini[pytest]
markers 

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

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

相关文章

web前端框架设计第十一课-常用插件

web前端框架设计第十一课-常用插件 一.预习笔记 1.路由的基础使用 2.动态路由 3.嵌套路由 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药,犹豫拖延将不断滋养恐惧

Web渗透-MySql-Sql注入:联合查询注入

SQL注入(SQL Injection)是一种网络攻击技术,攻击者通过将恶意的SQL代码插入到应用程序的输入字段,从而欺骗应用程序执行未经授权的操作。这种攻击方式可以导致严重的安全问题,包括: 数据泄露:攻…

windows和linux下的库文件比较

在Windows和Linux操作系统中,库文件(lib、dll、.a、.so)都扮演着重要的角色,但它们之间存在一些关键的区别。以下是这些库文件之间的主要差异: Windows lib 静态链接库(Static Link Library)…

UE5 UE4 快速定位节点位置

在材质面板中,找到之前写的一个节点,想要修改,但是当时写的比较多,想要快速定位到节点位置. 在面板下方的 Find Results面板中,输入所需节点,找结果后双击,就定位到该节点处。 同理,…

CGAL 获取网格相交面片

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里使用CGAL中的方法获取两个网格相交的面片,原理其实很简单,就是单纯的对每个面片进行相交测试,不过为了加快计算效率,CGAL中采用了AABB树这一结构来实现了这一过程。 二、实现代码 #include <iostream&g…

【CUDA】Nsight profile驱动的CUDA优化

前置准备 安装NVIDIA Nsight Compute。 安装好后选择使用管理员权限启动下载官方 Demo 代码官方博客Shuffle warp 1. 任务介绍及CPU版本 1.1 任务介绍 任务理解&#xff1a; 有一个 L x M 的矩阵 M 1 M_1 M1​ 对其每行取平均值 得到 V 1 ∈ R L 1 V_1 \in \mathbb{R}^{…

pikachu—exec“eval“

这是原画面 然后呢&#xff1f; 我们知道会传入到后台rce_eval.php来处理然后通过 eval()是啥? 在eval括号里面可以执行外来机器的命令 然后我们通过php的一个内置的命令 我们通过phpinfo()&#xff1b; 这是输入后的结果

C++实现生产者消费者模型

生产者-消费者模型是一种典型的多线程并发模式&#xff0c;常用于在一个共享缓冲区中协调生产者和消费者之间的数据传递。在C中&#xff0c;我们可以使用标准库中的线程、互斥量和条件变量来实现该模型。以下是一个简单的生产者-消费者模型的实现示例&#xff1a; #include &l…

(四十八)第 7 章 图(图的数组(邻接矩阵)存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

《python编程从入门到实践》day41

# 昨日知识点回顾 用户注销、注册&#xff0c;限制访问&#xff0c;新主题关联到当前用户 # 今日知识点学习 第20章 设置应用程序的样式并部署 20.1 设置项目“学习笔记”的样式 20.1.1 应用程序django-bootstrap4 # settings.py ---snip--- INSTALLED_APPS [# 我的应用程序…

链式法则:神经网络前向与反向传播的基石

在深度学习的浪潮中&#xff0c;神经网络以其强大的学习和预测能力&#xff0c;成为解决复杂问题的有力工具。而神经网络之所以能够不断学习和优化&#xff0c;离不开两个核心过程&#xff1a;前向传播和反向传播。其中&#xff0c;链式法则作为微积分学中的一个基本概念&#…

MATLAB基础应用精讲-【数模应用】价格敏感度PSM分析(附python代码实现)

目录 前言 算法原理 什么是价格敏感度分析? 原理 示例 PSM用途

(C11) 泛型表达式

文章目录 ⭐语法⭐举例&#x1f6a9;判断对象类型&#x1f6a9;判断指针&#x1f6a9;函数重载&#x1f6a9;嵌套使用 END ⭐语法 Ref: 泛型选择 (C11 起) - cppreference.com 关键词&#xff1a; Genericdefault _Generic(控制表达式 , 关联列表) (C11 起) 关联列表 类型名:…

PHP:phpmyadmin 将查询数据导出csv

1、输入你的SQL查询出结果 2、查出数据以后拖到最下方【导出】 3、导出CSV

大模型蒸馏:高效AI的秘诀

引言 在人工智能的快速发展中&#xff0c;大模型因其强大的学习能力和广泛的应用场景而备受瞩目。然而&#xff0c;这些模型通常需要大量的计算资源和存储空间&#xff0c;限制了它们在实际应用中的部署。为了解决这一问题&#xff0c;大模型蒸馏技术应运而生&#xff0c;它旨…

京东二面:Sychronized的锁升级过程是怎样的

引言 Java作为主流的面向对象编程语言&#xff0c;提供了丰富的并发工具来帮助开发者解决多线程环境下的数据一致性问题。其中&#xff0c;内置的关键字"Synchronized"扮演了至关重要的角色&#xff0c;它能够确保在同一时刻只有一个线程访问特定代码块或方法&#…

Linux setconsole命令教程:如何设置系统终端(附实例详解和注意事项)

Linux setconsole命令介绍 setconsole命令用于设置系统终端。这个命令可以指定系统终端&#xff0c;包括使用PROM终端&#xff0c;使用第1个串口设备&#xff0c;使用第2个串口设备&#xff0c;或者使用主机上的显卡作为终端。 Linux setconsole命令适用的Linux版本 setcons…

Compiler类,你学会了吗?

在 Java 编程中,Compiler 类是一个重要的类,它提供了一种动态编译 Java 代码的机制。 通过 Compiler 类,程序员可以在运行时动态地编译 Java 代码,并且可以将编译后的字节码加载到当前的 Java 虚拟机中执行。 本文将深入探讨 Compiler 类的作用、用法以及一些常见的最佳实…

vxe-table 升级到 v4.7 报错

vxe-table vxe-table 升级到 v4.7 报错 查看文档 改变安装方式即可 // ... import VxeUITable from vxe-table import vxe-table/lib/style.css // ...createApp(App).use(VxeUITable).mount(#app)修改后 // ... import VxeUITable from vxe-table import vxe-table/lib/styl…

istiod 部署及使用

边车模式 使用 Helm 安装 前提 1.执行任何必要的特定于平台的设置。 2.检查 Pod 和服务的要求。 3.安装 Helm 客户端 3.6 或更高的版本。 4.配置 Helm 存储库 helm repo add istio https://istio-release.storage.googleapis.com/charts helm repo update安装步骤 1.安…