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

        安装命令: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.mzph.cn/diannao/24854.shtml

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

相关文章

最新区块链论文速读--CCF A会议 CCS 2023 共25篇 附pdf下载(3/4)

Conference:ACM Conference on Computer and Communications Security (CCS) CCF level:CCF A Categories:network and information security Year:2023 Num:25 第1~7篇区块链文章请点击此处查看 第8~13篇区块链文…

【2024】Kafka Streams详细介绍与具体使用(1)

目录 介绍关键特性应用场景核心概念部署方式kafka streams的处理模式 具体使用1、准备工作2、添加依赖3、代码实现3、测试 介绍 Kafka Streams是构建在Apache Kafka之上的客户端库,用于构建高效、实时的流处理应用。它允许你以高吞吐量和低延迟的方式处理记录流&am…

乡村振兴的乡村旅游品质提升:提升乡村旅游服务质量,打造乡村旅游品牌,增强乡村旅游吸引力,打造具有旅游特色的美丽乡村

目录 一、引言 二、提升乡村旅游服务质量 1、完善基础设施建设 2、提升服务人员素质 3、规范服务流程 三、打造乡村旅游品牌 1、挖掘乡村文化特色 2、打造特色旅游产品 3、加强品牌宣传和推广 四、增强乡村旅游吸引力 1、创新旅游体验方式 2、打造旅游精品线路 3、…

【进阶篇-Day2:JAVA包、抽象类、接口、多态】

目录 1、包2、抽象类2.1 抽象类的定义2.2 抽象类的注意事项2.3 abstract关键字的冲突 3、接口3.1 接口的介绍3.2 接口中的成员特点3.2.1 接口中的成员特点3.2.2 类和接口之间的各种关系 3.3 抽象类和接口的对比 4、多态4.1 多态的介绍4.2 多态的前提4.3 多态的成员访问特点4.4 …

vuInhub靶场实战系列--Kioptrix Level #1

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶机信息1.2 靶场配置 二、信息收集2.1 主机发现2.2 端口扫描2.2.1 masscan2.2.2 nmap 2.3 指纹识别2.4 目录扫描2.4.1 dirb…

华为云服务器-云容器引擎 CCE环境构建及项目部署

1、切换地区 2、搜索云容器引擎 CCE 3、购买集群 4、创建容器节点 通过漫长的等待(五分钟左右),由创建中变为运行中,则表明容器已经搭建成功 购买成功后,返回容器控制台界面 5、节点容器管理 6、创建redis工作负载 7、创建mysql工作负载 8、…

E: 仓库 “http://download...graphics:/darktable/xUbuntu_22.04 InRelease” 没有数字签名

问题 Ubuntu22.04装了darktable软件没装好,已经卸载了但是没卸载干净,终端使用 sudo apt update 出现的问题: 解决: sudo nano /etc/apt/sources.list.d/*darktable*.list找到了该软件的相关仓库条目:直接给他注释掉就行了。

重构大学数学基础_week04_从点积理解傅里叶变换

这周我们来看一下傅里叶变换。傅里叶变换是一种在数学和许多科学领域中广泛应用的分析方法,它允许我们将信号或函数从其原始域(通常是时间域或空间域)转换到频域表示。在频域中,信号被表示为其组成频率的幅度和相位,这…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:大疆RoboMaster AI挑战赛

NVIDIA Jetson TX2助力机器人战队斩获RoboMaster AI挑战赛冠亚军 一个汇聚数百万机器人专家与研究人员的赛场,一场兼具工程、策略和团队挑战的较量,说的正是近日刚刚在澳大利亚布里斯本ICRA大会上闭幕的大疆RoboMaster AI挑战赛今年的冠军I Hiter以及亚军…

进程通信(IPC-Inter Process Communication)

进程之间的通信通过内核空间实现 IPC技术 ①管道(匿名管道/命名管道-FIFO队列) ②System V IPC(消息队列、信号量和共享内存) ③套接字(UNIX套接字&Internet套接字) ※信号 软中断,信号提供了一种处理异步事件的方法,作为进程通信的一种机制&am…

LeetCode714买卖股票的最佳时机含手续费

题目描述 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买…

责任链模式(行为型)

目录 一、前言 二、责任链模式 三、总结 一、前言 责任链模式(Chain of Responsibility Pattern)也叫职责链模式,是一种行为型设计模式,职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦…

第二十一讲:编译和链接

第二十一讲:编译和链接 1.翻译环境和运行环境1.1翻译环境1.2编译1.2.1预编译(预处理)1.2.2编译1.2.2.1词法分析1.2.2.2语法分析1.2.2.3语义分析 1.2.3汇编 1.3链接1.4运行环境1.5#define符号1.5.1#define的使用和原理1.5.2#define使用的陷阱注…

Python学习从0开始——Kaggle机器学习004总结2

Python学习从0开始——Kaggle机器学习004总结2 一、缺失值二、分类变量2.1介绍2.2实现1.获取训练数据中所有分类变量的列表。2.比较每种方法方法1(删除分类变量)方法2(序数编码)方法3独热编码 三、管道3.1介绍3.2实现步骤1:定义预处理步骤步骤2:定义模型步骤3:创建和评估管道 四…

【JAVA】javadoc,如何生成标准的JAVA API文档

目录 1.什么是JAVA DOC 2.标签 3.命令 1.什么是JAVA DOC 当我们写完JAVA代码,别人要调用我们的代码的时候要是没有API文档是很痛苦的,只能跟进源码去一个个的看,一个个方法的猜,并且JAVA本来就不是一个重复造轮子的游戏&#…

探索LLM 在金融领域有哪些潜在应用——通过使用 GPT-4 测试金融工程、市场预测和风险管理等 11 项任务

概述 近年来,用于自然语言理解和生成的人工智能技术在自然语言处理领域取得了突破性进展,OpenAI 的 GPT 和其他大规模语言模型在该领域取得了显著进步。这些模型通过先进的计算能力和算法,展示了处理复杂任务的能力,如理解复杂语…

vue2组件封装实战系列之tag组件

作为本系列的第一篇文章,不会过于的繁杂,并且前期的组件都会是比较简单的基础组件!但是不要忽视这些基础组件,因为纵观elementui、elementplus还是其他的流行组件库,组件库的封装都是套娃式的,很多复杂组件…

关于python中的关键字参数

在python语言中存在两种传参方式: 第一种是按照先后顺序来传参,这种传参风格,称为“位置参数”这是各个编程语言中最普遍的方式。 关键字传参~按照形参的名字来进行传参! 如上图所示,在函数中使用关键字传参的最大作…

计算机网络 ——网络层(IPv4地址)

计算机网络 ——网络层(IPv4地址) 什么是IPv4地址IP地址的分类特殊的IP地址 查看自己的IPv4地址 我们今天来看IPv4地址: 什么是IPv4地址 IPv4(Internet Protocol version 4)是第四版互联网协议,是第一个被…

使用CodeGen进行程序综合推理

Program Synthesis with CodeGen — ROCm Blogs (amd.com) CodeGen是基于标准Transformer的自回归语言模型家族,用于程序合成,正如作者所定义的,它是一种利用输入-输出示例或自然语言描述生成解决指定问题的计算机程序的方法。 我们将测试的…