学习UnitTest框架,轻松打造无懈可击的代码!

一、什么是UnitTest?

1、介绍

unittest是Python自带的一个单元测试框架,它可以做单元测试,也能用于编写和运行重复的测试工作。

它给自动化测试用例开发和执行提供了丰富的断言方法,判断测试用例是否通过,并最终生成测试结果。

2、核心要素

  1. TestCase
  2. TestSuite
  3. TestLoader
  4. Fixture
  5. TestRunner

二、简单使用UnitTest

1、简单分层

测试一般由三或四部分构成:被测的对象+测试用的方法+测试报告(+数据),一般有几个构成便需要几个文件

2、被测的对象

文件名:xxx.py

被测的对象可能是一段普普通通的函数

def A(put): # 一个普普通通的函数if put == 1:return "成功"else:return "失败"

3、测试用的方法

文件名:test.py

  1. 先导包:unittest包和被测对象所在的包
  2. 定义测试类:建一个测试类,继承unittest.TestCase
  3. 定义测试方法:命名为test开头
# 导包
import unittestfrom xxx import A# 定义测试类
class TestA(unittest.TestCase):# 定义测试方法def test_A_1(self):self.assertEqual("成功", A(1)) # 引用被测对象def test_A_2(self):self.assertEqual("失败", A(2))

4、测试报告

文件名:suite.py

一般和testsuite结合,至于testsuite是什么?就是明确测试的范围,将需要被测试的用例组织起来。当然,得先用testsuite才知道报告所需要报告的用例范围

import unittestfrom htmltestreport import HTMLTestReportfrom test import TestAsuite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestA))runner = HTMLTestReport('./report.html','测试报告','描述')
runner.run(suite)
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

三、进阶用法

1、fixture

对一个测试用例环境的初始化和销毁

  1. 方法级别的 setUp(self) tearDown(self) 每个普通方法执行 之前/之后 自动运行。(运行次数和“def”的数量相关)
  2. 类级别的 setUpClass(cls) tearDownClass(cls) 在类内所有方法直 之前/之后 运行一次。(运行次数和“class”的数量相关)

简单来说,在测试集的首尾运行或者在每个测试用例前后执行

import unittestfrom xxx import Aclass TestA(unittest.TestCase):def setUp(self) -> None:print("\n前SetUp")def tearDown(self) -> None:print("后TearDown")@classmethoddef setUpClass(cls) -> None:print("首setUpClass")@classmethoddef tearDownClass(cls) -> None:print("尾tearDownClass")def test_A_1(self):print("测试_A_1")self.assertEqual("成功", A(1))def test_A_2(self):print("测试_A_2")self.assertEqual("失败", A(2))

测试结果:

============================= test session starts =============================
collecting ... collected 2 itemstest.py::TestA::test_A_1 首setUpClass
PASSED                                          [ 50%]
前SetUp
测试_A_1
后TearDowntest.py::TestA::test_A_2 PASSED                                          [100%]
前SetUp
测试_A_2
后TearDown
尾tearDownClass======================== 2 passed, 1 warning in 0.01s =========================

2、参数化

使用parameterized库

import unittestfrom parameterized import parameterized  # 1、引入包from xxx import Adata = [1]  # 2、设置一个参数class TestA(unittest.TestCase):@parameterized.expand(data)  # 3、在这里注明def test_A_1(self, data_in):  # 4、加入对应形参print("测试_A_1")self.assertEqual("成功", A(data_in))  # 5、别忘记更改断点里的内容

因为parameterized库读取的数据固定为元组,格式为 [(参数), (参数), (参数)] ,其他格式的数据需要进行转化,可以添加以下方法用于读取json格式的数据

import json# 方法一:用于打开内容为[[参数], [参数], [参数]]的文件
def add_1(file):with open(file) as f:data = json.load(f)return data# 方法二:用于打开内容为[{参数}, {参数}, {参数}]的文件,用的较多
def add_2(file):with open(file, "r", encoding="utf-8") as f:data_list = json.load(f)new_list = []for data in data_list:new_list.append(tuple(data.values()))return new_list

如果不是读取文件,直接读取数据并转化为元组的话,可以使用以下方法

import json# 方法一:用于转化[[参数], [参数], [参数]]
def add_1(test_data):data = json.load(test_data)return data# 方法二:用于转化[{参数}, {参数}, {参数}],用的较多
def add_2(test_data):new_list = []for data in test_data:new_list.append(tuple(data.values()))return new_list

END今天的分享就到此结束了,点赞关注不迷路~

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

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

相关文章

纯js实现录屏并保存视频到本地的尝试

前言:先了解下:navigator.mediaDevices,mediaDevices 是 Navigator 只读属性,返回一个 MediaDevices 对象,该对象可提供对相机和麦克风等媒体输入设备的连接访问,也包括屏幕共享。 const media navigator…

python爬虫-某公开数据网站实例小记

注意!!!!某XX网站逆向实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!! 第一步:分析页面和请求方式 此网站没有技巧的加密,仅是需要携带cookie和请求…

万界星空科技灯具行业MES介绍

中国是LED照明产品最大的生产制造国,如今,我国初步形成了包括LED外延片的生产、LED芯片的制备、LED芯片的封装以及LED产品应用在内的较为完超为产业链,随着LED照明市场渗诱率的快速警升,LED下游应用市场将会越来越广阔。这也将推动…

智能优化算法应用:基于寄生捕食算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于寄生捕食算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于寄生捕食算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.寄生捕食算法4.实验参数设定5.算法结果6.参考…

