day16 python(4)——UnitTest
【没有所谓的运气🍬,只有绝对的努力✊】
目录
1、UnitTest框架介绍
1.1 UnitTest框架
1.2 unitTest的组成(5部分)
1.2.1 TestCase(测试用例)
1.2.2 TestSuit 和 TestRunner
【方法1】
【方法2】
1.2.3 查看结果
1.2.4 案例练习
1.2.5 TestLoader测试加载
1.2.6 Fixture测试夹具
3、断言
3.1 断言练习
4、参数化
5、跳过
6、测试报告HTMLTestRunner
7、小结

1、UnitTest框架介绍
参考文档:unittest --- 单元测试框架 — Python 3.13.1 文档
1.1 UnitTest框架



1.2 unitTest的组成(5部分)

1.2.1 TestCase(测试用例)


"""
使用 unittest 练习 TestCase用例
"""
# 1、导入包
import unittest# 2、定义测试类
class TestDemo(unittest.TestCase):# 3、写测试方法def test_method1(self):print('测试方法1')def test_method2(self):print('测试方法2')# 4、执行测试用例 (鼠标右键即可)
1.2.2 TestSuit 和 TestRunner


【方法1】
"""使用 testSuit 和 testRunner 完成练习
"""
import unittestfrom day01_testcase import TestDemo1
from day01_testcase2 import TestDemo2suite = unittest.TestSuite()# 方法1 套件对象.addTest(测试类名('方法名'))
suite.addTest(TestDemo1('test_method1'))
suite.addTest(TestDemo1('test_method2'))
suite.addTest(TestDemo2('test_method1'))
suite.addTest(TestDemo2('test_method2'))runner = unittest.TextTestRunner()
runner.run(suite)

【方法2】
"""使用 testSuit 和 testRunner 完成练习
"""
import unittestfrom day01_testcase import TestDemo1
from day01_testcase2 import TestDemo2suite = unittest.TestSuite()# 方法1
# suite.addTest(TestDemo1('test_method1'))
# suite.addTest(TestDemo1('test_method2'))
# suite.addTest(TestDemo2('test_method1'))
# suite.addTest(TestDemo2('test_method2'))# 方法2
suite.addTest(unittest.makeSuite(TestDemo1)) # makeSuite 在python的3.13版本中已经被去除了。
suite.addTest(unittest.makeSuite(TestDemo2))runner = unittest.TextTestRunner()
runner.run(suite)
1.2.3 查看结果

1.2.4 案例练习


1.2.5 TestLoader测试加载


![]()
1.2.6 Fixture测试夹具




import unittestclass TestLogin(unittest.TestCase):def setUp(self) -> None: # 每个用例执行前都会执行print('打开网页。。。。。')def tearDown(self) -> None: # 每个用例执行结束都会执行print('关闭页面。。')@classmethoddef setUpClass(cls) -> None:print('1、打开浏览器')@classmethoddef tearDownClass(cls) -> None:print("5、关闭浏览器")def test_login1(self):print('执行登录01')def test_login2(self):print('执行登录02')

3、断言


3.1 断言练习



4、参数化


pip install parameterized

import unittest
from parameterized import parameterized
from case.login import login# 4、准备测试数据 并传参 (使用装饰器 @)
data = [('admin','123456','登录成功'),('test','123456','登录失败'),('admin','1234566','登录失败'),('test','1234567','登录失败')
]
# 1、定义测试类
class TestLogin(unittest.TestCase):# 2、书写测试方法@parameterized.expand(data)def test_login(self,username,password,expect):self.assertEqual(expect,login(username,password))


