python自动化测试框架:unittest测试用例编写及执行

本文将介绍 unittest 自动化测试用例编写及执行的相关内容,包括测试用例编写、测试用例执行、测试报告等内容。

官方文档:

https://docs.python.org/zh-cn/3/library/unittest.mock.html

1. 测试用例编写

在 unittest 中,一个测试用例通常由三个组件组成:setup、test 和 teardown。其中,setup 和 teardown 分别用于测试用例的准备和清理工作,test 是实际执行测试的部分。

例如,测试一个函数 add 的功能;

代码实例:

#add函数def add(a, b):return a + b#测试用例import unittestclass TestAdd(unittest.TestCase):def setUp(self):print("setup")def test_add(self):print("test_add")self.assertEqual(add(1, 2), 3)def tearDown(self):print("teardown")

上面的代码中定义了一个名为 TestAdd 的测试类,其继承 unittest.TestCase 类。在测试类中定义了三个方法:setUp、test_add 和 tearDown。

在 setUp 方法中,编写测试用例的准备工作。在 test_add 方法中,我们编写了实际的测试代码。在本例中,使用了 assertEqual 方法来判断 add 函数的返回值是否等于预期值。

注意:

在编写测试用例时,通常要测试多种情况,需要编写多个测试方法。

前面的文章中也反复强调过unittest 中,测试方法的命名必须以 test_ 开头,以便被 unittest 框架自动识别为测试方法。

2. 测试用例执行

1)指定测试方法执行顺序

默认情况下,unittest 框架会按照测试方法的名称的字典序执行测试用例。若要控制测试用例执行的顺序,可以使用 TestSuite 类。

例如,将上面的测试用例放到一个名为 suite 的测试套件中,并按照 test_add、setUp、test_add、tearDown 的顺序执行:

if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(TestAdd('test_add'))
suite.addTest(TestAdd('setUp'))
suite.addTest(TestAdd('test_add'))
suite.addTest(TestAdd('tearDown'))
runner = unittest.TextTestRunner()runner.run(suite)

注意:

测试用例执行的顺序并不是固定的,测试用例之间存在依赖关系,有时候会出现执行顺序不符合预期的情况。因此,在编写测试用例时,需要注意不要产生测试用例之间的耦合或者尽量降低耦合度。

2) 指定测试方法运行

有时我们只想运行一个或几个测试方法,而不是运行整个测试用例,这时候可以使用 unittest 框架提供的参数化运行方式,来实现运行指定测试方法。

例如,仅运行上面的 TestAdd 测试类中的 test_add 测试方法:

if __name__ == '__main__':unittest.main(argv=['', 'TestAdd.test_add'])

在上述代码示例中,使用 unittest 框架提供的 argv 参数,来指定要运行的测试方法。其中,TestAdd 是测试类的名称,test_add 是测试方法的名称。多个测试方法之间可以使用空格分隔。

注意:

使用 argv 参数运行测试方法时,测试方法名称必须是完整的名称,包括测试类名称。否则,unittest 框架无法识别要运行的测试方法。

3)跳过测试方法执行

有时候,我们需要跳过某个测试方法,例如当测试环境不满足某些条件时,无法进行该测试方法。这时候可以使用 @unittest.skip 装饰器来跳过测试方法。

例如,跳过上面的 TestAdd 测试类中的 test_add 测试方法:

import unittest
class TestAdd(unittest.TestCase):
@unittest.skip("skip test_add")
def test_add(self):self.assertEqual(add(1, 2), 3)

在上述代码示例中,使用 @unittest.skip 装饰器对 test_add 测试方法进行跳过操作。在 skip 方法中可以指定跳过的原因。

注意:

测试方法中使用了 @unittest.skip 装饰器,那么该测试方法就不会被执行。如果想要恢复执行该测试方法,可以将装饰器注释掉或者删除。

3. 测试用例报告

自动化测试完成后需要生成测试报告,便于测试结果进行分析和统计。unittest 框架提供了多种方式来生成测试用例报告,例如使用 unittest.TextTestRunner 类生成文本报告、使用 HTMLTestRunner 第三方库生成HTML报告等。

例如,使用 unittest.TextTestRunner 类生成文本报告:

if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestAdd)
with open('test_report.txt', 'w') as f:
runner = unittest.TextTestRunner(stream=f, verbosity=2)runner.run(suite)

在上面的示例中,我们使用 unittest.TestLoader 类从测试类 TestAdd 中加载测试用例,并使用 unittest.TextTestRunner 类生成文本报告。使用 stream 参数可以将报告输出到指定文件中。

注意:

生成测试用例报告时,可以设置不同的输出格式、输出位置和输出等级,以满足不同的需求。同时,还可以使用第三方库 HTMLTestRunner 来生成漂亮的HTML报告,以便进行更加直观的分析和展示。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/253402.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外包干了3个月,技术倒退2年。。。

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

01-Redis核心数据结构与高性能原理

一、Redis的单线程和高性能 1. Redis是单线程吗? Redis的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的(说白了也就是执行命令的时候是由一个线程来完成的),这也是 Redis 对外提供键值存储服务的主要流程。…

DALI1.0学习——BIT解码

最近在学习DALI调光相关知识并下载了Microchip提供的基于ATMega88PA的软件工程及硬件设计参考方案。写这些文章的目的就是把自己对知识的理解作一些梳理。 芯片厂果然专业,考虑得相当周到,为了芯片销量连软件和硬件方案全都提供了。芯片厂关于DALI1.0实…

