当前位置: 首页 > 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;提示工程架构师提示内容更新的核心技巧 摘要 当你花费数周打磨的AI提示上线后&#xff0c;是否遇到过这样的场景&#xff1a; 用户反馈“AI回答越来越不准确”&#xff1b;业务方要求“增加新的功能模块”&#xff1b;模型升级后&#xff0c;原来的提示…...

Qwen3-32B-Chat中文优化:提升OpenClaw本地任务理解准确率

Qwen3-32B-Chat中文优化&#xff1a;提升OpenClaw本地任务理解准确率 1. 为什么需要优化本地模型的中文理解能力 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动化整理电脑上的文件时&#xff0c;遇到了一个令人哭笑不得的场景。我对它说"把上周下载的PDF文件按日期…...

零代码部署:用Ollama快速搭建TranslateGemma-4B翻译服务

零代码部署&#xff1a;用Ollama快速搭建TranslateGemma-4B翻译服务 1. 为什么选择TranslateGemma-4B Google推出的TranslateGemma-4B是目前最先进的轻量级开源翻译模型之一。这个基于Gemma 3架构的模型专为多语言翻译任务设计&#xff0c;支持55种语言的互译&#xff0c;特别…...

wiliwili与Switch视频播放:解锁离线观影新体验

wiliwili与Switch视频播放&#xff1a;解锁离线观影新体验 【免费下载链接】wiliwili 专为手柄控制设计的第三方跨平台B站客户端&#xff0c;目前可以运行在PC全平台、PSVita、PS4 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili 在没…...

Qwen3模型快速部署教程:10分钟搞定GPU环境与首次调用

Qwen3模型快速部署教程&#xff1a;10分钟搞定GPU环境与首次调用 你是不是也对那些动辄几十GB、部署起来让人头大的大模型望而却步&#xff1f;觉得在自己的机器上跑起来一个像样的AI模型&#xff0c;是件门槛很高的事情&#xff1f; 今天&#xff0c;我就带你打破这个刻板印…...

FRP内网穿透实战:从零配置到远程访问

1. 为什么需要内网穿透&#xff1f; 想象一下这个场景&#xff1a;你在家里搭建了一个NAS私有云&#xff0c;存了几百部高清电影&#xff1b;或者你在办公室电脑上跑了个数据库服务&#xff0c;出差时想随时查看数据。这时候你会发现——这些服务都在内网环境里&#xff0c;离…...

终极指南:facenet-pytorch API参考手册与完整函数方法详解

终极指南&#xff1a;facenet-pytorch API参考手册与完整函数方法详解 【免费下载链接】facenet-pytorch Pretrained Pytorch face detection (MTCNN) and facial recognition (InceptionResnet) models 项目地址: https://gitcode.com/gh_mirrors/fa/facenet-pytorch f…...

突破透明动画性能瓶颈:VAP引擎实现移动端高效视觉体验

突破透明动画性能瓶颈&#xff1a;VAP引擎实现移动端高效视觉体验 【免费下载链接】vap VAP是企鹅电竞开发&#xff0c;用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点。同时支持 iOS,Android,Web 平台。 项目地址: https://gitcode.com/gh_mirrors/va/vap …...

2026-03-27:替换至多一个元素后最长非递减子数组。用go语言,给定一个整数数组 nums。 你最多只能选择其中一个位置的元素,把它改成任意整数(也可以选择不改)。 在允许这种“最多一次改动”的

2026-03-27&#xff1a;替换至多一个元素后最长非递减子数组。用go语言&#xff0c;给定一个整数数组 nums。 你最多只能选择其中一个位置的元素&#xff0c;把它改成任意整数&#xff08;也可以选择不改&#xff09;。 在允许这种“最多一次改动”的情况下&#xff0c;求能得到…...

步进电机复位翻车实录:从堵转到精准归位的5个调试技巧

步进电机复位翻车实录&#xff1a;从堵转到精准归位的5个调试技巧 去年夏天&#xff0c;我接手了一个工业自动化项目&#xff0c;需要精确控制12台42步进电机同步复位。本以为是个常规任务&#xff0c;结果第一周就遭遇了集体"罢工"——有的电机原地抖动不归零&#…...