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

Python+Selenium+Unittest 之Unittest3(TestSuite()和TextTestRunner())

目录

1:addTest()

2、addTests()

3:discover()


        上一篇说了Unittest的一个基本的执行顺序,那如果我们想要调整用例的执行先后顺序的话,可以用TestSuite()和TextTestRunner()了,可以这么理解,比如一个班级里有50个学生(50条用例),其中有10个学生获得了评优(10条需要执行),然后需要单独叫出来领奖,然后这10个学生领奖的时候需要按照一定顺序进行排队上台(进行用例的先后顺序排列),TestSunit()的作用就可以把这10个学生叫出来并且排好队,然后这会该上台了,这时候就需要搭配上TextTestRunner()来使用了,可以把TextTestRunner()当成老师,你们用TestSunite()排好队了,然后听TextTestRunner()指挥来按顺序上台(按之前排好的顺序进行运行)。

        下面重点说下怎么对学生进行排队(怎么添加需要执行的用例)。

1:addTest()

        添加需要执行用例时,可以使用addTest()的方式一个一个的去添加,具体用法在addTest()里写上类和对应用例即可(addTest(类(方法))  )。

import unittest       #导入unittest的框架
class Atmunit_case(unittest.TestCase):       #定义一个class类的名称,并且继承unittest的框架def setUp(self):print("----用例开始了-----")def test_111(self):        #只能以小写test开头,一个def就可以理解成一个测试用例,但是这里的命名必须是以test开头,这个会区分大小写,必须是全部小写的testprint("用例1")    #用例内容def test_222(self):        #定义第二个测试用例,不是以test开头,这个不会被执行print("用例2")    #用例内容def ddd(self):       #写一个ddd的方法,看会不会运行print(11111)def tearDown(self):    #结束的执行print("-------执行结束了-----")if __name__ == '__main__':     #运行unittest框架suite = unittest.TestSuite()    #把TestSuite实例化suite.addTest(Atmunit_case('test_222'))   #调整执行顺序,优先执行test_222用例,括号里需要填写类名(class后面的名字)和对应的函数名(def后面的名字)suite.addTest(Atmunit_case('test_111'))   #然后执行test_11用例suite.addTest(Atmunit_case('ddd'))    #写上ddd看会不会执行(结果是会运行的,但是这样不太符合unittest的规范,最好少出现这样的写法)runner = unittest.TextTestRunner()    #实例化TextTestRunner()runner.run(suite)       #执行上述用例

执行结果为:

----用例开始了-----
用例2
-------执行结束了-----
----用例开始了-----
用例1
-------执行结束了-----
----用例开始了-----
11111
-------执行结束了-----

执行截图:

2、addTests()

        下面说下addTests()的方法,用法和addTest()没啥太大区别,这个可以把需要执行的用例提前定义下,test = (类(方法1),类(方法2),类(方法3)),然后把test传到addTests()里即可。

import unittest       #导入unittest的框架
class Atmunit_case(unittest.TestCase):       #定义一个class类的名称,并且继承unittest的框架def setUp(self):print("----用例开始了-----")def test_111(self):        #只能以小写test开头,一个def就可以理解成一个测试用例,但是这里的命名必须是以test开头,这个会区分大小写,必须是全部小写的testprint("用例1")    #用例内容def test_222(self):        #定义第二个测试用例,不是以test开头,这个不会被执行print("用例2")    #用例内容def ddd(self):       #写一个ddd的方法,看会不会运行print(11111)def tearDown(self):    #结束的执行print("-------执行结束了-----")if __name__ == '__main__':     #运行unittest框架suite = unittest.TestSuite()    #把TestSuite实例化testcase = (Atmunit_case('test_222'),Atmunit_case('test_111'),Atmunit_case('ddd'))    #把用例传入到testcase中suite.addTests(testcase)     #使用addTests()的方法批量添加用例runner = unittest.TextTestRunner()    #实例化TextTestRunner()runner.run(suite)       #执行上述用例

执行结果为:

----用例开始了-----
用例2
-------执行结束了-----
----用例开始了-----
用例1
-------执行结束了-----
----用例开始了-----
11111
-------执行结束了-----

执行截图;

3:discover()

        当有多个测试文件需要执行时,也可以选择discover()的方式,具体用法为:

unittest.defaultTestLoader.discover(start_dir='.',pattern="test_case*.py",top_level_dir=None)#start_dir 表示要搜索的文件路径,通常设置为 .  表示为当前目录pattern  表示要搜索的文件的名称格式,*为通配符表示任意内容,这个的意思是以test_case开头然后中间有任意内容,最后以.py结尾的文件top_level_dir  表示是否为项目的顶层目录,用于去寻找相对的导入路径,一般默认即可,或者可以不写

        比如截图中的目录,我们有test_case_01、test_case_02、test_case_03、test11_case_04这几个目录,这几个里面分别对应不同的用例。

test_case_01.py里面的内容