蓝桥杯day04——查询后矩阵的和

1.题目 给你一个整数 n 和一个下标从 0 开始的 二维数组 queries ,其中 queries[i] [typei, indexi, vali] 。 一开始,给你一个下标从 0 开始的 n x n 矩阵,所有元素均为 0 。每一个查询,你需要执行以下操作之一: …

JavaSE基础50题:6. 求出0~999之间的所有“水仙花数”并输出

概念 “水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身。 如:153 135333,则153是一个“水仙花数”。 【方法】 如何获得每一位的数:如(153) 个位: 153 % 10 3 十位: 153 / 10 15 15 % 10 5 百位: 153 / 100 1 代码 pu…

书-用数组存储高于60低于70的人单独存起来

#include<stdio.h> # define N 10 //书-用数组存储高于60低于70的人单独存起来 int main(){float s[N]{68.2,62.3,63.4,34.5,45.6,56.7,67.8,78.9,89.0,100};int i;float diyu[100];int j0;for(i0;i<N;i){if(s[i]>60 && s[i]<70)diyu[j]s[i];//这里的范…

消息队列zookeeper集群+kafka

消息队列zookeeper集群kafka kafka 3.0之前依赖于zookpeeper zookeeper开源分布式架构&#xff0c;提供协调服务&#xff08;Apache项目&#xff09; 基于观察者模式设计的分布式服务管理架构 存储和管理数据。分布式节点的服务结束观察者的注册&#xff0c;一旦分布式节点…

docker搭建logstash和使用方法

配置logstash 查询下载镜像【固定和elasticsearch一样的版本】 [roothao ~]# docker search logstash NAME DESCRIPTION STARS OFFICIAL AUTOMATED logstash …

【数据分享】11个城市的出租车(网约车)数据(免费获取)

出租车&#xff08;网约车&#xff09;GPS数据是我们最常使用的交通大数据之一&#xff0c;但是出租车&#xff08;网约车&#xff09;GPS数据没有公开的获取渠道&#xff0c;有些学者可能能通过与相关机构合作拿到数据&#xff0c;但是对于绝大多数普通人是没有这个机会的&…

LeetCode Hot100 200.岛屿数量

题目&#xff1a; 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以…

2023年最详细介绍Linux 系统目录结构!你确定不来了解一下吗?

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Linux》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有…

AWS CodeWhisperer:基于机器学习的代码建议工具

#AWS CodeWhisperer&#xff1a;基于机器学习的代码建议工具 AWS CodeWhisper概述 Amazon CodeWhisperer 是一种基于机器学习&#xff08;ML&#xff09;的服务&#xff0c;它可以根据Amazon CodeWhisperer 是一种基于机器学习&#xff08;ML&#xff09;的服务&#xff0c;它…

Java---接口讲解

文章目录 1. 接口概述2. 接口特点3. 接口成员特点4. 小案例应用5. 类和接口的关系6. 抽象类和接口区别 1. 接口概述 1. 接口是一种公共的规范标准&#xff0c;只要符合规范标准&#xff0c;大家都可以通用。Java中的接口更多的是体现在对行为的抽象。 2. 参考生活中的接口可以理…

玩弄GPTs:人人都会的Prompt模板

角色定义 分享一个自用的Prompt模板&#xff0c;只要学会了这个模板&#xff0c;当遇到新场景时&#xff0c;直接套用就行。 简单总结&#xff1a; 角色定义(Master)背景(Background)规则(rule)技能(skill)限制(constaints)工作流(workflow) 经过实际测试发现&#xff0c;这…

Gti GUI添加标签

通过Git Gui打开项目&#xff0c;通过菜单打开分支历史&#xff0c;我这里是名为"develop"的分支 选中需要打标签的commit&#xff0c;右键-Create tag即可 但貌似无法删除标签&#xff0c;只能通过git bash

IOday4作业

使用两个子进程完成两个文件的拷贝&#xff0c;子进程1拷贝前一半内容&#xff0c;子进程2拷贝后一半内容&#xff0c;父进程用于回收两个子进程的资源 #include<myhead.h>int main(int argc, const char *argv[]) {int pid-1;int fd -1;int fa -1;int fb -1;//求出文…

Splashtop 荣获 SDC“年度安全供应商”奖

2023年12月5日 荷兰阿姆斯特丹 Splashtop 是随处办公环境改革的先驱&#xff0c;在伦敦举办的第14届 SDC 颁奖典礼上荣获“年度安全供应商”奖&#xff0c;我们对此感到十分自豪。荣获这一知名奖项凸显了 Splashtop 致力于通过企业级加密和基于权限的访问保护不同规模组织的决…

【精选】MyFileServer (超详细思路过程)

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

JVM 类加载机制(七)

1.加载&#xff0c;验证&#xff0c;准备&#xff0c;解析&#xff0c;初始化 ​ JVM 类加载机制分为五个部分&#xff1a;加载&#xff0c;验证&#xff0c;准备&#xff0c;解析&#xff0c;初始化&#xff0c;下面我们就分别来看一下这五个过程。 1.1. 加载 ​ 加载是类加…

强化学习第1天:强化学习概述

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​​ 文章目录 介绍 强化学习要素 强化学习任务示例 环境搭建&#xff1a;gym 基本用法 环境信息查看 创建智能体 过程可视化 完整代码 结语…