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)生成测试报告

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV如何判断一张图片是否有过高的明暗变化

操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 前言 判断一张图片是否有过高的明暗变化,可以通过分析图像的亮度分布一致性来实现。一种常见的做法是计算图像的亮度标准差(Standard …

JAVA技术设计模式

设计模式结构图 设计原则 职责单一原则接口隔离原则 一个类对另一个类的依赖应该建立在最小的接口上 依赖倒置面向接口编程,参数或变量,依赖注入,使用父类 开闭原则 对扩展开放(对提供方),对修改关闭(对使用方) 用抽象构建框架,用实现扩展细节 里氏替换原则…

计算机网络--物理层

计算机网络--计算机网络概念 计算机网络--物理层 计算机网络--数据链路层 计算机网络--网络层 计算机网络--传输层 计算机网络--应用层 1. 基本概念 物理层的概念:物理层解决如何在在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输…

STM32编程:实现LED灯闪烁(基于手写SDK的方式)

项目结构 stm32f10x.h 文件 //寄存器的值常常是芯片外设自动更改的,即使CPU没有执行程序,也有可能发生变化 //编译器有可能会对没有执行程序的变量进行优化//volatile表示易变的变量,防止编译器优化, #define __IO volati…

2024-6-9 石群电路-27

2024-6-9,星期日,12:49,天气:晴,心情:晴。Hello,大家,我回来啦,昨天断更了一天,是为什么捏,是因为,我通过毕业答辩啦!&…

数据挖掘分析的一点进步分享

import pandas as pd import matplotlib.pyplot as plt import numpy as npdata pd.read_csv(heros.csv,encoding"gbk") data.head() 导入数据集 进行分析 df_datadata.copy() df_data.describe()df_data.info() df_data.drop(英雄,axis1,inplaceTrue) df_data[最…

[C++初阶]string类的详解

一、string类的模拟实现 上面已经对string类进行了简单的介绍,大家只要能够正常使用即可。在面试中,面试官总喜欢让我们来模拟实现string类,最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数。大家看下以下string类的实现是…

Flink 问题之 No Watermark (Watermarks are only available if EventTime is used)

问题背景 Flink-1.17.0在集群下,获取Kafka集群数据,进行流模式实时计算,Watermarks提示:No Watermark (Watermarks are only available if EventTime is used); source数据源是从kafka中读取topic数据,经…

【最新鸿蒙应用开发】——ArkUI两种开发范式

在进行鸿蒙应用开发,openHarmony提供了一种页面开发框架叫做ArkUI方舟框架来进行页面布局的开发。 ArkUI方舟UI框架 针对不同的应用场景及技术背景,方舟UI框架提供了两种开发范式,分别是基于ArkTS的声明式开发范式(简称“声明式…

分享美好,高清无阻 - 直播极简联网解决方案

1、需求背景 随着移动互联网、UGC模式和直播平台的发展,网络直播的门槛日益降低,越来越多的人希望成为直播的主角。基于物联网的户外直播无线联网解决方案应运而生,满足直播者的需求。 户外直播无线联网解决方案提供了无处不在的直播体验&a…

UniAnimate:华科提出人类跳舞视频生成新框架,支持合成一分钟高清视频

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

Java 环境配置 -- Java 语言的安装、配置、编译与运行

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 002 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…

未来AI大模型的发展趋势

大家好,我是小悟 未来AI大模型的发展趋势无疑将是多元化、高效化、普及化以及人性化。随着技术的飞速进步,AI大模型将在各个领域中展现出更加广泛和深入的应用,成为推动社会进步的重要力量。 多元化是AI大模型发展的重要方向。随着数据量的…

vue26:vue的环境搭建

vue环境安装配置 在点击上方链接前,注意!!!!!!!! 下方的红字!!!!!!!!&am…

在 Qt Creator 上创建 ROS 项目并新建/导入 ROS 包

0、引言 ⚠️ 在开始之前,您需要确保您已经为 Qt 配置好了 ROS 开发环境了。如果您还没有配置好,可以参考这篇文章 本文将着手探讨如何在 Qt Creator 上编辑 ROS 项目(工作空间)。 1、本教程使用到的相关软件或产品 Ubuntu 20.0…

【AI基础】第四步:保姆喂饭级-langchain+chatglm2-6b+m3e-base

在第三步手动安装chatglm2-6b时,已经可以通过web进行交互。langchain重新封装了一下AI框架,提供更加友好的开发功能,类似于AI届的spring框架。langchain的安装过程也类似于上一步说的:【AI基础】第三步:纯天然手动安装…

github异常问题总结

问题1: gitgitlab.gz.cvte.cn: Permission denied (publickey). fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists.解决方法: 这个错误表示 GitLab 服务器拒绝了你的 SSH…

【MySQL】(基础篇二) —— MySQL初始用

MySQL初始用 目录 MySQL初始用基本语法约定选择数据库查看数据库和表其它的SHOW 在Navicat中,大部分数据库管理相关的操作都可以通过图形界面完成,这个很简单,大家可以自行探索。虽然Navicat等图形化数据库管理工具为操作和管理数据库提供了非…

【小白专用24.6.8】c#异步方法 async task调用及 await运行机制

await是C#中用于等待异步操作完成的关键字。它通常用于异步方法内部,使得在等待异步操作期间,线程可以继续执行其他操作,从而保持程序的响应性。 在使用await时,需要注意以下几点: 1. async修饰符: 使用…

PgSQL技术内幕 - psql与服务端连接与交互机制

PgSQL技术内幕 - 客户端psql与服务端连接与交互机制 简单来说,PgSQL的psql客户端向服务端发起连接请求,服务端接收到请求后,fork出一个子进程,之后由该子进程和客户端进行交互,处理客户端的SQL等,并将结果返…