【自动化测试必学语言】python:UnitTest框架
目录
介绍
框架
什么是UnitTest框架?
为什么使用UnitTest框架?
UnitTest核心要素(unitest 的组成部分)
1.TestCase(最核心的模块)
2.TestSuite
3.TestRunner
4.TestLoader
5.Fixture
TestCase(测试用例)
问题1 代码文件的命名不规范
问题 2 代码运行没有结果
问题 3 没有找到用例
练习
unittest 组成
TestLoader (测试加载)
Fixture(测试夹具)
方法级别【掌握】
类级别【掌握】
模块级别【了解】
介绍
-
框架
说明 :
- 框架英文单词 framework
- 为解决⼀类事情的功能集合
> 需要按照框架的规定 ( 套路 ) 去书写代码
-
什么是UnitTest框架?
概念 : UnitTest 是 Python 自带的⼀个单元测试框架,用它来做单元测试。----自带的框架 ( 官方 ) : 不需要单外安装 , 只要安装了 Python , 就可以使用random , json , os , time第三方框架 : 想要使用需要先安装后使用 ( pytest )selenium, appium , requests----单元测试框架 : 主要用来做单元测试 , ⼀般单元测试是开发做的 .对于测试来说 , unittest 框架的作用是自动化脚本 ( 用 例代码 ) 执行框架 ( 使用 unittest 框架 来 管理 运行 多个测试用例的 )
-
为什么使用UnitTest框架?
- 能够组织多个用例去执行
- 提供丰富的断言方法(让程序代码代替人工自动的判断预期结果和实际结果是否相符)
- 能够生成测试报告
-
UnitTest核心要素(unitest 的组成部分)
1.TestCase(最核心的模块)
TestCase ( 测试用例 ) , 注意这个测试用例是 unittest 框架的组成部分 , 不是手工和自动化中我们所说的用例 ( TestCase )主要作用: 每个 TestCase ( 测试用例 ) 都是⼀个代码文件 , 在这个代码文件中 来书写 真正的用例代码
2.TestSuite
TestSuite ( 测试套件 ) , 用 来 管理 组装 ( 打包 ) 多个 TestCase ( 测试用例 ) 的
3.TestRunner
TestRunner ( 测试执行 , 测试运行 ), 来 执行 TestSuite ( 测试套件 ) 的
4.TestLoader
TestLoader ( 测试加载 ) , 功能是对 TestSuite ( 测试套件 ) 功能的补充 , 管理组装 ( 打包 ) 多个 TestCase ( 测试用例 ) 的
5.Fixture
Fixture ( 测试夹具 ) , 书写在 TestCase ( 测试用例 ) 代码中 , 是⼀个代码结构 , 可以在每个方法执行前后都会执行的内容举例 :登录的测试用例 , 每个用例中重复的代码就可以写在 Fixture 代码结构中 , 只写⼀遍 , 但每次用例方法的执行 , 都会执行 Fixture 中的代码1. 打开浏览器2. 输入网址
TestCase(测试用例)
1. 是⼀个代码文件 , 在代码文件中来书写真正的用例代码2. 代码文件的名字必须按照标识符的规则来书写 ( 可以将代码的作用在文件的开头使用注释说明 )
- 步骤
1. 导包 ( unittest )2. 自 定义测试类3. 在测试类中书写测试方法4. 执行用例
- 代码
"""
代码的⽬的: 学习 TestCase(测试⽤例)模块的书写⽅法
"""
# 1 导包
import unittest# 2 ⾃定义测试类, 需要继承 unittest 模块中的TestCase 类即可
class TestDemo(unittest.TestCase):# 3, 书写测试⽅法, 即 ⽤例代码. ⽬前没有真正的⽤例代码, 使⽤ print 代替# 书写要求, 测试⽅法 必须以 test_ 开头(本质是以test 开头)def test_method1(self):print('测试⽅法 1')def test_method2(self):print('测试⽅法 2')
# 4 执⾏⽤例(⽅法)
# 4.1 将光标放在 类名的后边 运⾏, 会执⾏类中的所有的测试⽅法
# 4.2 将光标放在 ⽅法名的后边 运⾏, 只执⾏当前的⽅法
问题1 代码文件的命名不规范
问题 2 代码运行没有结果
右键运行没有 unittests for 的提示 , 出现的问题解决方案 :方案 1. 重新新建⼀个代码文件 , 将写好的代码复制进去方案 2. 删除已有的运行方式