import unittest       #导入unittest的框架
class test_case_01(unittest.TestCase):       #定义一个class类的名称,并且继承unittest的框架def test_101(self):        #定义test_101的测试方法print('test_case_101')def test_102(self):        #定义test_102的测试方法print('test_case_102')

test_case_02.py里面的内容:

import unittest       #导入unittest的框架
class test_case_02(unittest.TestCase):       #定义一个class类的名称,并且继承unittest的框架def test_201(self):        #定义test_201的测试方法print('test_case_201')def test_202(self):        #定义test_202的测试方法print('test_case_202')

test_case_03.py里面的内容:

import unittest       #导入unittest的框架
class test_case_03(unittest.TestCase):       #定义一个class类的名称,并且继承unittest的框架def test_301(self):         #定义test_301的测试方法print('test_case_301')def test_302(self):         #定义test_302的测试方法print('test_case_302')

test11_case_04.py里面的内容:

import unittest       #导入unittest的框架
class test11_case_04(unittest.TestCase):       #定义一个class类的名称,并且继承unittest的框架def test_401(self):         #定义test_401的测试方法print('test_case_401')def test_402(self):         #定义test_402的测试方法print('test_case_402')

testrunner.py里面的内容:

import unittest#discover = unittest.defaultTestLoader.discover(start_dir='.',pattern="test_case*.py",top_level_dir=None)#设定需要运行的用例范围discover = unittest.defaultTestLoader.discover(start_dir='.',pattern="test_case*.py")  #设定需要运行的用例范围
unittest.TextTestRunner().run(discover)  #运行测试用例

        只需要运行testrunner.py即可,他会去找符合的文件,并运行里面的测试用例(test_case开头的方法),因为按着上面的匹配方式来说,test11_case_04.py不符合匹配的条件,所以只运行了test_case_01、test_case_02、test_case_03三个文件里的用例。

运行结果为:

test_case_101
test_case_102
test_case_201
test_case_202
test_case_301
test_case_302

​    ​一般来说每个单独的功能写到一个独立的测试文件中,其命名开头最好都用test开头,这样使用discover()的方式运行运行时匹配的比较准确,discover()为最常用的​用例条件运行方式。


 如果大家在使用过程中遇到了问题,可以在文章下留言,或者关注公众号:刘阿童木的进化记录,进行留言

                   下图为公众号二维码,内容会同步发出,大家可以关注一起学习!

                                

相关文章:

Python+Selenium+Unittest 之Unittest3(TestSuite()和TextTestRunner())

目录 1:addTest() 2、addTests() 3:discover() 上一篇说了Unittest的一个基本的执行顺序,那如果我们想要调整用例的执行先后顺序的话,可以用TestSuite()和TextTestRunner()了,可以这么理解,比如一个班级…...

3D桌面端可视化引擎HOOPS Visualize如何实现3D应用快速开发?

HOOPS Visualize是一个开发平台,可实现高性能、跨平台3D工程应用程序的快速开发。一些主要功能包括: 高性能、以工程为中心的可视化,使用高度优化的OpenGL或DirectX驱动程序来充分利用可用的图形硬件线程安全的C和C#接口,内部利用…...

Vue探索之Vue2.x源码分析(二)

一.Virtual Dom 虚拟DOM是一种轻量级的抽象,它允许我们在Javascript中创建、更新和删除DOM元素。它是React等现代Javascript框架的核心概念之一。 Vue的虚拟dom是一种抽象层的概念,它使得Vue可以高效地更新Dom。虚拟Dom是通过Javascript对象来表示DOM结…...

人工智能分类算法概述

文章目录 人工智能主要分类算法决策树随机森林逻辑回归K-均值 总结 人工智能主要分类算法 人工智能分类算法是用于将数据划分为不同类别的算法。这些算法通过学习数据的特征和模式,将输入数据映射到相应的类别。分类算法在人工智能中具有广泛的应用,如图…...

理解 Golang 变量在内存分配中的规则

为什么有些变量在堆中分配、有些却在栈中分配? 我们先看来栈和堆的特点: 简单总结就是: 栈:函数局部变量,小数据 堆:大的局部变量,函数内部产生逃逸的变量,动态分配的数据&#x…...

《QT实用小工具·二十四》各种数学和数据的坐标演示图

1、概述 源码放在文章末尾 该项目实现了各种数学和数据的坐标演示图&#xff0c;下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #ifndef FRMMAIN_H #define FRMMAIN_H#include <QWidget> class QAbstractButton;namespace Ui { class frmMain; }class fr…...

【S32K3 MCAL配置】-3.1-CANFD配置-经典CAN切换CANFD(基于MCAL+FreeRTOS)

"><--返回「Autosar_MCAL高阶配置」专栏主页--> 目录(共5页精讲,基于评估板: NXP S32K312EVB-Q172,手把手教你S32K3从入门到精通) 实现的架构:基于MCAL层 前期准备工作:...

IEC101、IEC103、IEC104、Modbus报文解析工具

