python接口自动化测试 —— unittest框架suite、runner详细使用

test suite

  • 测试套件,理解成测试用例集
  • 一系列的测试用例,或测试套件,理解成测试用例的集合和测试套件的集合
  • 当运行测试套件时,则运行里面添加的所有测试用例

test runner

  • 测试运行器
  • 用于执行和输出结果的组件

test suite、test runner基础使用

单元测试类

 1 # 创建单元测试类,继承unittest.TestCase2 class testCase(unittest.TestCase):3 4     # 测试case5     def test_01(self):6         print("test01")7 8     def test_03(self):9         print("test03")
10 
11     def test_04(self):
12         print("test04")
13 
14     def test_05(self):
15         print("test05")

主函数

 1 if __name__ == '__main__':2     # 实例化测试套件3     suite = unittest.TestSuite()4     # 实例化第二个测试套件5     suite1 = unittest.TestSuite()6     # 添加测试用例 - 方式一7     suite.addTest(testCase('test_03'))8     suite.addTest(testCase('test_01'))9     suite1.addTest(testCase('test_03'))
10     suite1.addTest(testCase('test_01'))
11     # 添加测试用例 - 方式二
12     testcase = (testCase('test_05'), testCase('test_04'))
13     suite.addTests(testcase)
14     # 测试套件添加测试套件
15     suite.addTest(suite1)
16     # 实例化TextTestRunner类
17     runner = unittest.TextTestRunner()
18     # 运行测试套件
19     runner.run(suite)

运行结果

 1 test032 test013 test054 test045 test036 test017 ......8 ----------------------------------------------------------------------9 Ran 6 tests in 0.000s
10 
11 OK

包含知识点

  • 使用测试套件时,测试用例的执行顺序可以自定义,按照添加的顺序执行
  • 有两种添加测试用例的方式,推荐方式二,代码更少更快捷
  • ,传入的 tests 可以是list、tuple、set

addTests(tests)

  • 添加的测试用例格式是:

单元测试类名(测试用例名)

  • 使用测试套件执行测试用例的大致步骤是:实例化TestSuite - 添加测试用例 - 实例化TextTestRunner - 运行测试套件
  • 测试套件也可以添加测试套件

测试用例批量执行

单元测试类文件

前三个文件是包含了单元测试类的文件,第四个文件是负责运行所有单元测试类,不包含测试用例

列举某个单元测试类文件代码

 1 # 创建单元测试类,继承unittest.TestCase2 class testCase02(unittest.TestCase):3 4     # 测试case5     def test_07(self):6         print("testCase02 test07")7 8     def test_06(self):9         print("testCase02 test06")
10 
11     def test_11(self):
12         print("testCase02 test11")

test_run.py 代码

批量运行测试用例方式一:

 1 import unittest2 from learn.unittestLearning import test_case023 from learn.unittestLearning.test_case03 import testCase034 5 if __name__ == '__main__':6     # 通过模块7     testcase02 = unittest.TestLoader().loadTestsFromModule(test_case02)8     # 通过单元测试类9     testcase03 = unittest.TestLoader().loadTestsFromTestCase(testCase03)
10     # 通过模块字符串
11     testcase04 = unittest.TestLoader().loadTestsFromName('learn.unittestLearning.test_case04')
12     # 测试用例集
13     tests = [testcase02, testcase03, testcase04]
14     # 创建测试套件
15     suite = unittest.TestSuite(tests)
16     # 运行测试套件
17     unittest.TextTestRunner(verbosity=2).run(suite)

包含知识点

  • :testCaseClass输入单元测试类,但需要先import

loadTestsFromTestCase(testCaseClass)

  • :module输入单元测试类所在模块,也需要import

loadTestsFromModule(module, pattern=None)

  • :name是一个string,需满足以下格式: module.class.method ,可以只到输入到class

loadTestsFromName(name, module=None)

  • :表示测试结果的信息详细程,一共三个值,默认是1
    • 0 (静默模式):你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功80
    • 1 (默认模式):非常类似静默模式 只是在每个成功的用例前面有个 每个失败的用例前面有个 F
    • 2 (详细模式):测试结果会显示每个测试用例的所有相关的信息

verbosity

批量运行测试用例方式二(推荐!!):

1 import unittest
2 
3 if __name__ == '__main__':
4     # 需要运行的单元测试文件目录
5     test_path = './'
6     # 实例化defaultTestLoader
7     discover = unittest.defaultTestLoader.discover(start_dir=test_path, pattern="test_case*.py")
8     # 运行测试用例集
9     unittest.TextTestRunner().run(discover)

优点:是不是简洁。。是不是很快??只需三行代码!!

包含知识点

  • :写需要运行的单元测试文件目录

start_dir

  • :单元测试文件的匹配规则,默认是 test*.py ,可根据自己的命名规则修改此正则

