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

news2024/11/16 23:57:17

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接口能否正常调用"

 总结:

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

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

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

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

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

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

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

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

相关文章

嵌入式Linux学习(1)——经典CAN介绍(上)

目录 一. CAN与ISO-OSI Model 二. CAN通信 2.1 接线方式 2.1.1 闭环网络 2.1.2 开环网络 2.2 收发流程 2.2.1 发送 2.2.2 接收 三. CAN BUS访问与仲裁 3.1 “线与”机制​ 3.2 仲裁机制 REF CAN(Controller Area Network)总线协议是由 BOSC…

uniapp中swiper 轮播带左右箭头,点击切换轮播效果demo(整理)

可以点击箭头左右切换-进行轮播 <template><view class"swiper-container"><swiper class"swiper" :current"currentIndex" :autoplay"true" interval"9000" circular indicator-dotschange"handleSw…

CVE-2023-0179提权利用

前言 在CVE-2023-0179-Nftables整型溢出中&#xff0c;分析了漏洞的成因&#xff0c;接下来分析漏洞的利用。 漏洞利用 根据漏洞成因可以知道&#xff0c;payload_eval_copy_vlan函数存在整型溢出&#xff0c;导致我们将vlan头部结构拷贝到寄存器&#xff08;NFT_REG32_00-N…

ASO优化之关于iOS的A/B测试

ASO优化的一个重要方面在于运行A/B测试&#xff0c;主要围绕应用图标、屏幕截图和预览视频&#xff0c;从而来完善应用程序的视觉元素和元数据。 1、A/B测试的时间安排。 启动测试之前&#xff0c;需要经过Apple的审核流程。如果我们的预览资源被拒绝&#xff0c;需要调整并重…

java中,通过替换word模板中的关键字后输出一个新文档

一、要用到的jar包 我已上传了相关的jar包&#xff0c;需要的可以通过以下链接直接下载&#xff1a; https://download.csdn.net/download/qq_27387133/88558034 具体jar包截图&#xff1a; 二、实现的代码 注意&#xff1a;文件要用docx格式!!! word变量替换的方法&#…

Altium Designer学习笔记3

原理图生成PCB&#xff1a; 然后是手动布局&#xff1a; 可以看到先没有交叉。 最终再走线。 另外&#xff0c;了解下这个封装的一些概念。

MAVEN——PACKAGE、INSTALL、DEPLOY的联系与区别

我们在用maven构建java项目时&#xff0c;最常用的打包命令有mvn package、mvn install、deploy&#xff0c;这三个命令都可完成打jar包或war&#xff08;当然也可以是其它形式的包&#xff09;的功能&#xff0c;但这三个命令还是有区别的。下面通过分别执行这三个命令的输出结…

抖音短视频如何变成gif图?分享这一招就够了

现在抖音已经是每个人手机必备的消遣时间的软件了&#xff0c;各种各样的视频搞笑有趣。当我们想要将这些搞笑的视频画面提取出来做成gif图片的时候应该怎么办呢&#xff1f;很简单&#xff0c;使用在线制作GIF&#xff08;https://www.gif.cn/&#xff09;工具-GIF中文网&…

【数据结构初阶(3)】双向带头结点循环链表

文章目录 Ⅰ 概念及结构Ⅱ 基本操作实现1. 结点的定义2. 创建头节点3. 创建新结点4. 双向链表销毁5. 双向链表打印6. 双向链表尾插7. 双向链表尾删8. 双向链表头插9. 双向链表头删10. 双向链表查找11. 在指定 pos 位置前插入新结点12. 删除指定 pos 位置的结点 Ⅲ 十分钟手搓链…

架构探索之路-第一站-clickhouse | 京东云技术团队

一、前言 架构, 软件开发中最熟悉不过的名词, 遍布在我们的日常开发工作中, 大到项目整体, 小到功能组件, 想要实现高性能、高扩展、高可用的目标都需要优秀架构理念辅助. 所以本人尝试编写架构系列文章, 去剖析市面上那些经典优秀的开源项目, 学习优秀的架构理念来积累架构设…

