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

news/2024/5/20 20:02:28

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

 总结:

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

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

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

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

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

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


https://www.xjx100.cn/news/3091923.html

相关文章

一文了解Spring依赖注入时循环依赖问题

目录 什么是循环依赖 凡是Java的循环依赖都会有问题? 为什么Spring循环依赖会有问题? Spring解决循环依赖问题的思路? 设置二级缓存对象池 方案一直接将实例化对象放入早期对象池 方案一缺点 方案二-将实例化对象处理AOP后放入早期对象…

常用的指令集

常用的命令行指令 以下是一些常用的命令行指令,它们的类型和作用: 命令类型作用ls文件/目录管理列出当前目录下的文件和子目录cd文件/目录管理改变当前工作目录mkdir文件/目录管理创建新目录rm文件/目录管理删除文件或目录cp文件/目录管理复制文件或目…

python连接hive报错:TypeError: can‘t concat str to bytes

目录 一、完整报错 二、解决 三、 其他报错 四、impala方式连接hive 或者直接使用 pip install pyhive[hive] 安装。需要先 pip uninstall pyhive。 一、完整报错 Traceback (most recent call last): File "D:/Gitlab/my_world/hive2csv.py", line 18, in <…

ubuntu中经常脚本汇总

ubuntu中经常脚本汇总 # get pascal voc # standard voc mkdir -p data cd data wget -c http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar tar -xvf VOCtrainval_11-May-2012.tar wget -c http://pjreddie.com/media/files/VOC2012test.tar tar -…

如何使用 RTLS?

RTLS 的不同应用几乎是无限的。毕竟&#xff0c;几乎任何人都可以从更好地了解事物的实时变化中受益。位置数据的一般价值导致了各种各样的最终用途应用&#xff0c;从制造工作跟踪、库存管理、堆场管理、供应链和物流&#xff0c;到医疗保健、动物跟踪以及采矿和采矿业人员的安…

ES索引数据清理脚本示例

说明&#xff1a;我得索引是按月份创建的&#xff0c;索引名后面都有yyyy.MM 需求&#xff1a;删除三个月以前的索引&#xff0c;清理收集的应用日志数据&#xff0c;释放磁盘空间 #!/bin/bash# 定义 Elasticsearch 节点的地址 ELASTICSEARCH_HOST"192.168.53.100" …

开发盲盒商城的意义

开发盲盒商城的意义在于为电商行业带来新的增长机会&#xff0c;满足消费者对购物方式趣味性的需求&#xff0c;同时提升用户的参与度&#xff0c;为商家带来更多销售机会和增强影响力的机遇。 盲盒商城系统通过独特的盲盒玩法&#xff0c;为用户带来了全新的趣味购物体验&…

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

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