28-unittest批量执行(discover)

news2024/11/28 4:29:43

        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插件等。

        安装命令: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)生成测试报告

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

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

相关文章

DevOps在数字化转型中的作用——实现数字化可视性

DevOps 的出现是为了满足不断增长的市场和消费者对技术应用程序的需求。它旨在在不牺牲软件质量的情况下创建更快的开发环境。DevOps 还专注于在快速开发生命周期中提高软件的整体质量。它依赖于多种技术、平台和工具的组合来实现所有这些目标。 容器化是一项彻底改变了我们开发…

云手机定位切换,带来的不只是便利

当我们利用云手机的定位切换时,首先感受到的确实是极大的便利。 我们就像是拥有了瞬间移动的超能力,可以自由地在不同城市、甚至不同国家的虚拟场景中穿梭。无论是为了更精准地获取当地的信息,比如实时的交通状况、特色店铺等,还…

Web 版 | 开源数据库设计软件 | drawdb

文章目录 简介快速运行方式 1:本地运行方式 2:Docker 构建并运行方式 3:Docker 运行参考🚀 目标: 安装一个 Web 版本的 ER 图设计软件! 👉 GitHub: https://github.com/drawdb-io/drawdb 【11.7k ⭐】 简介 DrawDB:Free, simple, and intuitive database design …

【python】python指南(二):命令行参数解析器ArgumentParser

一、引言 对于算法工程师来说,语言从来都不是关键,关键是快速学习以及解决问题的能力。大学的时候参加ACM/ICPC一直使用的是C语言,实习的时候做一个算法策略后台用的是php,毕业后做策略算法开发,因为要用spark&#x…

Linux下线程的互斥与同步详解

🤖个人主页:晚风相伴-CSDN博客 💖如果觉得内容对你有帮助的话,还请给博主一键三连(点赞💜、收藏🧡、关注💚)吧 🙏如果内容有误或者有写的不好的地方的话&…

ChatGPT3.5和ChatGPT4.0、ChatGPT4o对比

一、ChatGPT3.5、ChatGPT4.0、ChatGPT4o对比 目前ChatGPT有三个主要版本,分别是ChatGPT3.5、ChatGPT4.0、ChatGPT4o,这三个版本之间有什么差异呢? 对比项ChatGPT3.5ChatGPT4.0ChatGPT4o参数数量1750亿约1万亿未公开输入文本文本、图片文本、…

2+1退休模式解析(王老师同款)

互联网商业圈有比较多的商家老板认识王老师,他在全国多个地方开展他的课程,还是有比较多的商家去学习,其实看小编文章也能学到。下面分析一下王老师所讲的21退休模式。 21退休模式优势: 1、裂变快。在21退休模式中,每…

k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)

故障信息 pod一直处于创建中 查看pod详细信息显示 kubectl describe pod 容器id文字 Events: Type Reason Age From Message Normal Scheduled 5m30s default-scheduler Successfully assigned default/nginx-server2-f97c6b9d5-d6dsp to worker02 Warning FailedCreatePod…

算法-找出N个数组的共同元素

一、代码与执行结果 财经新闻是大众了解金融事件的重要渠道,现有N位编辑,分别对K篇新闻进行专业的编辑与排版。需要您找出被这N位编辑共同编辑过的新闻,并根据这些新闻ID升序排列返回一个数组。 import random# 查找编辑共同处理的新闻id def…

U盘安装windows11详解教程

准备工作 准备好一个微PE启用U盘,将需要安装的win11镜像拷贝进去。详见教程制作PE启动U盘教程-CSDN博客 详细操作 1。首先我们需要将U盘插入电脑的USB接口。tips:尽量将U盘插到主机后置USB接口,不要将U盘插到前置USB接口或者延长线上&…

微型丝杆与滚珠丝杆性能差异与适用场景!

滚珠丝杆是工具机械和精密机械上最常使用的传动元件,其主要功能是将旋转运动转换成线性运动,或将扭矩转换成轴向反复作用力。同时兼具高精度、可逆性和高效率的特点。而微型丝杆是一种直径为0.5mm以下且线性误差在几微米以内,精度高、传动稳定…

LabVIEW与PLC的区别

LabVIEW和PLC是工业自动化领域中常见的两种控制和测控方案,各自有独特的优点和适用场景。本文将从多角度比较两者,帮助用户在选择控制系统时做出更明智的决策。 技术背景 LabVIEW LabVIEW是由National Instruments公司开发的图形化编程环境&#xff0…

win11家庭版安装docker

在 Windows 11 家庭版上安装 Docker 的详细教程 本文将详细介绍如何在 Windows 11 下安装 Docker。Docker 是一个开源的容器平台,可以轻松创建、部署和管理容器化应用程序。 1. 本电脑系统信息 在安装 Docker 之前,请确保您的 Windows 11 系统满足以下…

UE5中在地形中加入湖、河

系统水资产添加 前提步骤123 完成 前提 使用版本 UE5.0.3,使用插件为UE内置的Water和water Extras. 步骤 1 记得重启 2 增加地形&#xff0c;把<启用编辑图层>勾选 如果地形没有勾选上编辑图层&#xff0c;那么就会导致湖、河等水景象无法融入地形。 如果忘记勾选…

Redis 内存回收

文章目录 1. 过期key处理1.1 惰性删除1.2 周期删除 2. 内存淘汰策略 Redis 中数据过期策略采用定期删除惰性删除策略结合起来&#xff0c;以及采用淘汰策略来兜底。 定期删除策略&#xff1a;Redis 启用一个定时器定时监视所有的 key&#xff0c;判断key是否过期&#xff0c;过…

springcloudalibaba项目注册nacos,在nacos上修改配置项不生效问题

一、背景 之前的项目启动正常,后来发现springcloudalibaba的各版本匹配不正确,于是对项目中的springboot、springcloud、springcloudalibaba版本进行匹配升级,nacos1.4.2匹配的springboot、springcloud、springcloudalibaba版本与我的项目中的版本比较接近,于是我便重新安…

Vue的基础知识:v-model的原理,由:value与@input合写。

原理&#xff1a;v-model本质上是一个语法糖&#xff0c;比如应用在输入框上&#xff0c;就是value属性和input事件的合写。&#xff08;补充说明&#xff1a;语法糖就是语法的简写&#xff09; 作用&#xff1a;提供数据的双向绑定 1.数据变&#xff0c;视图&#xff08;也就…

MySQL 存储过程(一)

本篇主要介绍MySQL存储过程的相关内容 目录 一、什么是存储过程&#xff1f; 二、基本语法 创建存储过程 调用存储过程 查看存储过程 删除存储过程 三、变量 系统变量 用户自定义变量 局部变量 四、存储过程的参数 in out inout 一、什么是存储过程&#xff1f…

【React】classnames 优化类名控制

1. 介绍 classnames是一个简单的JS库&#xff0c;可以非常方便的通过条件动态的控制class类名的显示 ClassNames是一个用于有条件处理classname字符串连接的库 简单来说就是动态地去操作类名&#xff0c;把符合条件的类名粘在一起 现在的问题&#xff1a;字符串的拼接方式不…

uc/OS-III多任务程序

文章目录 一、实验内容二、实验步骤&#xff08;一&#xff09;基于STM32CubeMX建立工程&#xff08;二&#xff09;获取uc/OS-III源码&#xff08;三&#xff09;代码移植 三、修改mai.c文件四、实验现象 一、实验内容 学习嵌入式实时操作系统&#xff08;RTOS&#xff09;,以…