2024年测试工程师必看比列之Unittest单元测试框架-知识点总结

unittest单元测试框架
1.导入unittest包
========================================================================
2.创建类的时候要继承与unittest.TestCase类
2.1,setUp方法是在类中测试执行前的初始化工作
2.2,tearDown方法是在类中测试执行后的清除工作
2.3,测试用例函数以test开头的方法是普通的测试用例方法,
按照ACSII码的顺序加载测试用例,数字与字母的顺序为:0~9,A~Z,a~z
2.4,在主入口main中,使用unittest.main()方法执行以test开头的方法
注意: 在执行的时候应以run下的指定模块执行,不能以unittest in 模块执行,不然会重复执行
========================================================================
3.设置断言
可以在测试用例的函数中设置
self.assertEqual(4,demo02_calc.sum(2,2),"测试sum是否pass")
常用的断言
self.assertEqual(4,4) # 判断是否相等
self.assertTrue(a) # 判断是否为真
self.assertIn("马怒",name) # 判断是否在里面
self.assertGreater(4,2) # 判断是否大于
========================================================================
4,忽略用例:
@unittest.skip("无条件跳过"),
@unittest.skipIf(True,"条件为真时跳过")
@unittest.skipUnless(False,"条件为假False则跳过"),
@unittest.expectedFailure # 执行失败不计入失败的数量中

========================================================================
5,测试用例执行顺序:(在不使用测试套件的情况下是按照ASCII码的顺序执行,使用测试套件就按照测试套件的添加顺序执行)
5.1,方法一:(通过addTest方法执行(通过测试套件执行的不以test开头的用例也可执行))
在main的主入口中创建测试套件的实例 :suite = unittest.TestSuite()
然后通过实例使用addTest(类名(方法名))方法按照顺序执行测试用例(一条一条用例执行)
suite.addTest(类名("方法名1"))
suite.addTest(类名("方法名2"))
suite.addTest(类名("方法名3"))
unittest.main(defaultTest="suite")
或者(同方法一类似,写测试套件的方法,如下)
把unittest.Testsuite写成方法
def suite():
suite = unittest.TestSuite()
suite.addTest(test_case("test_bbb")) # addTest(类名(“方法名称”))
suite.addTest(test_case("ccc"))
return suite
if __name__ == '__main__':
unittest.main(defaultTest="suite")

5.2,方法二:(unittest.makeSuite()添加整个测试类)
if __name__ == '__main__':
# 注意:此时不是以test开头的方法不会被添加进测试套件中
# 注意:makeSuite 可能需要手动添加
suite = unittest.TestSuite(unittest.makeSuite(test_case)) # 里面是类名
unittest.main(defaultTest="suite")

5.3,方法三(unittest.TestLoader().loadTestsFromName()添加整个.py文件下的测试类)
if __name__ == "__main__":
# 通过TestLoader中字符串的方法加载用例
# 1,增加一个测试用例 模块名称.类名.方法名称
# suite = unittest.TestLoader().loadTestsFromName("demo11_测试套件4.test_case1.test_aaa")
# 2,增加整个测试类
# suite = unittest.TestLoader().loadTestsFromName("demo11_测试套件4.test_case1")
# 3,增加整个.py模块下所有的测试类
suite = unittest.TestLoader().loadTestsFromName("demo11_测试套件4")
unittest.main(defaultTest='suite')

 自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

5.4,方法四(创建多个子套件然后整合到一个大的主套件中):
先通过导入别的py模块的包,然后创建多个子套件
在创建一个主套件,把多个子套件通过addTest()方法添加到主套件中
import unittest
from unittest框架 import demo11_测试套件4
from unittest框架 import demo08_测试套件1
# 依次创建多个套件
# 1,单个用例套件
suite01 = unittest.TestLoader().loadTestsFromName('demo08_测试套件1.test_case.test_aaa')
# 2,整个类
suite02 = unittest.TestLoader().loadTestsFromName("demo08_测试套件1.test_case")
# 3,整个.py模块
suite03 = unittest.TestLoader().loadTestsFromName("demo11_测试套件4")
main_suite = unittest.TestSuite() # 主套件
main_suite.addTest(suite01) # 添加子套件到主套件中
main_suite.addTest(suite02)
main_suite.addTest(suite03)
unittest.main(defaultTest="main_suite")

5.5,方法五:(使用discover()来实现添加执行整个目录下所有的测试用例)
首先导入需要的包,然后通过os找到all_case目录的路径,在通过unittest.defaultTestLoader.discover()方法,匹配到所有的用例
再创建一个套件,通过addTest(discover)方法添加discover,最后在unittest.main(defaultTest="main_suite")执行
import os
import unittest
import HTMLTestRunner
import time
curren_path = os.path.dirname(__file__)
print(curren_path)
case_path = os.path.join(curren_path,"all_case")

