Unittest加载执行用例的方法总结

news2024/11/16 6:02:55

目录

前言

方式1

方式2

方式3

方式4

方式5

方式6

方式7

总结


前言

  说到测试框架,unittest是我最先接触的自动化测试框架之一了, 而且也是用的时间最长的, unittest框架有很多方法加载用例,让我们针对不同的项目,不同项目的大小及用例的多少自己选择加载方式。今天我们就简单的说说几种加载方式。

方式1

  简单的实例

 1 import unittest
 2 
 3 
 4 class LoadTest(unittest.TestCase):
 5 
 6     def test_case_01(self):
 7         self.assertEqual(1, 1)
 8 
 9     def test_case_02(self):
10         self.assertEqual(2, 1)
11 
12 
13 if __name__ == '__main__':
14     suit = unittest.TestSuite()
15     suit.addTest(LoadTest('test_case_01'))
16     suit.addTest(LoadTest('test_case_02'))
17 
18     runner = unittest.TextTestRunner()
19     runner.run(suit)
# 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Process finished with exit code 0

说明

  首先我们需要创建一个测试套件suite,其次通过addTest方法添加用例,addTest的参数为单个用例, 比如实例中记载的是LoadTest测试类中的test_case_01 和 02, 我们就按照上述方式传递参数。如果加载运行用例的代码在另一个文件中,我们需要在此文件中导入测试类。

方式2

  简单实例

 1 import unittest
 2 
 3 
 4 class LoadTest(unittest.TestCase):
 5 
 6     def test_case_01(self):
 7         self.assertEqual(1, 1)
 8 
 9     def test_case_02(self):
10         self.assertEqual(2, 2)
11 
12 
13 if __name__ == '__main__':
14     suit = unittest.TestSuite()
15     case_list = [LoadTest('test_case_01'), LoadTest('test_case_02')]
16     suit.addTests(case_list)
17     runner = unittest.TextTestRunner()
18     runner.run(suit)
# 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Process finished with exit code 0

说明

  方式2是通过同样的原理加载测试用例的,只不过是一次性加载多个,不需要多次调用addTest方法,我们只需要调用一次addTests方法,加载一个用例组成的序列,相比较而言,第二种比第一种稍微方便那么一点

方式3

  简单实例

 1 import unittest
 2 
 3 
 4 class LoadTest(unittest.TestCase):
 5 
 6     def test_case_01(self):
 7         self.assertEqual(1, 1)
 8 
 9     def test_case_02(self):
10         self.assertEqual(2, 2)
11 
12 
13 if __name__ == '__main__':
14     suit = unittest.TestSuite() # 测试套件
15     loader = unittest.TestLoader() # 用例加载器
16     test_class = loader.loadTestsFromTestCase(LoadTest) # 加载测试类
17     suit.addTest(test_class) # 测试类添加到测试套件中
18     runner = unittest.TextTestRunner() # 用例运行器
19     runner.run(suit) # 运行
# 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Process finished with exit code 0

说明

  实例是通过创建一个加载器来加载测试用例,可以看到加载器需要加载一个测试类, 不需要像前两个方式那样,一个一个加载测试用例,但是如果一个模块中有多个测试类的情况,我们仍然需要编写多条加载代码 test_class = loader.loadTestsFromTestCase(LoadTest) # 加载测试类

方式4

  简单实例

 1 import unittest
 2 
 3 
 4 class LoadTest(unittest.TestCase):
 5 
 6     def test_case_01(self):
 7         self.assertEqual(1, 1)
 8 
 9     def test_case_02(self):
10         self.assertEqual(2, 2)
11 
12 
13 if __name__ == '__main__':
14     pass
 1 import unittest
 2 import sys
 3 sys.path.append('.')
 4 import unittest_tc_load
 5 
 6 if __name__ == '__main__':
 7     suit = unittest.TestSuite() # 测试套件
 8     loader = unittest.TestLoader() # 用例加载器
 9     test_module = loader.loadTestsFromModule(unittest_tc_load) # 加载测试类
10     suit.addTest(test_module) # 测试类添加到测试套件中
11     runner = unittest.TextTestRunner() # 用例运行器
12     runner.run(suit) # 运行

说明

  这个方式其实是和方式3一样的原理, 只不过这个方式是直接加载整个测试模块, 如果测试模块中含有多个测试类,都将被加载,这样批量添加测试会很方便,前提是我们需要导入我们测试模块