import unittest
from parameterized import parameterized
from case.login import login
import json# 4、准备测试数据 并传参 (使用装饰器 @)
# data = [
# ('admin','123456','登录成功'),
# ('test','123456','登录失败'),
# ('admin','1234566','登录失败'),
# ('test','1234567','登录失败')
# ]def buildData():data = []with open('info.json', 'r', encoding='utf-8') as f:json_list = json.load(f)for i in json_list:data.append((i['username'], i['password'], i['expect']))return data
# 4、读取json文件,并转换成 [(),(),()] 格式
data = buildData()# 1、定义测试类
class TestLogin(unittest.TestCase):# 2、书写测试方法@parameterized.expand(data)def test_login(self,username,password,expect):self.assertEqual(expect,login(username,password))
[{"desc": "正确的用户名和密码","username": "admin","password": "123456","expect": "登录成功"},{"desc": "错误的用户名","username": "test","password": "123456","expect": "登录失败"},{"desc": "错误的密码","username": "admin","password": "1234567","expect": "登录失败"},{"desc": "错误的用户名和密码","username": "test","password": "1234567","expect": "登录失败"}
]
5、跳过

import unittestversion = 30class TestDemo(unittest.TestCase):@unittest.skip('没有原因,就是测试下跳过')def test_01(self):print('测试01')@unittest.skipIf(version >= 30,"版本大于30的跳过执行")def test_02(self):print('测试02')def test_03(self):print('测试03')

6、测试报告HTMLTestRunner

代码流程:

7、小结




