【Python单元测试】pytest框架单元测试常用用例

news2024/11/5 19:39:55

【Python单元测试】pytest框架单元测试 配置 命令行操作 测试报告 覆盖率
在这里插入图片描述

常用用例

本文重点介绍使用的Mock写法, pytest的基本用法,非本文重点。
pytest 相较于unittest, 写法更加简便。对测试用例直接assert是否符合预期即可

# 定义mock对象, 测试函数形参中需要接收
@patch("")
@patch.object()

# mock对象返回值设置
return_value  # 用于Mock返回值
side_effect   # 可用于Mock异常情形

# mock对象的校验方式
.assert_called()
.assert_called_with()
.assert_called_once()
.assert_called_once_with()
.assert_not_called()

初始化数据

可以使用测试套 @pytest.fixture 或者 unittest.TestCase 中的 setUp , setUpClass初始化数据。

写法一

import pytest

@pytest.fixture  # 测试套可以声明在conftest.py / 测试脚本开头 / 测试类中
def init_data():
	data = {
		"key1": "value1",
		"key2": "value2",
	}
	return data

# 测试套fixture中声明的函数,可以放在conftest.py 或者本单元测试文件中,不需要导入, 直接作为形参接收就可以使用

def test_xx(init_data):
	assert init_data.get("key1") == "value1"

写法二


import unittest


class TestXx(unittest.TestCase):

	def setUp(self):
		self.init_data = {  # 测试数据在本测试类中使用
			"key1": "value1",
			"key2": "value2",
		}

睡眠Mock time.sleep

python内置类的mock可以参照此种写法, Mock后内置类/方法实际并不会执行,assert是否被调用

from unittest.mock import patch

def xx():
	print("a" * 10)
	time.sleep(1)  # 此处有睡眠
	print("b" * 10)


@patch("time.sleep")  # mock后, UT执行时不睡眠
def test_xx(mock_sleep):
	xx()
	assert mock_sleep.assert_called_once_with(1)  # 查看睡眠行是否调用, 并且mock睡眠时间是不是1秒

调用类Mock

# module_a/a.py

class ClassA:
	@staticmethod
	def cal_sum(a: int, b: int) -> int:
		return a + b

def cal_2_num_sum(a, b):
	ret = ClassA.cal_sum(a, b)
	return ret
# unit_test/test_module_a.py

from unittest.mock import patch

from module_a.a import cal_2_num_sum

@patch("module_a.ClassA")
def cal_2_num_sum(mock_class_a):
	mock_class_a.return_value.cal_sum.return_value = 0
	ret = cal_2_num_sum(1, 2)
	assert ret == 0


@patch.object(ClassA, "cal_sum")
def cal_2_num_sum(mock_cal_sum):
	mock_cal_sum.return_value = 0
	ret = cal_2_num_sum(1, 2)
	assert ret == 0

装饰器Mock

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

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

相关文章

OmniGen: Unified Image Generation(代码的复现)

文章目录 论文简介模型的部署需要下载的预训练权重 模型的生成效果图像编辑的效果风格迁移的效果 总结 论文简介 OmniGen的github项目地址 OmniGen: Unified Image Generation。OmniGen 在各种图像生成任务中都表现出了卓越的性能,并可能大大超过现有扩散模型的极…

景联文科技医疗数据处理平台:强化医疗数据标注与管理,推动医疗数字化新篇章

随着医疗科技快速进步与广泛应用,医疗信息的规模正在迅速扩张,如何有效管理这些医疗数据成为了关键议题。 医疗数据不仅包括传统的纸质病历,还有电子病历、实验室检测结果、医学影像等多样化的数字信息。为确保这些数据能为临床决策、科研分析…

在线学习新体验:SpringBoot精品试题库系统

1 绪论 1.1 研究背景 现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生活不仅变得更加地便利化,也让时间变得更加地宝贵化,因为每天的…

Fluent Editor 富文本开源2个月的总结:增加格式刷、截屏、TypeScript 类型声明等新特性

你好,我是 Kagol,个人公众号:前端开源星球。 Fluent Editor 是一个基于 Quill 2.0 的富文本编辑器,在 Quill 基础上扩展了丰富的模块和格式,框架无关、 功能强大、开箱即用。 2024年8月12日,Fluent Edito…

redis v6.0.16 安装 基于Ubuntu 22.04

redis安装 基于Ubuntu 22.04 本文演示如何在ubuntu22.04下,安装redis v6.0.16,并配置测试远程访问。 Step1 更新环境 sudo apt updateStep2 安装redis sudo apt install redis-server -yStep3 启动 sudo systemctl restart redissudo systemctl sta…

python画出圣诞树(简易版,matplotlib.pyplot) 代码实现

需求 使用python的turtle库绘制圣诞树 绘制结果 代码实现 import matplotlib.pyplot as plt import matplotlib.patches as patches import numpy as npdef draw_christmas_tree(ax):# 定义树的基本参数base_width 6 # 底部宽度height 12 # 总高度levels 3 # 层次数量…

