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

【自动化测试必学语言】python:UnitTest框架

目录

介绍

框架

什么是UnitTest框架?

为什么使用UnitTest框架?

UnitTest核心要素(unitest 的组成部分)

1.TestCase(最核心的模块) 

2.TestSuite

3.TestRunner

4.TestLoader

5.Fixture

TestCase(测试用例)

问题1 代码文件的命名不规范

问题 2 代码运行没有结果 

问题 3 没有找到用例 

练习

 unittest 组成

TestLoader (测试加载)

Fixture(测试夹具)

方法级别【掌握】

类级别【掌握】

模块级别【了解】


介绍


  • 框架

说明
  1. 框架英文单词 framework
  2. 为解决⼀类事情的功能集合
> 需要按照框架的规定 套路 去书写代码
  • 什么是UnitTest框架?

概念 UnitTest Python 自带的⼀个单元测试框架,用它来做单元测试。
----
自带的框架 官方 不需要单外安装 只要安装了 Python 就可以使用
random json os time
第三方框架 想要使用需要先安装后使用 pytest
selenium, appium requests
----
单元测试框架 主要用来做单元测试 ⼀般单元测试是开发做的 .
对于测试来说 unittest 框架的作用是自动化脚本 例代码 执行框架 使用  unittest 框架 来 管理 运行 多个测试用例的
  • 为什么使用UnitTest框架?

  1. 能够组织多个用例去执行
  2. 提供丰富的断言方法让程序代码代替人工自动的判断预期结果和实际结果是否相符
  3. 能够生成测试报告
  • 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 代码文件的命名不规范

1. 代码文件的名字以数字开头
2. 代码文件名字中有空格
3. 代码文件名字有中文
4. 其他的特殊符号
数字 字母 下划线组成 不能以数字开头

问题 2 代码运行没有结果 

右键运行没有 unittests for 的提示 出现的问题
解决方案
方案 1. 重新新建⼀个代码文件 将写好的代码复制进去
方案 2. 删除已有的运行方式

问题 3 没有找到用例 

测试方法中不是以 test _ 开头的 或者单词写错了
TestSuite & TestRunner
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&#xff08…...

大话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改进,预测多标签任务 先验框&#xf…...

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网络虚拟化

本章帮助网络工程师或架构师回答如下问题&#xff1a; 什么是网络虚拟化?网络虚拟化有哪些用途?网络虚拟化领域内有哪些不同的技术方向?网络虚拟化的控制面有哪些选择?当使用 VXLAN 时如何进行桥接和路由&#xff1f; 什么是网络虚拟化&#xff1f; 网络虚拟化可以让网络…...

奥威BI数据可视化展示:如何充分发挥数据价值

奥威BI数据可视化展示&#xff1a;如何充分发挥数据价值 在大数据时代&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;仅仅拥有海量数据并不足以带来竞争优势&#xff0c;关键在于如何有效地挖掘、分析和展示这些数据&#xff0c;从而转化为有价值的洞察和决策…...

jenkins工具配置

上一篇&#xff08;https://blog.csdn.net/abc666_666/article/details/141207741&#xff09;文章我们介绍了基于docker安装jenkins的过程&#xff0c;本文将介绍如何配置jenkins的相关全局工具如maven、 jdk以及git等 配置的页面如下&#xff1a; 打开后的页面如下&#xff…...

VAuditDemo文件漏洞

目录 VAuditDemo文件漏洞 一、首页文件包含漏洞 包含图片马 利用伪协议phar:// 构造shell.inc被压缩为shell.zip&#xff0c;然后更改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 …...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...