pattern

  • 方法可自动根据测试目录start_dir 匹配查找测试用例文件 test*.py ,并将查找到的测试用例组装到测试套件,因此可以直接通过 run() 方法执行 discover

discover()

批量执行测试用例的结果

 1 testCase02 test062 testCase02 test073 testCase02 test114 testCase03 test055 testCase03 test086 testCase03 test127 testCase04 test028 testCase04 test049 testCase04 test13
10 .........
11 ----------------------------------------------------------------------
12 Ran 9 tests in 0.000s
13 
14 OK

 

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

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取  

 

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

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

相关文章

DBUtils工具类的使用

1、DBUtils是什么 为了更加简单地使用JDBC,Apache组织提供了一个DBUtils工具,它是操作数据库的一个组件,实现了对JDBC的简单封装,可以在不影响数据库访问性能的情况下简化JDBC的编码工作量。DBUtils工具要有2个作用。 写数据&am…

Upload-labs(Pass-14 - Pass-16)

Pass-14 (图片马,判断文件类型) 图片的格式在防护中通常是不会使用后缀进行判断的依据,文件头是文件开头的一段二进制码,不同类型的图片也就会有不同的二进制头。   JPEG (jpg),文件头:FF D…

C++从入门到精通——类的6个默认成员函数之赋值运算符重载

赋值运算符重载 前言一、运算符重载定义实例注意要点 二、赋值运算符重载赋值运算符重载格式赋值运算符重载要点重载要点传值返回和传址返回要点 三、前置和后置重载 前言 类的6个默认成员函数:如果一个类中什么成员都没有,简称为空类。 空类中真的什么…

ESP32S3在wsl环境的JTAG、openocd仿真调试

文章目录 一、准备工作二、添加 ESP-IDF 环境变量三、添加 udev 规则文件四、vscode 配置 一、准备工作 安装配置好 WSL、ubuntu, 参考连接: WSL2安装Ubuntu迁移到其他盘或者其他电脑_wsl ubuntu迁移-CSDN博客 WSL2 设置桥接模式_wsl2 桥接-CSDN博客 下载好 WSL-US…

Python 物联网入门指南(八)

原文:zh.annas-archive.org/md5/4fe4273add75ed738e70f3d05e428b06 译者:飞龙 协议:CC BY-NC-SA 4.0 第三十章:制作机械臂 最后,我们终于到达了大多数人自本书开始以来就想要到达的地方。制作一个机械臂!在…

游戏生成式 AI:编织梦想,避开阴影

想象一下,一个沉浸式的游戏世界中玩家遇到的每个 NPC 都由 AI 驱动,他们能与玩家进行互动,从改变游戏体验。据 Inword 一项研究显示,绝大多数游戏玩家渴望这种互动,愿意投入更多的时间和金钱来玩这种由 AI 驱动的游戏。…

Linux_iptables防火墙学习笔记

文章目录 iptables 概述四表五链iptables 安装启动iptables 配置详解iptables配置文件iptables配置语法iptables常用实例查看规则修改默认规则保存和备份规则恢复备份的规则清空规则放行SSH服务在ubuntu14.04中iptables规则持久化 iptables 概述 主机型 对主机进行保护 网络型…

020——SPI模块驱动开发(基于DAC芯片和I.MX6uLL)

目录 一、 SPI简介 二、 Linux中的SPI 2.1 SPI控制器数据结构 2.2 SPI设备数据结构 2.3 SPI设备驱动 2.4 接口函数 2.4.1 函数原型 2.4.2 函数解析 2.5 SPI驱动框架 2.6 SPI控制器驱动程序 2.7 SPI设备驱动程序 三、 DAC实例 3.1 实验过程 3.2 驱动程序 3.3 应…

Redis--16--Spring Data Redis

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Spring Data Redishttps://spring.io/projects/spring-data-redis 1.依赖2.RedisTemplate3.案例 序列化1.默认是 JdkSerializationRedisSerializer2.添加Redis配置文…

MySQL基础-----约束详解

目录 一. 概述: 二.约束演示: 三.外键约束: 3.1介绍: 3.2外键约束语法: 3.3删除,更新行为: 一. 概述: 🧐🧐概念:约束是作用于表中字段上的规则,用于限制…

抖店创业日记:24年的抖音电商市场,“慢”比“快”更重要~

我是王路飞。 今天是2024年4月16日。 距离我坚持做抖店10年的目标,还有6年2个月的时间。 做抖店之前,我做过天猫、京东、快手等平台,随着时间的推移,愈加感觉到一个真理:只要不下牌桌,就永远不会失去机会…

Kubernetes(K8S)集群搭建-node节点配置

1.开始操作之前要先关闭防火墙,SELinux,swap分区 关闭防火墙 sudo systemctl stop firewalld禁用SELinux sudo setenforce 0 # 临时禁用 sudo sed -i s/^SELINUXenforcing$/SELINUXper…