【1个月速成Java】基于Android平台开发个人记账app学习日记——第4天,注册登录逻辑代码

24.11.03 1.输入手机号跳转功能 第一个要设计的功能是,输入手机号以后跳转到另一个页面,输入获取得到的验证码页面。先拿这个功能练练手。 首先看一下此时的完整项目结构: 主要是添加了2个活动类和对应的界面,下面看详细的代码…

使用GraphQL构建现代API

使用GraphQL构建现代API GraphQL简介 安装GraphQL 使用npm安装GraphQL 使用Yarn安装GraphQL 创建GraphQL服务器 定义Schema 编写Resolver 查询数据 变更数据 使用Apollo Client GraphQL订阅 数据验证 错误处理 分页查询 拆分和组合Schema 总结 随着API的发展,传统…

炒到天价的数字头像如何用AI制作——教你用Midjourney轻松打造像素风NFT头像

​ ​ 近年来,NFT数字头像成了热门话题,许多以像素风格为主的头像被炒到天价,像最近比较火的星球兽头像。 它们之所以备受追捧,不仅是因为视觉风格独特,更是因其在NFT领域的稀缺性。 那如果想自己制作一个像素风头像…

网络层2--IP协议

目录 一、虚拟互连网络 二、IP地址 1、IP地址表示方法 2、IP地址分类 3、无分类编址CIDR (1)网络前缀 (2)地址块 、 地址掩码 4、IP地址特点 5、地址解析协议ARP (1)原理 (2&#xf…

进程间通信(命名管道 共享内存)

文章目录 命名管道原理命令创建命名管道函数创建命名管道 共享内存原理shmgetFIOK 代码应用:premsnattch 命名管道 用于两个毫无关系的进程间的通信。 原理 Linux文件的路径是多叉树,故文件的路径是唯一的。 让内核缓冲区不用刷新到磁盘中&#xff0c…

基于SSM+小程序的计算机实验室排课与查询管理系统(实验室2)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 1、管理员功能有个人中心,学生管理,教师管理,实验室信息管理,实验室预约管理,取消预约管理,实验课程管理&#xff0…

基于STM32的农业监测与管理系统设计思路介绍(代码示例)

一、项目概述 在全球农业现代化进程中,农业监测与管理系统的研发具有重要意义。本文介绍的基于STM32的农业监测与管理系统,旨在通过智能小车实现对农作物的环境监测、土壤检测等功能。该系统利用手势控制技术,农民可以通过简单的手势指令来操…

分布式架构搭建博客网站

目录 运行环境基础配置需求准备工作配置静态ip修改主机名及host映射开启防火墙时间同步配置免密ssh登录 环境搭建Server-Web端安装LNMP环境软件Server-NFS-DNS端上传博客软件Server-NFS-DNS端设置NFS共享Server-Web设置挂载远程共享目录nginx设置在数据库中创建数据库和用户重启…

基于Transformer的路径规划 - 第五篇 GPT生成策略_解码方法优化

上一篇:基于Transformer的路径规划 - 第四篇 GPT模型优化 在上一篇中,我尝试优化GPT路径生成模型,但没有成功。在随机生成的测试集上,路径规划成功率只有99%左右。而使用传统的路径规划算法,例如A*,路径规划…

【HarmonyOS】鸿蒙应用设置控件通用样式AttributeModifier, @Styles

【HarmonyOS】鸿蒙应用设置控件通用样式AttributeModifier, Styles 前言 在鸿蒙中UI开发经常需要对控件样式进行统一的封装,在API早前版本,一般是通过 Styles进行样式封装复用: Entry Component struct Index {build() {Column(…

[vulnhub]DC:7

https://www.vulnhub.com/entry/dc-7,356/ 端口扫描主机发现 探测存活主机,178是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-03 13:30 CST Nmap scan report for 192.168.75.1 Host is up (0.00037s l…

鸿蒙HarmonyOS应用开发者(基础+高级)认证

文章目录 鸿蒙HarmonyOS应用开发者(基础高级)认证👉1.HarmonyOS认证介绍1.1、HarmonyOS发展历程1.2、HarmonyOS NEXT 开发预览版1.3、ArkTS语言开发鸿蒙应用1.4、HarmonyOS应用开发者基础认证的核心内容1.5、HarmonyOS应用开发者高级认证的核心内容1.6、HarmonyOS应…

视频Qoe测量学习笔记(一)

目录 流媒体协议详解 RTSP:实时流式协议 RTCP:实时运输控制协议 RTP:实时运输协议 H.264 流媒体协议详解 RTSP:实时流式协议 由IETF MMusic小组开发,已成为互联网建议标准[RFC 2326]。RTSP本身并不传送数据&…

第三十三章 Vue路由进阶路由模块封装

目录 一、引言 二、完整代码 main.js index.js App.vue Find.vue My.vue 一、引言 在上一个章节中,我们将所有的路由配置都堆在main.js中来实现路径组件的路由,这样做的话非常不利于我们后期对项目的维护。因此正确的做法是将路由模块抽离出来&a…