当前位置: 首页 > news >正文

28-unittest批量执行(discover)

        unittest框架提供了创建测试用例、测试套件以及批量执行的解决方案。

        利用单元测试框架创建测试类,可以把每个测试方法看成是一个最小的单元, 由测试容器组装打包起来,然后可以统一执行,最后输出测试报告。

一、UnitTest核心要素

  • TestCase:测试⽤例,脚本代码。
  • TestSuite:测试套件,⽤来组装(打包)TestCase(测试⽤例)的,即可以将多个⽤例脚本⽂件组装到⼀起,用于批量执行测试。
  • TestRunner:测试执⾏,用来执⾏TestSuite(测试套件)中的测试用例。
  • TestLoader:测试加载,⽤来组装(打包)TestCase(测试⽤例)的,是对TestSuite(测试套件)功能的补充。
  • Fixture:测试脚手架,用于初始化和清理测试的运行环境,比如打开浏览器、打开指定网页、关闭浏览器等,其中setUp()和tearDown()是最常用的方法。
  • TestReport:生成测试报告。

二、TestCase测试用例

       在unittest框架中,一个测试用例指的是测试类中的测试方法。测试用例是由测试类中的测试方法组成的,每个测试方法对应于被测试代码的一个具体功能或者一个场景。通常情况下,一个.py文件中可能包含多个测试类和多个测试方法。

三、TestSuite测试套件

        测试套件可以将多个测试⽤例组装打包到⼀起,用于批量执行测试。

1)操作步骤
  1. 实例化TestSuite测试套件对象。
    suite = unittest.TestSuite()
  2. 添加测试用例。
    1. 方式一:添加一个测试类中的一个测试方法。
      # ClassName:测试类名
      # MethodName:测试方法名
      suite.addTest(ClassName("MethodName"))
    2. 方式二:将指定测试类中的测试用例全部添加到测试套件中。
      suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(ClassName))
  3. 实例化TestRunner对象,执行TestSuite中的测试用例。
    runner = unittest.TextTestRunner()
    runner.run(suite)
2)创建cal.py文件,编写测试类及测试方法
import unittest# 实现加法操作
def add(a, b):return a + b# 实现减法操作
def sub(a, b):return a - b# 第一个测试类
class TestAdd(unittest.TestCase):def test_add_01(self):print('TestAdd.test_add_01:{}'.format(add(1, 1)))def test_add_02(self):print('TestAdd.test_add_02:{}'.format(add(2, 2)))# 第二个测试类
class TestSub(unittest.TestCase):def test_sub_01(self):print('TestAdd.test_sub_01:{}'.format(sub(1, 1)))def test_sub_02(self):print('TestAdd.test_sub_01:{}'.format(sub(2, 1)))
3)创建test.py文件,批量执行测试用例
'''TestSuite 测试套件注:TestSuite将测试用例组装打包好后,需要通过TestRunner进行批量执行。
'''
# 1.导入模块
import unittest
from cal import TestAdd
from cal import TestSub# 2.实例化TestSuite测试套件对象
suite = unittest.TestSuite()# 3.组装打包测试用例
#   方式一:添加一个测试类中的测试方法
suite.addTest(TestAdd('test_add_01'))
suite.addTest(TestAdd('test_add_02'))
#   方式二:将指定测试类中的测试方法全部添加到TestSuite中
suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestSub))# 4.实例化TestRunner对象,批量执行TestSuite中的测试用例
runner = unittest.TextTestRunner()
runner.run(suite)

四、TestRunner测试执行

        用来执⾏TestSuite测试套件中的测试用例。使用步骤参考上述示例代码:

  1. 导入模块:import unittest。
  2. 实例化TestRunner对象:runner = unittest.TextTestRunner()。
  3. 执⾏测试用例:runner.run(TestSuite测试套件对象)

