pythonUnitTest框架
UnitTest框架
UnitTest参考文章:https://blog.csdn.net/qq_54219272/article/details/123265794
-
目标(看完UnitTest框架该有的收获)
- 掌握UnitTest框架的基本使用方法
- 掌握断言(判断实际结果和预期结果是否一致)的使用方法
- 掌握如何实现参数化(用例代码写一份,传入不同的数据即可)
- 掌握测试报告的生成
-
UnitTest的介绍
-
框架(framework):解决一类事情的功能集合(UnitTest解决单元测试)很多功能实现的半成品
-
需要按照规定书写代码
-
UnitTest是python自带的单元测试框架,用来做单元测试,只要安装python就可以使用。第三方框架(pytest)
-
对于测试人员来讲是自动化脚本的执行框架(管理运行多个测试用例)
-
-
框架特点:
- 组织多个用例的执行
- 提供丰富的断言方法(代替人工判断预期结果和实际结果是否一致)
-
核心要素(组成,5部分)
-
testCase(测试用例最核心的模块,是unitest的组成部分,不是手工和自动化中的用例(Test Case)
-
功能:每个testCase都是一个代码文件,在此代码文件中书写真正的用例
-
示例
''' - 导包unitTest - 自定义测试类 - 在测试类中书写测试方法,一个测试用例一个方法 - 执行测试用例 ''' import unittest # 自定义类继承TestCase class testDemo(unittest.TestCase):def test_method1(self):print("测试方法1")def test_method2(self):print("测试方法2")
-
-
testSuite(测试套件)
- 功能:管理组装打包testCase(测试用例)
-
testRunner(测试执行)
- 功能:执行testSuite
-
testLoader(测试加载)
-
功能:对testsuite测试套件的补充,管理打包,组装多个测试用例
-
示例
import unittest from test_case import testDemo from test_case01 import testDemo1 from test_case02 import testDemo2# 实例化suite套件对象 suite = unittest.TestSuite()# 使用套件对象添加用例方法 suite.addTest(testDemo('test_method1')) suite.addTest(testDemo('test_method2')) 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)# 实例化suite套件对象 suite = unittest.TestSuite()# 使用套件对象添加用例方法 # 将一个测试类中的所有方法添加 #加载case类时unittest点不出makeSuite,查找资料后得到解答是Python升级到3版本后将 # unittest.makeSuite() # 改为了 unittest.TestLoader().loadTestsFromTestCase(testDemo) suite.addTest(unittest.makeSuite(testDemo))# 实例化运行对象 runner = unittest.TextTestRunner()# 运行对象 runner.run(suite)
-
-
Fixture(测试夹具)
- 书写在TestCase中的一个代码结构,可以在每个方法执行前后都会执行的内容
- 例如:登录的测试用例:1打开浏览器,2输入网址
# 方法级别(每个用例代码,测试方法前后都会调用) def setUp(self):# pass # def traedown(self):#pass# 类级别(在那个测试类中所有方法执行前后,都会自动调用) # 类方法 @classmethod def setUpClass(cls):pass @classmethod def trardownClass(cls):pass# 模块级别(写在类外边直接定义模块) def setUpModule():pass # def teardownMethod():pass''' 案例:登录功能 '''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_1(self):print("输入用户名密码验证码,点击登录1")def test_2(self):print("输入用户名密码验证码,点击登录2")''' 输出结果: 1.打开浏览器... 输入网址... 输入用户名密码验证码,点击登录1 关闭当前页面... 输入网址... 输入用户名密码验证码,点击登录2 关闭当前页面... 5.关闭浏览器.. '''
-
-
使用框架的步骤
- 导包unitTest
- 自定义测试类
- 在测试类中书写测试方法
- 执行测试用例
-
UnitTest断言
-
什么是断言:代替人工自动判断预期结果和世界结果是否一致
-
断言结果
- true:用例通过
- false:代码会抛出异常,用例不通过
-
为什么使用断言
- 提高测试xiaol
- 实现自动化
-
UnitTest中常用的断言方法
-
assertEqual
self.assertEqual(预期结果,实际结果) 1. 如果相等,用例通过 2. 如果不相等,用例不通过,抛出异常 -
assertIn
self.assertIn(预期结果,实际结果) 1. 包含,通过 2. 不包含,不通过
-
-
跳过
- 对于一些未完成的或者不满足测试条件的测试函数和测试类,不想执行,可以使用跳过使用方法,装饰器完成
@unnittest('跳过原因') @unnittestif(条件,'跳过原因')
-
-
测试报告
- HETMLTestRunner第三方测试报告
相关文章:
pythonUnitTest框架
UnitTest框架 UnitTest参考文章:https://blog.csdn.net/qq_54219272/article/details/123265794 目标(看完UnitTest框架该有的收获) 掌握UnitTest框架的基本使用方法掌握断言(判断实际结果和预期结果是否一致)的使用方…...
微服务最佳实践:构建可扩展且高效的系统
微服务架构彻底改变了现代软件开发,提供了无与伦比的敏捷性、可扩展性和可维护性。然而,有效实施微服务需要深入了解最佳实践,以充分发挥微服务的潜力,同时避免常见的陷阱。在这份综合指南中,我们将深入研究微服务的关…...
源码赏析: 数据结构转换工具 configor (一)
一、configor 先贴地址 configor,先看configor的特性: Header-only & STL-likeCustom type conversion & serializationComplete Unicode supportASCII & Wide-character support 说白了,这个工具用于自定义类型的转换和序列化…...
使用java调用python批处理将pdf转为图片
你可以使用Java中的ProcessBuilder来调用Python脚本,并将PDF转换为图片。以下是一个简单的Java代码示例,假设你的Python脚本名为pdf2img.py: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader…...
机器学习——自领域适应作业
任务 游戏里面的话有很多跟现实不一样的情况。 想办法让中间的特征更加的接近,让feat A适应feat B,产生相对正常的输出。 在有标签数据和没有数据的上面进行训练,并能预测绘画图像。 数据集 训练5000张总数,每类有500张测试100…...
ValidatorUtil字段验证工具类
字段验证工具类 package com.aa.bb.cc.common.utils;import com.aa.bb.cc.common.exception.BusinessException; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils;import javax.validation.ConstraintViolation; import…...
Python 自动化之处理图片(一)
图片美化与大小调整 文章目录 图片美化与大小调整前言一、基本结构二、引入库三、用户输入模块四、图片美化模块五、大小调整模块总结 前言 本文主要分为两部分。一是图片的美化吧算是,主要从亮度、对比、色彩饱和度、锐度四个方面进行美化;二是图片的像…...
Axure动态面板的应用与ERP系统登录界面、主页左侧菜单栏、公告栏的绘制
目录 一、动态面板 1.1 简介 1.2 使用动态面板的原因 二、动态面板之轮播图实现案例 2.1 完成步骤 2.2 最终效果 三、动态面版之多方式登录案例 四、动态面板之后台主界面左侧菜单栏 五、ERP登录界面 六、ERP主界面菜单栏 七、ERP公告栏 八、登录页面跳转公告栏 一…...
电机(按工作电源分类)介绍
文章目录 一、什么是电机?二、按工作电源分类直流电机1.直流有刷电机结构工作原理:直流减速电机 2.直流无刷电机结构工作原理: 3.总结结构和工作原理:效率和功率损耗:调速性能:寿命和可靠性:应用…...
Web前端JS通过使用AudioWorkletNode() 获取 Video/Audio 视音频声道(左右声道|多声道)
写在前面: 在之前的博文Web前端JS如何获取 Video/Audio 视音频声道(左右声道|多声道)、视音频轨道、音频流数据中,介绍了通过使用AudioContext.createScriptProcessor()方法来获取视音频音轨(声道)数据。但由于W3C不再推荐使用该A…...
力扣LeetCode75题
为了面试,小伙伴们可以平时练下算法题,有备无患。 LeetCode 75 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台...
如何向领导汇报工作?一篇文章告诉你!
给领导汇报工作可以从两个方面考虑:一是工作汇报文件的制作;一是汇报方式。一份全面、清晰且准确的文件,加上一目了然的、科技满满的汇报方式,相比领导不满意都难~下面就让你全部get! 一、工作汇报的文字内…...
GPT-4.5!!!
GPT-4 还没用明白,GPT-4.5 就要发布了。 最近,OpenAI 泄露了 GPT-4.5 的发布页面,除了进一步增强复杂推理和跨模态理解,GPT-4.5 增加了一个更加强大的功能——3D。 3D 功能的进一步支持,也就意味着多模态最后一块版图…...
kafka入门(四):kafka生产者发送消息
创建生产者实例和构建消息之后,就可以开始发送消息了。 发送消息主要有三种模式:发后即忘、同步、异步。 发后即忘: 就是直接调用 生产者的 send方法发送。 发后即完,只管往 kafka中发送消息,而不关心消息是否正确…...
redis集群模糊获取缓存redisKey
redis cluster集群删除指定模糊redisKey的信息 **public int deleteRedisKey(String key){AtomicReference<Integer> result new AtomicReference<>(0);busnessLogger.info("开始删除指定业务的模糊Key,deleteRedisKey:{}",key);try{Set<HostAndPor…...
100GPTS计划-AI翻译TransLingoPro
地址 https://poe.com/TransLingoPro https://chat.openai.com/g/g-CfT8Otig6-translingo-pro 测试 输入: 我想吃中国菜。 预期翻译: I want to eat Chinese food. 输入: 请告诉我最近的医院在哪里。 预期翻译: Please tell me where the nearest hospital is. 输入: 明天…...
Linux install manual 1Panel
前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。1Panel 的功能和优势包括: 快速建站:深度集成 Wordpress 和 Halo,域名绑定、SSL 证书配置等一键搞定;高效管理:通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等;安全可…...
母婴服务品牌网站的效果如何
随着三胎政策落实及人们生活水平提升,母婴市场发展迅速上升,加之以90后、00后适龄生育的人群悦己消费加强,孕前孕后及婴儿本身就会使用相当好的服务,这也为市场带来了较大机会。 近几年,老品牌在不断加力,…...
C语言--有一个3*4的矩阵,求出其中最大值的那个元素的值,以及其所在的行号和列号
一.题目描述 有一个3*4的矩阵,要求求出其中最大值的那个元素的值,以及其所在的行号和列号 比如:给定一个3*4的矩阵如下 输出结果:最大值为 12 ,行号为3, 列号为2 二.思路分析 打擂台算法: 先思考…...
安全算法(二):共享密钥加密、公开密钥加密、混合加密和迪菲-赫尔曼密钥交换
安全算法(二):共享密钥加密、公开密钥加密、混合加密和迪菲-赫尔曼密钥交换 本章介绍了共享密钥加密、公开密钥加密,和两种加密方法混合使用的混合加密方法;最后介绍了迪菲-赫尔曼密钥交换。 加密数据的方法可以分为…...
Linux驱动调试利器:debugfs接口设计与实现详解
1. 项目概述:为什么我们需要debugfs?在Linux内核驱动的开发与调试过程中,我们常常面临一个核心痛点:如何在不重启系统、不重新编译驱动、甚至不借助复杂外部工具的情况下,实时地窥探驱动内部的状态、修改关键参数&…...
从审批流到业务闭环:企业流程管理软件的价值变化
从审批流到业务闭环:企业流程管理软件的价值变化 很多企业最早上 OA,是为了“让审批在线上走”。请假、报销、合同、采购、用印都能提交、审核、归档,确实比纸质单据和微信群规范。但随着业务复杂度提升,企业会发现:审…...
K210数字识别数据集采集的两种实用方法:串口定时与按键触发,哪种更适合你的电赛项目?
K210数字识别数据集采集实战:串口定时与按键触发的深度对比与优化方案 在嵌入式AI与电赛项目中,数据采集的质量往往决定了模型识别的上限。K210作为边缘计算设备的性价比之选,其数据采集方案的合理性直接影响后续模型训练效果。本文将深入剖…...
火绒安全软件实战教程:快速查杀、全盘查杀、自定义查杀到底怎么选?
🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...
2025最权威的AI学术网站解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在人工智能技术迅猛快速发展的当下,各种各样的 AI 辅助论文写作工具不断地大量涌…...
ASReview实战:用主动学习技术高效完成文献综述
1. 项目概述:当学术文献综述遇上主动学习如果你是一名研究生、科研人员,或者任何需要从海量文献中筛选出相关研究的人,那么“大海捞针”这个词你一定深有体会。面对动辄成千上万篇的论文标题和摘要,传统的人工筛选不仅耗时耗力&am…...
别再死记硬背真值表了!用Verilog手搓半减器/全减器,从波形图反推逻辑门设计
从波形图反推逻辑门:Verilog减法器的逆向工程实践 数字电路初学者常陷入"真值表→逻辑表达式→电路实现"的传统学习路径,却难以理解信号流动的本质。本文将以波形图逆向分析为核心,带您用Verilog实现半减器与全减器,掌握…...
高效检索句子:基于 SQLite FTS5 的关键词快速匹配方案
std::filesystem::replace_extension 仅修改路径对象的逻辑表示,不更改磁盘文件;真正改后缀需配合 fs::rename,且须检查目标是否存在、文件是否为常规文件,并注意跨卷、文件占用等系统限制。std::filesystem::replace_extension 为…...
将HermesAgent项目接入Taotoken的详细配置步骤与注意事项
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 将HermesAgent项目接入Taotoken的详细配置步骤与注意事项 本文旨在为开发者提供一份清晰的指南,帮助你将HermesAgent项…...
构建动态技能图谱:从数据模型到自动化可视化的完整实践
1. 项目概述:一个技能图谱的诞生最近在GitHub上看到一个挺有意思的项目,叫dortort/skills。乍一看,这只是一个个人仓库,但点进去你会发现,它远不止是一个简单的代码集合。它更像是一张动态的、可视化的个人技能地图&am…...
