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

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.lryc.cn/news/254138.html

相关文章:

  • ctfhub技能树_web_web前置技能_HTTP
  • mysql8报sql_mode=only_full_group_by(存储过程一直报)
  • Vue2中v-html引发的安全问题
  • java内部类详解
  • Python 潮流周刊#29:Rust 会比 Python 慢?!
  • 吴恩达《机器学习》11-1-11-2:首先要做什么、误差分析
  • Pandas在Excel同一个sheet里插入多个Dataframe和行
  • 查看mysql 或SQL server 的连接数,mysql超时、最大连接数配置
  • C++学习之路(七)C++ 实现简单的Qt界面(消息弹框、按钮点击事件监听)- 示例代码拆分讲解
  • python实现一个计算器
  • C++ 共享内存ShellCode跨进程传输
  • 如何快速移植(从STM32F103到STM32F407)
  • python高级练习题库实验1(B)部分
  • Qt Rsa 加解密方法使用(pkcs1, pkcs8, 以及文件存储和内存存储密钥)
  • 区分物理端口与软件端口概念:以交换机端口和Linux系统中的端口为例
  • 力扣226:翻转二叉树
  • 亚马逊鲲鹏系统智能自动注册与AI角色养号,探索数字化新境界
  • AOP操作日志记录
  • Linux C语言 42-进程间通信IPC之网络通信(套接字)
  • 微服务知识大杂烩
  • 记录一次vscode markdown的图片路径相关插件学习配置过程
  • 设计原则 | 依赖转置原则
  • 前端开发实用技巧与经验分享
  • 推荐一款Excel快速加载SQL的插件,方便又好用
  • Docker快速入门(docker加速,镜像,容器,数据卷常见命令操作整理)
  • http和https的区别有哪些
  • 使用Keil-MDK生成*.bin格式可执行文件
  • 基于springboot+vue篮球联盟管理系统源码
  • 分页助手入门以及小bug,报sql语法错误
  • Java中的并发编程:深入理解CountDownLatch