方式5

  说明

方式5是直接通过在创建测试套件的时候直接把测试模块添加到测试套件中,看下面的代码

1     
2     loader = unittest.TestLoader() # 用例加载器
3     test_modules = (loader.loadTestsFromModule(unittest_tc_load1), loader.loadTestsFromModule(unittest_tc_load2)) # 加载测试类
4     suit = unittest.TestSuite(tests=test_modules) # 测试套件
5     runner = unittest.TextTestRunner() # 用例运行器
6     runner.run(suit) # 运

unittest_tc_load1和unittest_tc_load2为两个测试模块,我们使用这种方式的时候需要先导入这两个模块

方式6

  简单实例

 1 import unittest
 2 
 3 
 4 class LoadTest(unittest.TestCase):
 5 
 6     def test_case_01(self):
 7         self.assertEqual(1, 1)
 8 
 9     def test_case_02(self):
10         self.assertEqual(2, 2)
11 
12 
13 if __name__ == '__main__':
14     suite = unittest.makeSuite(LoadTest)
15     runner = unittest.TextTestRunner()
16     runner.run(suite)
# 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Process finished with exit code 0

说明

  方式6的方法同样只能加载一个测试类,但是相比前面几种方法,代码少了很多,同样,如果运行多个测试类仍然需要创建多个suite

方式7

  简单实例

 1 import unittest
 2 
 3 
 4 class LoadTest(unittest.TestCase):
 5 
 6     def test_case_01(self):
 7         self.assertEqual(1, 1)
 8 
 9     def test_case_02(self):
10         self.assertEqual(2, 2)
11 
12 
13 if __name__ == '__main__':
14     discover = unittest.defaultTestLoader.discover(start_dir='.', pattern='unittest*.py')
15     runner = unittest.TextTestRunner()
16     runner.run(discover)
# 输出
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Process finished with exit code 0

说明

  方式7通过defaultTestLoader.discover()方法来发现用例,我们可以看到第一个参数start_dir 表示用例的目录, pattern 表示匹配什么样的文件搜索测试用例,比较上面几种方法,个人认为这种方法是最灵活的,我们可以通过规范测试模块文件的命名,使用这种方式一次性加载所有的用例

总结

  大概方法差不多就这些,其实还有很多其他加载方法, 比如通过TestLoader方法加载用例,我们可以看到他其他加载用例的方法。

最后呢还是需要根据个人实际中的一个需求选择不同的方法, 正确的方法往往会事半功倍。

 感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

   Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

23 | MySQL是怎么保证数据不丢的?

以下内容出自《MySQL 实战 45 讲》 23 | MySQL是怎么保证数据不丢的? binlog 的写入机制 1、事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中。 2、一个事务的 binlog 是不能被…

rust学习-所有权

运行程序必须管理使用内存的方式 (1)一些语言中具有垃圾回收机制,程序运行时不断寻找不再使用的内存 (2)一些语言中,开发者必须亲自分配和释放内存 (3)Rust 通过所有权系统管理内存…

Windows操作系统安全加固

Windows操作系统安全加固 一、安全加固基本思路1.1、安全基线1.2、系统信息审查 二、Windows安全配置加固2.1、漏洞修复——补丁安装2.2、漏洞修复——端口封禁2.2.1、windows高危端口加固实践——封禁135端口对外开放 2.3、安全配置加固——账号口令 一、安全加固基本思路 1.…

10.20UEC++/代理,单播,多播

构建一个无参无返回值类型的函数(也可以有参有返回值类型) 相对应的构建一个无参无返回值类型的代理

【计算机组成与体系结构课程设计】上机考试

1 (1) 针对图中的MIPS处理器数据通路(不考虑I/O),用红色或蓝色描出执行sw指令时的数据通路。(将该图下载到电脑,并用画图完成描线) (2) 写出执行sw指令时,各个元件控制端信号应该置什么值? 2 基于Minisys处理…

Qt保存代码

补全保存代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//字体按钮对应的槽函数 void Widget::on_fontBtn_clicked() {…

使用常见的三个命令分析线程的信息