黑马的python课程到此结束啦。但是感觉 unitTest那块,还需要加强下,准备找其他unitTest视频补充下。
相关文章:
day16 python(4)——UnitTest
【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、UnitTest框架介绍 1.1 UnitTest框架 1.2 unitTest的组成(5部分) 1.2.1 TestCase(测试用例) 1.2.2 TestSuit 和 TestRunner 【方法1】 【方法2】 1…...
Kafka快速扫描
Architecture 系统间解耦,异步通信,削峰填谷 Topic 消息主题,用于存储消息 Partition 分区,通过扩大分区,可以提高存储量 Broker 部署Kafka服务的设备 Leader kafka主分区 Follwer kafka从分区 高性能之道:…...
python打包时候遇到问题:ImportError: DLL load failed while importing _ufuncs: 找不到指定的模块
问题:python打包时候遇到问题:ImportError: DLL load failed while importing _ufuncs: 找不到指定的模块 解决方法 pip uninstall scipy pip install scipy总结:卸载出问题的库并重新安装,再次通过pyinstaller -F -w xxx.py 打包…...
【6】期末复习C#第6套
1.两个指针变量不能 2.函数可以有也可以没有形参 3.开始执行点是程序中的main函数 4.调用函数时形参和实参各占一个独立的存储单元 5.给指针赋NULL值和地址值 6.函数头和函数体 7.(C)形式参数是局部变量 8.在C语言中,一维数组的定义方…...
开源轮子 - EasyExcel01(核心api)
EasyExcel01 - 核心api 本文整理自掘金大佬 - 竹子爱熊猫 https://juejin.cn/post/7405158045662576640 文章目录 EasyExcel01 - 核心api一:初相识EasyExcel1:写入excel入门2:读取Excel入门 二:数据模型注解1:读写通用…...
SpringBoot3+Vue3开发在线考试系统
项目介绍 项目分为3种角色,分别为:超级管理员、老师、学生。超级管理员,负责系统的设置、角色的创建、菜单的管理、老师的管理等功能,也可以叫做系统管理员;老师角色,负责系统业务的管理,包括学…...
2. Kafka入门-开发环境准备
Kafka入门-开发环境准备 1. 环境准备2. Centos7安装2.1 镜像安装2.2 初始化配置2.3 JDK1.8安装 ---------------------------------------------------------------------------------------------- 1. 环境准备 2. Centos7安装 2.1 镜像安装 2.2 初始化配置 设置系统时区 …...
Halcon中histo_2dim(Operator)算子原理及应用详解
在Halcon中,histo_2dim算子是一个用于计算双通道灰度值图像的直方图的工具。以下是对该算子的原理及应用的详细解释: 一、原理 histo_2dim算子的函数原型为:histo_2dim(Regions, ImageCol, ImageRow : Histo2Dim : : )。 输入参数ÿ…...
TCP 与 UDP
TCP与UDP的区别分析 TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议族(TCP/IP)中的两种重要传输层协议。它们在数据传输的方式、特性以及应用场景方面存在显著差异。以下将从多个方面详细分析TCP与U…...
ubuntu 安装更新 ollama新版本
ubuntu 安装更新 ollama新版本 我这里是 2024-12-18 ollama 版本是 0.5.3 1手动下载 ollama-linux-amd64.tgz https://github.com/ollama/ollama/releases 2下载脚本 https://ollama.com/install.sh install.sh 和 ollama-linux-amd64.tgz 在相同路径下 修改:…...
Numpy基本操作
目录 1、生成数组的方法 1.1、生成0和1的数组 1.2、从现有数组生成 1.2.1、生成方式 1.3、生成固定范围的数组 1.4、生成随机数组 1.4.1、使用模块介绍 1.4.2、均匀分布 1.4.3、正态分布 1.4.4、正态分布创建方式 1、生成数组的方法 1.1、生成0和1的数组 import numpy…...
本地部署webrtc应用怎么把http协议改成https协议?
环境: WSL2 Ubuntu22.04 webrtc视频聊天应用 问题描述: 本地部署webrtc应用怎么把http协议改成https协议? http协议在安卓手机浏览器上用不了麦克风本,来地应用webrtc 本来是http协议,在安卓手机上浏览器不支持使…...
基于xiaothink对Wanyv-50M模型进行c-eval评估
使用pypi安装xiaothink: pip install xiaothink1.0.2下载模型: 万语-50M 开始评估(修改模型路径后即可直接开始运行,结果保存在output文件夹里): import os import json import pandas as pd import re from tqdm import tqdm i…...
使用k6进行kafka负载测试
1.安装环境 kafka环境 参考Docker搭建kafka环境-CSDN博客 xk6-kafka环境 ./xk6 build --with github.com/mostafa/xk6-kafkalatest 查看安装情况 2.编写脚本 test_kafka.js // Either import the module object import * as kafka from "k6/x/kafka";// Or in…...
Unity A*算法实现+演示
注意: 本文是对基于下方文章链接的理论,并最终代码实现,感谢作者大大的描述,非常详细,流程稍微做了些改动,文末有工程网盘链接,感兴趣的可以下载。 A*算法详解(个人认为最详细,最通俗易懂的一…...
浏览器要求用户确认 Cookies Privacy(隐私相关内容)是基于隐私法规的要求,VUE 实现,html 代码
Cookie Notices and Cookie Consent | Cookiepedia 1. 法律法规要求 许多国家和地区的隐私法律要求网站在存储或处理用户数据(包括 Cookies)之前必须获得用户的明确同意: GDPR(欧盟通用数据保护条例) 要求ÿ…...
如何设计高效的商品系统并提升扩展性:从架构到实践的全方位探索
在现代电商、零售及企业资源管理系统中,商品管理无疑是核心模块之一。随着市场的变化与企业规模的扩展,商品系统需要具备强大的功能支持以及高效的扩展能力,以应对日益复杂的业务需求。一个设计良好的商品系统不仅仅是一个商品信息的容器&…...
使用计算机创建一个虚拟世界
创建一个虚拟世界是一项复杂而多方面的工作,它涉及多个领域的知识,包括计算机图形学、编程、物理模拟、声音设计、艺术设计等。以下是创建虚拟世界的基本步骤和工具建议: 1. 确定虚拟世界的目标和范围 目标:明确这个虚拟世界的用…...
datasets笔记:两种数据集对象
Datasets 提供两种数据集对象:Dataset 和 ✨ IterableDataset ✨。 Dataset 提供快速随机访问数据集中的行,并支持内存映射,因此即使加载大型数据集也只需较少的内存。IterableDataset 适用于超大数据集,甚至无法完全下载到磁盘或…...
【ETCD】【Linearizable Read OR Serializable Read】ETCD 数据读取:强一致性 vs 高性能,选择最适合的读取模式
ETCD 提供了两种不同类型的读取操作方式,分别是 Linearizable Read(线性化读取)和 Serializable Read(可串行化读取)。这两种方式主要区分在读取数据时对一致性的要求不同。 目录 1. Linearizable Read(线…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