问题 3 没有找到用例
测试方法中不是以 test _ 开头的 , 或者单词写错了
TestSuite ( 测试套件 ): 管理 打包 组装 TestCase ( 测试用例 ) 文件的TestRunner ( 测试执行 ) : 执行 TestSuite ( 套件 )
- 步骤
1. 导包 ( unittest )2. 实例化 ( 创建对象 ) 套件对象3. 使⽤套件对象添加用例方法4. 实例化运行对象5. 使用运行对象去执行套件对象
- 代码
TestSuite ( 测试套件 ): 是用来管理多个 TestCase ( 测试用例 ) 的 , 先创建多个 TestCase ( 测试用例 ) 文 件
"""
学习 TestSuite 和 TestRunner 的使⽤
"""
# 1. 导包(unittest)
import unittest
from hm_07_testcase1 import TestDemo1
from hm_07_testcase2 import TestDemo2# 2. 实例化(创建对象)套件对象,
suite = unittest.TestSuite()# 3. 使⽤套件对象添加⽤例⽅法
# ⽅式⼀, 套件对象.addTest(测试类名('⽅法名')) #
建议测试类名和⽅法名直接去复制,不要⼿写
suite.addTest(TestDemo1('test_method1'))
suite.addTest(TestDemo1('test_method2'))
suite.addTest(TestDemo2('test_method1'))
suite.addTest(TestDemo2('test_method2'))# 4. 实例化运⾏对象
runner = unittest.TextTestRunner()
# 5. 使⽤运⾏对象去执⾏套件对象
# 运⾏对象.run(套件对象)
runner.run(suite)
"""
学习 TestSuite 和 TestRunner 的使⽤
"""
# 1. 导包(unittest)
import unittest# 2. 实例化(创建对象)套件对象,
from hm_07_testcase1 import TestDemo1
from hm_07_testcase2 import TestDemo2
suite = unittest.TestSuite()# 3. 使⽤套件对象添加⽤例⽅法
# ⽅式⼆ 将⼀个测试类中的所有⽅法进⾏添加
# 套件对象.addTest(unittest.makeSuite(测试类名))
# 缺点: makeSuite() 不会提示
suite.addTest(unittest.makeSuite(TestDemo1))
suite.addTest(unittest.makeSuite(TestDemo2))# 4. 实例化运⾏对象
runner = unittest.TextTestRunner()
# 5. 使⽤运⾏对象去执⾏套件对象
# 运⾏对象.run(套件对象)
runner.run(suite)