# 从当前路径回到上一层路径
# case_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
print(case_path)

discover = unittest.defaultTestLoader.discover(start_dir=case_path, # 用例路径
pattern="*_case*.py",
top_level_dir=None) # 文件类型
# print(discover)
main_suite = unittest.TestSuite()
main_suite.addTest(discover)
unittest.main(defaultTest="main_suite")
========================================================================
6,在使用unittest.main()方法执行代码
6.1 如果使用测试套件要用 unittest.main(defaultTest="suite")

========================================================================
7,unicode码转成中文
name.encode("utf-8").decode("unicode_escape") # 转码成中文

========================================================================
8,导入HTMLTestRunner包,用来生成测试报告
# 执行并生成测试报告
# 加个时间戳
now = time.strftime("%y-%m_%d_%H_%M_%S_",time.localtime(time.time()))
file_obj = open("D:/pythonProject/P7_P8_Requests/"
"unittest框架/test_report/"
"{}test_report.html".format(now),"w+",encoding="utf-8")
# 创建测试报告对象,将执行的过程写入到file_obj中
runner = HTMLTestRunner.HTMLTestRunner(stream=file_obj,
title="第一次的测试报告",
description="我是测试报告的描述信息")
runner.run(main_suite)
========================================================================

详细信息的展示unittest.main(verbosity=2)
0 (静默模式): 你只能获得总的测试用例数和总的结果。
1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “E”
2 (详细模式):测试结果会显示每个测试用例的所有相关的信息 并且 你在命令行里加入不同的参数可以起到一样的效果

测试用例的方法下面---写上测试的注释信息---在报告中体现出来
self._testMethodName = "API_CASE_01"
self._testMethodDoc = "验证获取token接口能否正常调用"

 总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的公共场所马桶设计(论文+源码)

1.系统设计 本课题为公共场所的马桶设计,其整个系统架构如图2.1所示,其采用STC89C52单片机为核心控制器,结合HC-SR04人体检测模块,压力传感器,LCD1602液晶,蜂鸣器,L298驱动电路等构成整个系统&…

通达信吊灯止损指标公式,根据波动幅度自动调整止盈止损

吊灯止损指标是由查克勒博(Chuck LeBeau)发明的,亚历山大埃尔德(Alexander Elder)在其著作《走进我的交易室》中介绍了这种止盈止损方法(中文版翻译为倒挂式离场法则),它是根据平均真实波幅ATR设置跟踪止损。吊灯止损指标的目的是…

使用 LCM LoRA 4 步完成 SDXL 推理

LCM 模型 通过将原始模型蒸馏为另一个需要更少步数 (4 到 8 步,而不是原来的 25 到 50 步) 的版本以减少用 Stable Diffusion (或 SDXL) 生成图像所需的步数。蒸馏是一种训练过程,其主要思想是尝试用一个新模型来复制源模型的输出。蒸馏后的模型要么尺寸…

论文阅读:“基于特征检测与深度特征描述的点云粗对齐算法”

文章目录 摘要简介相关工作粗对齐传统的粗对齐算法基于深度学习的粗对齐算法 特征检测及描述符构建 本文算法ISS 特征检测RANSAC 算法3DMatch 算法 实验结果参考文献 摘要 点云对齐是点云数据处理的重要步骤之一,粗对齐则是其中的难点。近年来,基于深度…

VM——绘制亮度均匀性曲线

1、需求:检测汽车内饰氛围灯的亮度均匀性,并绘制均匀性曲线 2、结果: 3、方法: 主要分为3步 (1)提取氛围灯ROI,忽略背景 (2)对提取到的ROI图进行切片处理,计算出每个切片的亮度均值 (3)绘制均匀性曲线 3.1 提取氛围灯ROI step1: 转成黑白图 step2:通过blob和…

【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解

【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解前言Inception-ResNet讲解Inception-ResNet-V1Inception-ResNet-V2残差模块的缩放(Scaling of the Residuals)Inception-…

第1关:图的邻接矩阵存储及求邻接点操作

任务要求参考答案评论2 任务描述相关知识 顶点集合边集合编程要求测试说明 任务描述 本关任务:要求从文件输入顶点和边数据,包括顶点信息、边、权值等,编写程序实现以下功能。 1)构造无向网G的邻接矩阵和顶点集,即图…

配置文件自动提示

1、引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId> </dependency> 2、修改IDEA配置