目录 jps jstack.exe jvisualvm.exe jmc.exe 这三个都在jdk\bin文件夹中!!! 查看线程等待状态与信息可以采用3种常见命令。 本文中针对以下代码进行演示 package ChapterOne.test;public class Run3 {public static void main(String[…

Coggle 30 Days of ML(23年7月)任务四:线性模型训练与预测

Coggle 30 Days of ML(23年7月)任务四:线性模型训练与预测 任务四:使用TFIDF特征和线性模型完成训练和预测 说明:在这个任务中,你需要使用TFIDF特征和线性模型(如逻辑回归)完成训练…

图像处理-比特平面分层和重构

一、比特平面分层 像素是由比特组成的数字。例如在256级灰度图像中,每个像素的灰度是由8比特(一个字节)组成。如下图所示,一幅8比特图像由8个1比特平面组成,其中平面1包含图像中所有像素的最低阶比特,而平…

人工智能(pytorch)搭建模型17-pytorch搭建ReitnNet模型,加载数据进行模型训练与预测

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型17-pytorch搭建ReitnNet模型,加载数据进行模型训练与预测,RetinaNet 是一种用于目标检测任务的深度学习模型,旨在解决目标检测中存在的困难样本和不平衡…

前端Vue仿京东淘宝我的优惠券列表组件 用于电商我的优惠券列表页面

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。 通过组件化开发,可以有效实现…

C++之子类指向父类,父类指向子类总结(一百五十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

nginx配置例子-动静分离实例

动静分离实例 1.准备工作 步骤一:在 根目录/ 下 创建 目录data/www 和 data/image 步骤二:在目录www 下 ,创建a.html文件 步骤三:在目录image下,将图片拖到Xshell客户端,实现图片导入Linux,导…

ITIL 4—发布管理实践

2 基本信息 2.1 目的和描述 关键信息 发布管理实践的目的是使新的和变更的服务及功能均可用。 发布管理实践是为了确保组织及其服务使用者在符合组织政策和协议的前提下,服务可以正常使用而产生的最佳实践。 传统场景下,服务组件(包括基…

QT -20230709

练习&#xff1a; 登录界面增加注册功能(在本地增加用户文件进行比对用户) LoginWindow.h #ifndef LOGINWINDOW_H #define LOGINWINDOW_H#include <QMainWindow> #include <QIcon> #include <QLabel> #include <QLineEdit> #include <QPushButto…

TCP Socket性能优化秘籍:掌握read、recv、readv、write、send、sendv的最佳实践

TCP Socket性能优化秘籍&#xff1a;掌握read、recv、readv、write、send、sendv的最佳实践 博主简介一、引言1.1、TCP Socket在网络通信中的重要性1.2、为什么需要优化TCP Socket的性能&#xff1f; 二、TCP Socket读操作的性能优化2.1、read、recv、readv的功能和用法2.2、提…

有哪些做的问卷调查的工具?

想要洞察市场变化、了解某个特定群体的喜好等情况&#xff0c;使用问卷调查是常见的方法。而互联网的发展&#xff0c;越来越多的人转战网络问卷&#xff0c;而功能各异的问卷工具却让人挑花眼。今天&#xff0c;我们精准针对大家的需求和常见的一些问题&#xff0c;为大家聊一…

ASPICE汽车软件能力如何评估

第一节我们介绍了&#xff1a;什么是ASPICE 上一节我们介绍了&#xff1a;什么是aspice认证 这一节我们看一看&#xff1a;ASPICE汽车软件能力是如何评估 为了使汽车电控系统的研发具有统一的流程和规范的标准&#xff0c;并且使整个开发进度具有可控性和可预测阻借用具有国际…

利用Anaconda完成Python环境安装及配置

1 Anaconda 1.1 配置过程 Anaconda是一个开源的Python和R编程语言的软件包管理器和环境管理器&#xff0c;用于数据科学和机器学习的开发。 进入官网https://www.anaconda.com/下载安装包next->argee进入下列界面&#xff0c;选择Just Me 选择安装路径&#xff0c;点击Ne…

Swagger-Bootstrap-UI

Swagger-Bootstrap-UI 是一个为 Swagger 提供美观、易用的界面展示和增强功能的开源项目。它通过自定义样式和交互&#xff0c;提供了更好的文档展示和交互体验&#xff0c;包括美化的界面、接口测试工具、在线调试、文档导出等功能。 更高阶的有Knife4j,Knife4j是一个集Swagg…