3 测试驱动的Spring Boot应用程序开发数据层示例

文章目录 用户故事数据模型选择数据库SQL与NoSQLH2、Hibernate和JPA Spring Boot Data JPA依赖关系和自动配置Spring Data JPA技术栈数据源(自动)配置 实体存储库存储User和ChallengeAttempt显示最近的ChallengeAttempt服务层控制器层用户界面 小结 文章…

【JS】检索树结构,并返回结果节点的路径与子节点

【JS】检索树结构,并返回结果节点的路径与子节点 需求代码效果展示 需求 一个树结构,需要添加条件检索功能,检索结果依然是一个树结构,包含所有的符合要求的节点,以及他们到根节点的路径,与他们的子节点 …

vue项目运行时,报错:ValidationError: webpack Dev Server Invalid Options

在运行vue项目中,遇到报错:ValidationError: webpack Dev Server Invalid Options,如下图截图: 主要由于vue.config.js配置文件错误导致的,具体定位到proxy配置代理不能为空,导致运行项目报错,需…

版本控制系统Git学习笔记-Git基本知识介绍

目录 前言一、版本控制系统1.1 什么是版本控制系统1.2 本地版本控制系统1.3 集中化的版本控制系统1.3 分布式版本控制系统 二、Git简介2.1 数据处理方式2.2 几个特点2.2.1 几乎所有操作都是本地执行2.2.2 Git保证完整性2.2.3 Git一般只添加数据 2.3 Git中文件状态2.3.1 三种文件…

python networkx 网络展示的代码

1、创建一个无权重的图,并展示 edge_list.csv a,b,2 a,c,3 b,c,3 d,e,1 d,f,3 e,k,1 r,l,3 t,l,2import networkx as nx import matplotlib.pyplot as plt G nx.Graph() # 创建无向图 with open(edge_list.csv) as f:for line in f:edge line.strip().split(,)tr…

装修流程篇

装修流程 https://www.xiaohongshu.com/explore/627ba70d00000000210357b3 https://www.xiaohongshu.com/explore/63b6bc0c000000002203776f 半包装修流程 https://www.xiaohongshu.com/explore/64e5ea3b0000000003021711 户型图 效果 https://www.xiaohongshu.com/ex…

掌握大型语言模型(LLM)技术:推理优化

原文链接:Mastering LLM Techniques: Inference Optimization | NVIDIA Technical Blog 大模型相关技术文章已整理到Github仓库,欢迎start! 堆叠Transformer层以创建大型模型可以获得更好的准确性、few-shot学习能力,甚至在各种语言任务中具有…

三、Zookeeper数据模型

目录 1、Znode兼具文件和目录两种特点 2、Znode具有原子性操作

Ubuntu安装过程记录

软件准备 硬件 Acer电脑,AMD a6-440m芯片 64g优盘一个,实际就用了不到5g。 Ubuntu :官网 下载Ubuntu桌面系统 | Ubuntu 下载桌面版Ubuntu 22.04.3 LTS LTS属于稳定版 u盘系统盘制作软件 Rufus :Rufus - 轻松创建 USB 启动…

js模块化的应用!!!(前无古人,后无来者)

简介: 在 ES6 前, 实现模块化使用的是 RequireJS 或者 seaJS(分别是基于 AMD 规范的模块化库, 和基于 CMD 规范的模块化库)。 ES6 引入了模块化,其设计思想是在编译时就能确定模块的依赖关系&#xff0c…

万宾科技水环境综合治理监测系统的融合与应用

随着社会经济的快速发展,我国的水环境污染问题日益凸显,这不仅对生态环境造成了严重破坏,也严重威胁到人民群众的健康和生活质量。为了解决这一问题,城市生命线与水环境综合治理监测系统应运而生,二者的结合将为水环境…

gmid方法设计五管OTA二级远放

首先给出第一级是OTA,第二级是CS的二级运放电路图: gmid的设计方法可以根据GBW、Av、CL来进行电路设计,因此在设计电路之前需要以上的参数要求。 1、为了满足电路的相位裕度至少60,需要对GBW、主极点、零点进行分析。 首先给出其…

PMCW体制雷达系列文章(3) – PMCW雷达之匹配滤波

说明 PMCW体制下,雷达在接收端对接收的目标回波信号使用单频载波混频并低通滤波后,采集得到的是调制速率达ns量级的相位编码信号。在信号处理端,PMCW体制使用匹配滤波器(match filter)进行距离维的压缩,这是与FMCW体制雷达最核心的…

AntDesignBlazor示例——创建列表页

本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考。 示例代码仓库:https://gitee.com/known/AntDesignDemo 1. 学习目标 使用Table组件创建列表页面使用DisplayName特性显示中文表头使用模板和Tag组件显示高温数据使…

EDW国际数据管理最新趋势(二)|信息供应链与数据

最近Data Fabric、Data Mesh、DataOps等话题非常火。其实,信息供应链谈的也是同样的东西,那就是如何将数据治理与数据集成整合在一起的解决方案。 下图虽然简单但涵盖了非常大的信息量。将4A架构进行了拆解,应用架构与技术架构主要是支撑业务…

R语言gWQS包在加权分位数和回归模型的应用

在流行病学研究中,相较于单一因素的暴露,多因素同时暴露的情况更为常见。传统模型在评价多因素联合暴露时存在数据维度高、多重共线性等问题. WQS 回归模型的基本原理是通过分位数间距及加权的方法,将多种研究因素的效应综合成为一个指数&…