练习
1. 在 tools 模块中定义 add 函数 , 对两个数字进行求和计算2. 书写 TestCase 代码对 add () 进行测试用例 1 : 1 , 2 , 3用例 2 : 10 , 20 , 30用例 3 : 2 , 3 , 5
- 用例代码
"""案例练习"""
# 1,导包
import unittest
from tools import add# 2, ⾃定义测试类class TestAdd(unittest.TestCase):# 3. 书写测试⽅法, 就是测试⽤例代码def test_method1(self):# 1, 2, 3 判断实际结果和预期结果是否相符if add(1, 2) == 3:print('测试通过')else:print('测试不通过')def test_method2(self):if add(10, 20) == 30:print('测试通过')else:print('测试不通过')def test_method3(self):# 1, 2, 3 判断实际结果和预期结果是否相符if add(2, 3) == 5:print('测试通过')else:print('测试不通过')
- 套件和执行的代码
import unittest# 实例化套件对象
from hm_08_test import TestAddsuite = unittest.TestSuite()
# 添加测试⽅法
suite.addTest(unittest.makeSuite(TestAdd))
# 实例化执⾏对象
runner = unittest.TextTestRunner()
runner.run(suite)
unittest 组成
TestLoader (测试加载)
TestLoader ( 测试加载 ) , 作用和 TestSuite 的作用是一样的 , 对 TestSuite 功能的补充 ,用来组装测试用例的比如 : 如果 TestCase 的代码文件有很多 , ( 10,20 , 30 )- 使用步骤1. 导包2. 实例化测试加载对象并添加用例 ---> 得到的是 suite 对象3. 实例化 运行对象4. 运行对象执行套件对象
代码实现
在一个项目中 TestCase ( 测试用例 ) 的代码 , 一般放在一个单独的目录 ( case )
"""TestLoader 的使用"""
# 1, 导包
import unittest# 2, 实例化加载对象并添加用例
# unittest.TestLoader().discover('用例所在的路径', '用例的代码文件名')
# 用例所在的路径,建议使用相对路径, 用例的代码文件名可以使用 *(任意多个任意字符) 通配符
# suite = unittest.TestLoader().discover('./case', 'hm*.py')
# suite = unittest.TestLoader().discover('./case', '*test*.py')
# suite = unittest.TestLoader().discover('./case', '*test*')
suite = unittest.TestLoader().discover('./case', '*case1.py')# 3, 实例化运行对象
# runner = unittest.TextTestRunner()
# # 4, 执行
# runner.run(suite)# 可以将 3 4 步 变为一步
unittest.TextTestRunner().run(suite)
# 1. 导包
# 2. 使用默认的加载对象并加载用例
# 3. 实例化运行对象并运行"""TestLoader 的使用"""
# 1, 导包
import unittest# 2, 使用默认的加载对象并加载用例
suite = unittest.defaultTestLoader.discover('case', 'hm_*.py')# 可以将 3 4 步 变为一步
unittest.TextTestRunner().run(suite)
Fixture(测试夹具)
Fixture ( 测试夹具 ) 是一种代码结构在某些特定的情况下 会自动执行
方法级别【掌握】
在每个测试方法 ( 用例代码 ) 执行前后都会自动调用的结构
# 方法执行之前
def setUp(self):每个测试方法执行之前都会执行pass# 方法执行之后
def tearDown(self):每个测试方法执行之后都会执行pass
类级别【掌握】
在每个测试类中所有方法执行前后都会自动调用的结构 ( 在整个类中 执行之前执行之后个一次 )
# 类级别的Fixture 方法, 是一个 类方法
# 类中所有方法之前
@classmethod
def setUpClass(cls):pass
# 类中所有方法之后
@classmethod
def tearDownClass(cls):pass
模块级别【了解】
模块 : 代码文件在每个代码文件执行前后执行的代码结构
# 模块级别的需要写在类的外边直接定义函数即可
# 代码文件之前
def setUpModule():pass# 代码文件之后
def tearDownModule():pass
方法级别和类级别的 前后的方法,不需要同时出现,根据用例代码的需要自行的选择使用
相关文章:
【自动化测试必学语言】python:UnitTest框架
目录 介绍 框架 什么是UnitTest框架? 为什么使用UnitTest框架? UnitTest核心要素(unitest 的组成部分) 1.TestCase(最核心的模块) 2.TestSuite 3.TestRunner 4.TestLoader 5.Fixture TestCase(…...
大话LLM之向量数据库
向量数据库是一种专门设计的存储系统,旨在高效处理和查询高维向量数据,通常用于人工智能和机器学习应用中,以实现快速准确的数据检索。 好的,今天我们就来聊聊人工智能和向量数据库的事儿。现在人工智能发展得特别快,特…...
EmguCV学习笔记 C# 2.2 Matrix类
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV学习笔记目录 Vb.net EmguCV学习笔记目录 C# 笔者的博客网址:VB.Net-CSDN博客 教程相关说明以及如何获得pdf教…...
[Windows CMD] 查看网络连接状态 netstat -na | findstr “TCP“
在 Windows 系统中,我们可以使用 netstat 命令来查看网络连接状态,并使用 findstr 命令来过滤出 TCP 和 UDP 的连接。 查看所有网络连接的状态 netstat -na netstat -na: 显示所有网络连接的状态,-n 表示显示数字地址而非域名,…...
「OC」视图控制器的懒加载策略
「OC」视图控制器的懒加载策略 文章目录 「OC」视图控制器的懒加载策略懒加载懒加载的优点常见的懒加载实现方法使用懒加载的注意事项 控制器的懒加载参考资料 懒加载 懒加载(Lazy Loading)是一种设计模式,其核心思想是在需要时才进行对象的…...
android studio 中 .gitignore 文件改动后 忽略的文件夹或文件无效
问题原因:已跟踪文件的缓存问题: 如果之前已经跟踪了这些文件(即它们已经被 Git 加入到版本控制中),即使你在 .gitignore 文件中添加了忽略规则,Git 仍然会显示这些文件。你需要先从 Git 中移除这些文件&am…...
鸿蒙 next 实现摄像头视频预览编码(一)
鸿蒙 next 即将发布,让我们先喊3遍 遥遥领先~ 遥遥领先~ 遥遥领先~ 作为一门新的系统,本人也是刚入门学习中,如果对于一些理解有问题的,欢迎即使指出哈 首先这里要讲一下,在鸿蒙 next 中,要实现摄像头预览…...
YOLO-V3
一、概述 最大的改进就是网络结构,使其更适合小目标检测特征做的更细致,融入多持续特征图信息来预测不同规格物体先验框更丰富了,3种scale,每种3个规格,一共9种softmax改进,预测多标签任务 先验框…...
golang提案,内置 Go 错误检查函数
先来狠狠吐个槽 要吐槽 Go1 的 error ,那咱得先整明白大家为啥都猛喷它的错误处理做得不咋地。在 Go 语言里头,error 本质上其实就是个 Error 的接口: type error interface {Error() string }实际的应用场景如下: func main()…...
零售业务产品系统应用架构设计(三)
智慧物业依据《住房和城乡建设部等部门关于推动物业服务企业加快发展线上线下生活服务的意见建房〔2020〕99号》,推动物业管理公司广泛运用5G、互联网、物联网、云计算、大数据、区块链和人工智能等技术,建设智慧物业管理服务平台,对接城市信息模型(CIM)和城市运行管理服务…...
【GD32】从零开始学GD32单片机 | PMU电源管理单元+深度睡眠和待机例程(GD32F470ZGT6)
1. 简介 PMU电源管理单元通俗讲就是用来管理MCU的电源域的,它主要有两个功能——电压监测和低功耗管理。在GD32中一共有3个电源域——VDD/VDDA域、1.2V域和备份域。 VDD/VDDA域主要供PMU控制器、ADC、DAC等外设使用;1.2V域就是大部分外设都会使用的电源域…...
公司员工电脑桌面太乱如何解决?桌面管理软件一招解决!
“工欲善其事,必先利其器。” 在数字化管理的时代背景下,选择合适的桌面管理软件就如同为企业网络管理装上了一双慧眼。 员工的电脑桌面往往因为长时间的使用而变得杂乱无章,这不仅影响了工作效率,还可能给企业信息安全带来隐患。…...
leetcode:2119. 反转两次的数字(python3解法)
难度:简单 反转 一个整数意味着倒置它的所有位。 例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。 给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。如果 reverse…...
5.vue中axios封装工程化
vue工程化中axios封装 视频演示地址:https://www.bilibili.com/video/BV121egeQEHg/?vd_source0f4eae2845bd3b24b877e4586ffda69a 通常我们封装需要封装request.js基础的发送请求工具类,再根据业务封装service类,service类是具体业务的接口…...
实验六:动态数码管实验
实验结果图,从右到左0-7,从左到右7-0,来回滚动。 硬件接线图: 具体看图,不说了,前面讲过,自己查资料就可以,资料得慢慢查,熟练就好了,不浪费时间和版面了 main.c代码 #include<reg52.h>typedef unsigned int u16; typedef unsigned char u8;#define SMG P0 …...
《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 05网络虚拟化
本章帮助网络工程师或架构师回答如下问题: 什么是网络虚拟化?网络虚拟化有哪些用途?网络虚拟化领域内有哪些不同的技术方向?网络虚拟化的控制面有哪些选择?当使用 VXLAN 时如何进行桥接和路由? 什么是网络虚拟化? 网络虚拟化可以让网络…...
奥威BI数据可视化展示:如何充分发挥数据价值
奥威BI数据可视化展示:如何充分发挥数据价值 在大数据时代,数据已成为企业最宝贵的资产之一。然而,仅仅拥有海量数据并不足以带来竞争优势,关键在于如何有效地挖掘、分析和展示这些数据,从而转化为有价值的洞察和决策…...
jenkins工具配置
上一篇(https://blog.csdn.net/abc666_666/article/details/141207741)文章我们介绍了基于docker安装jenkins的过程,本文将介绍如何配置jenkins的相关全局工具如maven、 jdk以及git等 配置的页面如下: 打开后的页面如下ÿ…...
VAuditDemo文件漏洞
目录 VAuditDemo文件漏洞 一、首页文件包含漏洞 包含图片马 利用伪协议phar:// 构造shell.inc被压缩为shell.zip,然后更改shell.zip 为 shell.jpg上传 二、任意文件读取漏洞 avatar.php updateAvatar.php logCheck.php 任意文件读取漏洞利用 VAuditDemo文件…...
[Meachines] [Medium] poison LFI+日志投毒+VNC权限提升
信息收集 IP AddressOpening Ports10.10.10.84TCP:22,80 $ nmap -p- 10.10.10.84 --min-rate 1000 -sC -sV 22/tcp open ssh OpenSSH 7.2 (FreeBSD 20161230; protocol 2.0) | ssh-hostkey: | 2048 e3:3b:7d:3c:8f:4b:8c:f9:cd:7f:d2:3a:ce:2d:ff:bb (RSA) | 256 …...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