一、概述 国际电工委员会第57技术委员会&#xff08;IEC TC57&#xff09;1995年出版IEC 60870-5-101后&#xff0c;得到了广泛的应用。为适应网络传输&#xff0c;2000年IEC TC57又出版了IEC 60870-5-104&#xff1a;2000《远东设备及系统 第5-104部分&#xff1a;传输规约-采…...

node res.end返回json格式数据

使用 Node.js 内置 http 模块的createServer()方法创建一个新的HTTP服务器并返回json数据&#xff0c;代码如下&#xff1a; const http require(http);const hostname 127.0.0.1; const port 3000;const data [{ name: 测试1号, index: 0 },{ name: 测试2号, index: 1 },…...

产品开发流程

产品开发流程 时间&#xff1a;2024年04月10日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 产品开发流程_小蒋聊技术_免费在线阅读收听下载 - 喜马拉雅欢迎收听小蒋聊技术的类最新章节声音“产品开发流程”。时间&#xff1a;…...

Python蓝桥杯赛前总结

1.进制转换 (1) 2进制转换为其他进制 # 2转10 int(n, 2) # 2转8 oct(int(n, 2)) # 2转16 hex(int(n, 2)) (2) 8进制转换为其他进制 #8转10 int(n, 8) #8转2 bin(int(n, 8)) #8转16 hex(int(n, 8)) (3) 10进制转换为其他进制 #10转2 bin(n) #10转8 oct(n) #10转16 hex(n) …...

20240326-1-KNN面试题

KNN面试题 1.简述一下KNN算法的原理 KNN算法利用训练数据集对特征向量空间进行划分。KNN算法的核心思想是在一个含未知样本的空间&#xff0c;可以根据样本最近的k个样本的数据类型来确定未知样本的数据类型。 该算法涉及的3个主要因素是&#xff1a;k值选择&#xff0c;距离度…...

【论文速读】| MASTERKEY:大语言模型聊天机器人的自动化越狱

本次分享论文为&#xff1a;MASTERKEY: Automated Jailbreaking of Large Language Model Chatbots 基本信息 原文作者&#xff1a;Gelei Deng, Yi Liu, Yuekang Li, Kailong Wang, Ying Zhang, Zefeng Li, Haoyu Wang, Tianwei Zhang, Yang Liu 作者单位&#xff1a;南洋理工…...

jvm运行情况预估

相关系统 jvm优化原则-CSDN博客 执行下面指令 jstat gc -pid 能计算出一些关键数据&#xff0c;有了这些数据&#xff0c;先给JVM参数一些的初始的&#xff0c;比堆内存大小、年轻代大小 、Eden和Srivivor的比例&#xff0c;老年代的大小&#xff0c;大对象的阈值&#xff0c;…...

Day105:代码审计-PHP原生开发篇SQL注入数据库监控正则搜索文件定位静态分析

目录 代码审计-学前须知 Bluecms-CNVD-1Day-常规注入审计分析 emlog-CNVD-1Day-常规注入审计分析 emlog-CNVD-1Day-2次注入审计分析 知识点&#xff1a; 1、PHP审计-原生态开发-SQL注入&语句监控 2、PHP审计-原生态开发-SQL注入&正则搜索 3、PHP审计-原生态开发-SQ…...

Python:如何对FY3D TSHS的数据集进行重投影并输出为TIFF文件以及批量镶嵌插值?

完整代码见 Github&#xff1a;https://github.com/ChaoQiezi/read_fy3d_tshs&#xff0c;由于代码中注释较为详细&#xff0c;因此博客中部分操作一笔带过。 01 FY3D的HDF转TIFF 1.1 数据集说明 FY3D TSHS数据集是二级产品(TSHS即MWTS/MWHS 融合大气温湿度廓线/稳定度指数/…...

CentOS 镜像下载

CentOS 镜像下载&#xff1a;https://www.centos.org/download/ 选择合适的架构&#xff0c;博主选择x86_64&#xff0c;表示CentOS7 64位系统x86架构&#xff0c;如下&#xff1a; 或者直接访问以下网站下载 清华大学开源软件镜像站&#xff1a;https://mirrors.tuna.tsin…...

yum和配置yum源

yum 以及配置yum 源。 文章目录 一、Linux 软件包管理器yum二、使用yum安装软件三、配置yum源四、yum源仓库五、lrzse 实现linux远端和本地 互传文件 一、Linux 软件包管理器yum (1)什么是yum? yum 是一个软件下载安装管理的一个软件包管理器&#xff0c;它就相当于我们手机…...

jQuery笔记 02

目录 01 jq中预定义动画的使用 02 jq中的自定义动画 03 jq的动画的停止 04 jq节点的增删改 05 属性节点的操作 06 jq中的值和内容的操作 07 jq中宽高的操作 08 jq中坐标的操作 01 jq中预定义动画的使用 jq的预定义动画: 1.显示隐藏动画 显示 : jq对象.show() 不传参数 表…...

基于Java+SpringBoot+Vue文学名著分享系统(源码+文档+部署+讲解)

一.系统概述 随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的文学名著分享系统。当前的信息管理…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...