Adobe 2022,2023,2024永久安装包全家桶下载网盘下载和最全的安装教程!

收集整理&#xff1a;Adobe合集 最新:已更新到2024 资源包含&#xff1a;AE Adobe AE2022是一个非常强大的视频制作和后期制作软件&#xff0c;它可以让您制作出非常出色的电影特效、动画和其他非常优秀的视频作品。为了更好地使用这款软件&#xff0c;我们需要一些比较全面…

TeXLive 2023安装教程

TeXLive 2023安装教程 本文介绍最新TeX发行版——TeXLive 2023的安装步骤。如果你想用LaTeX进行写作&#xff0c;那么需要搭建LaTeX环境&#xff1a;可以选择下面两种方案之一进行安装&#xff1a;(1)TeXLive 2023TeXStudio或者(2)TeXLive 2023WinEdt 11。其中TeXLive 2023是由…

网络连接Android设备

参考&#xff1a;https://blog.csdn.net/qq_37858386/article/details/123755700 二、网络adb调试开启步骤 1、把Android平板或者手机WiFi连接到跟PC机子同一个网段的网络&#xff0c;在设置-系统-关于-状态 下面查看设备IP,然后查看PC是否可以ping通手机的设备的IP。 2、先…

智慧箱变动环辅控系统

智慧箱变动环辅控系统是一种集监控、管理、控制于一体的智能化系统。依托电易云-智慧电力物联网&#xff0c;以箱式变电站为管理对象&#xff0c;加装箱变网关&#xff0c;它主要用于对箱变环境进行实时监测和控制&#xff0c;以确保箱变的正常运行和安全性。 具体来说&#xf…

el-checkbox 对勾颜色调整

对勾默认是白色 改的时候一直在试着改color人&#xff0c;其实不对。我用的是element ui 的复选框 /* 对勾颜色调整 */ .el-checkbox__inner::after{/* 是改这里的颜色 */border: 2px solid #1F7DFD; border-left: 0;border-top: 0;}

DeepStream--测试lpdnet车牌检测模型

模型地址&#xff1a;https://catalog.ngc.nvidia.com/orgs/nvidia/teams/tao/models/lpdnet/version 模型格式已经从加密的etlt格式变为onnx格式。这个模型用于从汽车图片上检测出车牌位置&#xff0c;模型有两个&#xff0c;一个用于美国车&#xff0c;一个用于中国车。 Nv…

怎么批量提取文件名字到Excel中?

怎么批量提取文件名字到Excel中&#xff1f;Excel是由微软公司开发的一种电子表格软件&#xff0c;它是Microsoft Office办公套件的一部分。Excel提供了强大的数据处理和分析功能&#xff0c;用户可以使用Excel创建、编辑和管理电子表格&#xff0c;进行各种计算、数据分析、图…

如何评估千兆光模块和万兆光模块的性能及稳定性

在互联网高速发展的情况下&#xff0c;网络通信产品中的千兆光模块和万兆光模块成为了网络中必不可少的配件之一。千兆光模块和万兆光模块的性能及稳定性是网络稳定的重要因素&#xff0c;其性能的优劣关系着网络服务器和客户端的通信速度、质量及数据传输的可靠性。那么&#…

深度学习知识点

深度学习过程 data [] for i,d in enumerate(data):image,label d image,label image.cuda(),label.cuda()img net(image)optimizer.zero_grad()#需要将梯度信息清零&#xff0c;因为梯度计算是按照batch分批次计算的&#xff0c;如果这一批batch没清零&#xff0c;会影响…

外部 prometheus监控k8s集群资源

prometheus监控k8s集群资源 一&#xff0c;通过CADvisior 监控pod的资源状态1.1 授权外边用户可以访问prometheus接口。1.2 获取token保存1.3 配置prometheus.yml 启动并查看状态1.4 Grafana 导入仪表盘 二&#xff0c;通过kube-state-metrics 监控k8s资源状态2.1 部署 kube-st…