当前位置: 首页 > 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 …...

EtherCAT运动控制器上位机开发之Python+Qt(三):PDO配置与SDO读写

ZMC408CE控制器硬件介绍 ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器&#xff0c;具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口&#xff0c;ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。 ZMC408CE支持8轴运动控制&#xff0c;最多可扩展…...

MyBatis源码系列1(使用JDBC查询数据)

使用原生jdbc进行查询数据步骤. 1、加载驱动2、获取数据库连接3、创建Statement对象4、占位符赋值5、执行脚本6、解析结果7、关闭资源 代码示例 public class T0 {public static void main(String[] args) throws Exception {String sql "SELECT id,name FROM goods WH…...

【微服务】Nacos配置中心和客户端数据同步模式

一、Nacos概述 Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供了一组简单易用的特性集&#xff0c;帮助用户快速实现动态服务发现、服务配置、服务元数据及流量管理。 二、数据同步模式 1. 实时同步 Push模式&#xff1a;在服务端的配置信…...

WebRTC音视频开发读书笔记(六)

数据通道不仅可以发送文本消息, 还可以发送图片、二进制文件,将其类型binaryType属性设置成arraybuffer类型即可. 九\、文件传输 1、文件传输流程 &#xff08;1&#xff09;使用表单file打开本地文件 &#xff08;2&#xff09;使用FileReader读取文件的二进制数据 &#…...

高级列表组件ReList

高级列表组件ReList 组件实现基于 Vue3 Element Plus Typescript&#xff0c;同时引用 vueUse lodash-es tailwindCss (不影响功能&#xff0c;可忽略) 主要基于JSX风格实现高度动态的列表渲染组件&#xff0c;可以通过信息配置Metas配置控制信息项展示&#xff0c;同时支持…...

Vxe UI vue vxe-table 实现表格数据分组功能,根据字段数据分组

Vxe UI vue vxe-table 实现表格数据分组功能&#xff0c;根据字段数据分组 实现数据分组功能 基于树结构功能就可以直接实现数据分组功能&#xff0c;代码如下&#xff1a; <template><div><vxe-button status"primary" click"listToGroup()&…...

oracle创建账户

1、查看表空间 SELECT tablespace_name FROM user_tablespaces;2、创建用户 CREATE USER FLINKCDC2 IDENTIFIED BY "123456";也可以使用指定表空间的方式 CREATE USER FLINKCDC2 IDENTIFIED BY "123456" DEFAULT TABLESPACE LOGMINER_TBS QUOTA UNLIMIT…...

2024新型数字政府综合解决方案(五)

新型数字政府综合解决方案通过集成人工智能、大数据、区块链和云计算技术&#xff0c;打造了一个智能化、透明化和高效的政务服务平台&#xff0c;旨在提升政府服务的响应速度、处理效率和数据安全性。该方案实现了跨部门的数据共享与实时更新&#xff0c;通过智能化的流程自动…...

datawind可视化查询-其他函数

飞书文档学习链接:https://www.volcengine.com/docs/4726/47275 1. 用户名函数 用户名函数并非 ClickHouse 官方函数,而是与项目用户信息相结合,用于返回当前使用用户的指定信息的函数。 USERNAME()可返回当前用户的用户名,如下所示。该函数也可与其他函数组合使用 2. J…...

数据库MySQL之事务、索引

目录 1.概述 2.事务 3.索引 3.1索引结构 3.2操作语法 1.概述 场景&#xff1a;假如我们需要解散教学部&#xff0c;那么该部门下的所有员工都需要删除。如果教学部成功删除了&#xff0c;但员工出于某些原因(比如SQL语句写错了等)并没有删除&#xff0c;此时就会出现数据…...

建设网站简单教程/最新新闻事件摘抄

企业需要什么 企业有三个最基本的诉求&#xff1a;降低成本、提高生产效率、提升业务质量&#xff0c;而信息化的系统/软件可以帮助企业有效解决以上三个问题。但企业软件价格昂贵、技术复杂、维护成本太高也是另不少中小型企业望而却步&#xff0c;这时SaaS模式的软件就随着市…...

武汉网络科技有限公司排名/福州seo按天收费

话说使用Redis已经有好一段时间&#xff0c;趁有点时间&#xff0c;结合Guang.com 使用经验&#xff0c;总结一下Redis 在社会化电商网站的实际应用场景。文笔较差&#xff0c;各位看官&#xff0c;凑合着看下吧。 1. 各种计数&#xff0c;商品维度计数和用户维度计数 说起电商…...

wordpress主题 her/嘉兴优化公司

一.yum源理解 yum源仓库的地址 在/etc/yum.repos.d/&#xff0c;并且只能读出第一层的repo文件 yum仓库的文件都是以.repo结尾的 二.下载阿里云的.repo仓库文件 &#xff0c;放到/etc/yum.repos.d/ 备份原本的仓库文件 cd /etc/yum.repos.d/ mkdir allbak mv ./* allbak #此…...

门户网站开发jz190/关键词收录

双节锂电池充电芯片IC,5V升压FS4059A,9V降压FS7222 详情 FS4059A USB 5V输入&#xff0c;升压给双节锂电池充电芯片IC 支持USB输入&#xff1a;5V2A最大。智能兼容5V1A&#xff0c;0.5A充电器&#xff0c;兼容不拉垮充电器。 &#xff08;输出端&#xff0c;即电池端&#…...

怎么用电脑给域名做网站/外贸推广平台怎么做

随着反复安装和移除软件&#xff0c;c盘虽然给了80或者100G的空间&#xff0c;也经不住垃圾文件的堆积。居然只剩下几兆空间了。真是可气&#xff0c;某些软件虽然移除了。但是他们不负责自己产生的文件夹和文件的深度清理。 1. 清理系统的垃圾 2. 移动或者清理大文件。 某…...

有什么网站可以做编程题/企业推广策略

find the most comfortable road Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6937 Accepted Submission(s): 2957Problem DescriptionXX星有许多城市&#xff0c;城市之间通过一种奇怪的高速公路SARS(Supe…...