mysql底层是如何存放数据的

总览 首先总的来说&#xff0c;分为四个层级&#xff0c;行页区段。行就是数据库里的一行数据。 但一次从磁盘读进内存的数据量是一页&#xff08;页是读写的单位&#xff0c;默认16KB一页&#xff09;&#xff0c;页分很多种类&#xff0c;例如数据页、溢出页、undo日志页。 …

OpenAI宫斗,尘埃落定,微软成最大赢家

周末被OpenAI董事会闹剧刷屏,ChatGPT之父Sam Altman前一天被踢出董事会,免职CEO,后一天重返OpenAI,目前结局未知。 很多同学想要围观,缺少背景知识,这里老章为大家简单介绍前因后果及涉及的人物,时间线,让大家轻松围观。 备好瓜子,开始。 1、主角 先看一张图,看一…

Java基于B/S架构,包括PC后台管理端、APP移动端、可视化数据大屏的智慧工地源码

智慧工地管理平台充分运用数字化技术&#xff0c;聚焦施工现场岗位一线&#xff0c;依托物联网、互联网、AI等技术&#xff0c;围绕施工现场管理的人、机、料、法、环五大维度&#xff0c;以及施工过程管理的进度、质量、安全三大体系为基础应用&#xff0c;实现全面高效的工程…

无人售货奶柜:颠覆传统零售行业的潜力黑马

无人售货奶柜&#xff1a;颠覆传统零售行业的潜力黑马 无人售货奶柜具备体积小、灵活运用空间、无需人工看守和自动结算等特点。相较于传统建店方式&#xff0c;它的成本大大降低&#xff0c;从而提高了运营效率。此外&#xff0c;无人售货奶柜独特的优势之一就是可以保持24小时…

【GUI】-- 11 贪吃蛇小游戏之绘制静态的小蛇

GUI编程 04 贪吃蛇小游戏 4.2 第二步&#xff1a;绘制静态的小蛇 现在绘制静态的小蛇(即小蛇初始位置)&#xff0c;并且完善游戏默认初始状态。这一步还在GamePanel类中实现。 首先&#xff0c;定义了小蛇的数据结构&#xff0c; //定义蛇的数据结构int length; //小蛇总长…

LeetCode【45】跳跃游戏2

题目&#xff1a; 思路&#xff1a; 注意和跳跃游戏【55】不同的是&#xff0c;题目保证可以跳到nums[n-1];那么每次跳到最大即可 代码&#xff1a; public class LeetCode45 {public static int jump(int[] nums) {int jumps 0;int currentEnd 0;int farthest 0;for(int…

案例研究|北京交通大学基于DataEase开展多场景校园数据分析与展示

北京交通大学是教育部直属&#xff0c;教育部、交通运输部、北京市人民政府和中国国家铁路集团有限公司共建的全国重点大学&#xff0c;是国家“211工程”“985工程优势学科创新平台”“双一流”建设高校。 多年来&#xff0c;北京交通大学积极发挥信息技术赋能学校人才培养、…

STM32 -Bin/Hex文件格式解析

文章目录 1. 概述2. Hex文件2.1 格式解析2.2 数据类型2.3 举例解析2.4 合并两个Hex文件方法 3 总结&#xff08;未完待续&#xff09; 1. 概述 Hex文件&#xff1a;它是单片机和嵌入式工程编译输出的一种常见的目标文件格式&#xff08;比如keil就能编译输出hex文件&#xff0…

Rockchip Clock

一:概述 1、时钟子系统 本章节所指的时钟是给SOC各个组件提供时钟的树状框架,而非内核使用的时钟。和其他模块一样,CLOCK也有框架,用以适配不同的平台。适配层之上是客户代码和接口,也就是各模块(如需要时钟信号的外设)的驱动。适配层之下是具体的SOC的时钟操作细节。…

Rust错误处理机制:优雅地管理错误

大家好&#xff01;我是lincyang。 今天&#xff0c;我们要探讨的是Rust语言中的错误处理机制。 Rust作为一种系统编程语言&#xff0c;对错误处理的重视程度是非常高的。它提供了一套既安全又灵活的机制来处理可能出现的错误。 Rust错误处理的两大类别 在Rust中&#xff0…

Flutter:多线程Isolate的简单使用

在flutter中如果要使用线程&#xff0c;需要借助Isolate来实现。 简介 在Flutter中&#xff0c;Isolate是一种轻量级的线程解决方案&#xff0c;用于在应用程序中执行并发任务。Isolate可以被认为是独立于主线程的工作单元&#xff0c;它们可以在后台执行任务而不会阻塞应用程…