五、TestLoader测试加载

        TestSuite一次只能添加单个测试方法或单个测试类,而TestLoader能一次添加多个.py文件中的测试用例。

        使用unittest.TestLoader,通过该类下面的discover()方法自动搜索指定目录下的指定.py文件,并将查找到的测试用例组装到测试套件中。

1)使用步骤
2)示例代码
'''TestLoader 测试加载
'''
# 1.导入模块
import unittest# 2.添加.py文件中的测试用例
# unittest.defaultTestLoader.discover('测试用例所在目录', '测试用例代码文件名.py')
suite = unittest.defaultTestLoader.discover('.', 'cal.py')# 3.实例化TestRunner对象,批量执行测试用例
runner = unittest.TextTestRunner()
runner.run(suite)
3)TestLoader和TestSuite的区别

六、Fixture测试脚手架

        在测试⽤例执⾏前后会⾃动执⾏的代码结构,例如:setUp、tearDown、setUpClass、tearDownClass等,可用于初始化和清理测试的运行环境,比如打开浏览器、打开指定网页、关闭浏览器等

七、TestReport测试报告

        生成测试报告需要第三方工具插件,插件有很多,比如:HTMLTestReport插件、HTMLTestRunner插件、HTMLTestRunner_cn插件等。

        安装命令:pip install HTMLTestReport

1)使用步骤
  1. 导入模块:from htmltestreport import HTMLTestReport
  2. 封装测试套件:TestSuite或者TestLoader
  3. 实例化HTMLTestReport对象。
  4. 执行测试套件中的测试用例。

2)示例代码
import unittest
from htmltestreport import HTMLTestReport
from cal import TestAdd# 1.创建TestSuite测试套件
suite = unittest.TestSuite()
suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(TestAdd))# 2.实例化HTMLTestReport对象
report_path = "./report/report.html"
report = HTMLTestReport(report_path, title='单元测试报告', description='V1.0')# 3.执行测试套件中的测试用例
report.run(suite)
3)生成测试报告

相关文章:

  • AI学习指南机器学习篇-决策树的特征选择和分裂准则
  • Linux | 标准IO编程
  • 【传知代码】DETR[端到端目标检测](论文复现)
  • Hash String 学习笔记
  • 简单通用的系统安装、备份、还原方法,支持 ARM 系统【Ventory+FirePE+DiskGenius】
  • 安装node
  • 数据结构笔记2 栈和队列
  • 服务器数据恢复—服务器raid5上层zfs文件系统数据恢复案例
  • java线程池介绍
  • 2024 IDEA最新永久使用码教程(2099版)
  • 前端渲染大量数据思路【虚拟列表】【异步机制】
  • Torrent、Magnet链
  • ASP.NET第五章 Application、Session和Cookie对象
  • Python中包(package)与模块(module)的概念 以及 import 问题
  • Linux基本指令查询硬件信息001
  • CSS 三角实现
  • express + mock 让前后台并行开发
  • Javascript设计模式学习之Observer(观察者)模式
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • python大佬养成计划----difflib模块
  • Shell编程
  • swift基础之_对象 实例方法 对象方法。
  • uni-app项目数字滚动
  • vue--为什么data属性必须是一个函数
  • webpack入门学习手记(二)
  • 初识 beanstalkd
  • 电商搜索引擎的架构设计和性能优化
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 解析 Webpack中import、require、按需加载的执行过程
  • 思否第一天
  • 协程
  • FaaS 的简单实践
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 阿里云服务器如何修改远程端口?
  • ​​​​​​​​​​​​​​Γ函数
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #07【面试问题整理】嵌入式软件工程师
  • #AngularJS#$sce.trustAsResourceUrl
  • #Linux(帮助手册)
  • #NOIP 2014# day.1 T2 联合权值
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (11)MSP430F5529 定时器B
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (Git) gitignore基础使用
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (PySpark)RDD实验实战——取一个数组的中间值
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (三) diretfbrc详解
  • (小白学Java)Java简介和基本配置
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)