selenium——unittest框架
目录
- 一、unittest框架基本介绍
- 二、unittest框架解析
- 三、unittest框架使用方法
- 1.测试固件
- 2.测试套件
- 3.用例的执行顺序
- 4.忽略测试用例中的方法
- 5.unittest断言
- 6.HTML报告生成
一、unittest框架基本介绍
在进行selenium IDE脚本录制导出的脚本中,我们发现其中多了很多代码,这些代码正是unittest测试框架。unittest 是web界面的功能测试框架,白盒测试测试框架是Junit。unittest 单元测试提供了创建测试用例、测试套件以及批量执行的方案。unittest 在安装python 以后就直接自带了,调用import unittest 就可以使用。
二、unittest框架解析

1.test fixture(测试固件):存了类里面固定的方法,初始化和清理测试环境,比如创建临时的数据库,文件和目录等
2.test case:单元测试用例,TestCase 是编写单元测试用例最常用的类
3.test suite(测试套件):把测试方法放到容器里,单元测试用例的集合,TestSuite 是最常用的类
4.test runner:执行单元测试
5.test report:生成测试报告
三、unittest框架使用方法
1.测试固件
一个方法一个方法的去写。
setup()进行初始化
teardown() 进行清理
Self 代表实例
Class 继承父类
from selenium import webdriver
import unittest
import time
from selenium.common.exceptions import NoAlertPresentException
from selenium.webdriver.common.by import By#setup和teardown在每次运行test_程序之前和之后都会默认运行
class testCase1(unittest.TestCase):#初始化def setUp(self):self.driver = webdriver.Chrome()self.url = "http://www.baidu.com/"self.driver.get(self.url)time.sleep(3)self.driver.maximize_window()time.sleep(3)#关闭以及清理def tearDown(self):self.driver.quit()#自动默认运行前面加test_def test_baidu1(self):driver = self.driverdriver.find_element(By.ID, "kw").send_keys("星黛露")driver.find_element(By.ID, "su").click()time.sleep(3)#调用才使用def is_alert_exist(self):try:self.driver.switch_to.alertexcept NoAlertPresentException as e:return Falsereturn Trueif __name__ == "__main__ ":unittest.main(verbosity=0)
2.测试套件
测试套件:通俗来讲就是存放测试用例(测试方法)的一个容器。
(1)类里面一个方法一个方法添加
test001和test002都是文件,testCase1和testCase2是文件里的类可以称之为测试用例,test_baidu1和test_baidu2是类里的方法。
Addtest
import unittest
from src0303 import test001, test002#创建一个测试套件
def createsuite():suite=unittest.TestSuite()suite.addTest(test001.testCase1("test_baidu1"))suite.addTest(test002.testCase2("test_baidu1"))return suiteif __name__ == "__main__":suite = createsuite()runner = unittest.TextTestRunner(verbosity=2)runner.run(suite)
(2)一个类一个类的添加
makeSuite():只是添加文件里的类,类里的方法不用一个一个的添加。
import unittest
from src0303 import test001, test002def createsuite():suite=unittest.TestSuite()suite.addTest(unittest.makeSuite(test001.testCase1))suite.addTest(unittest.makeSuite(test001.testCase2))return suiteif __name__ == "__main__":suite = createsuite()runner = unittest.TextTestRunner(verbosity=1)runner.run(suite)
(3) 一个文件一个文件的测试
适用于文件非常多的时候,文件要是一定格式命名的。
discover()
#src202201文件夹,找到test00*.py开头的文件夹
import unittest
def createSuite():discover=unittest.defaultTestLoader.discover('../src202201',pattern='test00*.py',top_level_dir=None)if __name__=="__main__":suite = createsuite()runner = unittest.TextTestRunner(verbosity=1)runner.run(suite)
注:Verbosity=1或者2表示打印方法很详细,如下:

3.用例的执行顺序
unittest框架(文件名,类名,方法名-)默认加载测试用例的顺序是根据ASCII码的顺序,数字与字母的顺序为:0-9,A-Z,a-z。例如:Testadd比Testade优先执行。
4.忽略测试用例中的方法
适用于书写方法太多,但是只想执行少数测试用例的情况。在想忽略的方法前加标签@。
@unittest.skip("skipping")
5.unittest断言
(1)断言概念
断言是为了判断实际和预期结果是否一致。自动化的测试中, 对于每个单独的case来说,一个case的执行结果中, 必然会有期望结果与实际结果, 来判断该case是通过还是失败, 在unittest 的库中提供了大量的实用方法来检查预期值与实际值, 来验证case的结果, 一般来说, 检查条件大体分为等价性, 逻辑比较以及其他, 如果给定的断言通过, 测试会继续执行到下一行的代码, 如果断言失败, 对应的case测试会立即停止或者生成错误信息( 一般打印错误信息即可) ,但是不要影响其他的case执行。
(2)常用断言方法
| 断言方法 | 断言描述 |
|---|---|
| assertEqual(arg1, arg2, msg=None) | 验证arg1=arg2,不等则fail |
| assertNotEqual(arg1, arg2, msg=None) | 验证arg1 != arg2, 相等则fail |
| assertTrue(expr, msg=None) | 验证expr是true,如果为false,则fail |
| assertFalse(expr,msg=None) | 验证expr是false,如果为true,则fail |
| assertIs(arg1, arg2, msg=None) | 验证arg1、arg2是同一个对象,不是则fail |
| assertIsNot(arg1, arg2, msg=None) | 验证arg1、arg2不是同一个对象,是则fail |
| assertIsNone(expr, msg=None) | 验证expr是None,不是则fail |
| assertIsNotNone(expr, msg=None) | 验证expr不是None,是则fail |
| assertIn(arg1, arg2, msg=None) | 验证arg1是arg2的子串,不是则fail |
| assertIn(arg1, arg2, msg=None) | 验证arg1不是arg2的子串,是则fail |
| assertIsInstance(obj, cls, msg=None) | 验证obj是cls的实例,不是则fail |
| assertNotIsInstance(obj, cls,msg=None) | 验证obj不是cls的实例,是则fail |
| 以第一个断言举例: |
class testCase1(unittest.TestCase):#初始化def setUp(self):self.driver = webdriver.Chrome()self.url = "http://www.baidu.com/"self.driver.get(self.url)time.sleep(3)self.driver.maximize_window()time.sleep(3)#关闭以及清理def tearDown(self):self.driver.quit()#自动默认运行前面加test_def test_baidu1(self):driver = self.driverdriver.find_element(By.ID, "kw").send_keys("星黛露")driver.find_element(By.ID, "su").click()time.sleep(3)#判断title(星黛露的百度搜索)与"星黛露_百度搜索"是否相同,若不相同输出“not equal”并调用is_alert_exist(self)报异常,此处是相等的。self.assertEqual(driver.title,"星黛露_百度搜索",msg="not equal!")#调用才使用def is_alert_exist(self):try:self.driver.switch_to.alertexcept NoAlertPresentException as e:return Falsereturn Trueif __name__ == "__main__ ":unittest.main(verbosity=0)
6.HTML报告生成
将控制台结果整理成结果,涉及失败的原因和结果。将HTMLTestRunner.py放到安装python的lib文件夹里。
未完待更新…
相关文章:
selenium——unittest框架
目录 一、unittest框架基本介绍二、unittest框架解析三、unittest框架使用方法1.测试固件2.测试套件3.用例的执行顺序4.忽略测试用例中的方法5.unittest断言6.HTML报告生成 一、unittest框架基本介绍 在进行selenium IDE脚本录制导出的脚本中,我们发现其中多了很多…...
matlab频谱分析详解
频谱分析是一种用于分析信号频率特征的方法,常用于信号处理、音乐分析、谐波产生等领域。MATLAB是一种功能强大的数字信号处理软件,提供了许多用于频谱分析的函数和工具箱。 本文将介绍如何使用MATLAB进行频谱分析,包括信号预处理、选择合适…...
用layui写用户登录页面遇到的问题
用layui写用户登录页面遇到的问题 1.在layui-row下面的layui-col-md还是换行 原因:link标签和script标签中的type属性没写,导致应该是script或者这个css没有识别出来 解决办法:link标签里面加上type为text/css, script标签中加上type为 2…...
NMOS双向转换电路实测以及上升沿尖峰处理
NMOS双向转换电路实测以及上升沿尖峰处理 NMOS双向转换电路 🔧采用的是5V供电的STC8H单片机输出PWM波形,经过上面的电平转换电路测量低压端的波形。 ✨在做3.3V <>5V 电平转换电路方案验证时,输入5V PWM波形和输出波形的波形上升沿有尖…...
【数据结构】选择排序(详细)
选择排序 1. 直接选择排序2. 堆排序2.1 堆2.2 堆的实现(以大根堆为例)2.3 堆排序 3. 堆排序(topK问题) 1. 直接选择排序 思想 以排升序为例。以a[i]为最大值(或最小值),从a[i1]到a[n-1-i]比较选…...
什么是企业内容管理?
为什么出现企业内容管理? 在数字经济的宏观背景下,企业建立了各种应用系统以满足企业各业务的管理需求,这些系统每天都在产生大量的数据和信息资源,但在企业实践中存在很多数据或资源无法被应用系统获取、处理和共享。 比如发票…...
机器学习:分类、回归、决策树
分类:具有明确的类别 如:去银行借钱,会有借或者不借的两种类别 回归:不具有明确的类别和数值 如:去银行借钱,预测银行会借给我多少钱,如:1~100000之间的一个数值 不纯度࿱…...
java常见的异常,下一篇写如何正确处理异常
当我们编写Java程序时,经常会遇到各种异常情况。异常是指在程序执行过程中发生的一些错误或意外情况,它会打断程序的正常执行流程,并且需要被适当地处理。在Java中,异常被分为两种类型:可检查异常(Checked …...
C#开发的OpenRA游戏之网络协议打包和解包
C#开发的OpenRA游戏之网络协议打包和解包 OpenRA游戏里,由于这是一个网络游戏,那么与服务器通讯就缺少不了, 既然要通讯,那么就需要协议,有协议就需要对数据进行打包和解包, 这个过程其实就是序列化与反序列化的过程。 游戏里很多命令都需要发送给服务器,以便服务器同…...
K8S通过Ansible安装集群
K8S通过Ansible安装集群 K8S集群安装可参考https://gitee.com/open-hand/kubeadm-ha.git、https://github.com/easzlab/kubeasz.git 安装高可用集群 git clone https://gitee.com/open-hand/kubeadm-ha.git && cd kubeadm-ha升级内核,非必需,默认不升级&…...
ChatGPT辩证观点:“人才不是一个企业的核心竞争力,对人才的管理能力才是一个企业的核心竞争力”
一、问: “人才不是一个企业的核心竞争力,对人才的管理能力才是一个企业的核心竞争力”这句话的理解和误解,这句话有哪个中心论点转移和变化 二、ChatGPT答: 这句话的理解和误解: 理解:这句话的意思是说…...
windows11 永久关闭windows defender的方法
1、按键盘上的windows按键,再点【设置】选项。 2、点击左侧菜单的【隐私和安全性】,再点击列表的【Windows安全中心】选项。 3、点击界面的【病毒和威胁保护】设置项。 4、病毒保护的全部关闭 5、别人的图(正常是都开着的) 6、终极…...
继承的基本知识
概念 假设基于A类,创建了B类,那么称A为B的父类,B为A的子类 子类会继承父类的成员变量及成员函数,但是不能继承构造、析构、运算符重载 假设又基于B创建了C,那么称B为C的直接基类,A为C的间接基类 继承按…...
【Frida-实战】EA游戏平台的文件监控(PsExec.exe提权)
▒ 目录 ▒ 🛫 问题描述环境 1️⃣ 代码编写开源代码搜索自己撸代码procexp确定句柄对应的文件名并过滤 2️⃣ PsExec.exe提权定位找不到EABackgroundService.exe的问题 PsExec.exe提权PsExec.exe原理 🛬 结论📖 参考资料 🛫 问题…...
可视化和回归分析星巴克咖啡在中国的定价建议
可视化和回归分析星巴克咖啡在中国的定价建议。星巴克的拿铁大杯Tall 在各国的价格。 Claude AI | 代码自动生成的数据可视化代码 选择Claude AI 而非 ChatGPT的理由是前者更懂中文!具体可以参见我前面的两篇文章对比两者的中英文翻译的表现及使用安装等难易程度…...
热门影片怎么买票比较便宜,低价买电影票的方法,纯攻略!
有时候真的有被自己蠢到!看电影看了这么多年,竟然不知道电影票价格才9.9元、19.9元就能买到。之前我看电影动不动就是几十上百块,感觉好亏啊。 其实,我也不敢相信的,通过这些平台,同时在节假日甚至春节档期…...
Python通过SWIG调用C++时出现的ImportError问题解析
摘要 win10系统,编译器为mingw,按照教程封装C的一个类并用python调用,一步步进行直到最后一步运行python代码时,在python代码中import example时报错ImportError: DLL load failed while importing _example: The specified modul…...
3ds Max云渲染有多快,3ds Max云渲染怎么用?
本地渲染效果图和动画3D项目是一个非常耗时的过程,当在场景中使用未优化的几何体或在最终渲染中使用大量多边形模型时,诸如此类的变量最终会增加渲染项目所需的时间和处理器能力。随着提供的渲染服务的云渲染平台出现,越来越多动画师、艺术家…...
Java之线程安全
目录 一.上节回顾 1.Thread类常见的属性 2.Thread类中的方法 二.多线程带来的风险 1.观察线程不安全的现象 三.造成线程不安全现象的原因 1.多个线程修改了同一个共享变量 2.线程是抢占式执行的 3.原子性 4.内存可见性 5.有序性 四.解决线程不安全问题 ---synchroni…...
我有一个方法判断你有没有编程天赋
我有一个方法判断你有没有编程天赋 一 前言 基于知识的诅咒的原理 做一个敲击者很难。问题在于敲击者已拥有的知识(歌曲题目)让 他们想象不到缺乏这种知识会是什么情形。当他们敲击的时候,他 们不能想象听众听到的是那些独立的敲击声而不是…...
如何在5分钟内成为资源下载高手:res-downloader的终极指南
如何在5分钟内成为资源下载高手:res-downloader的终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader res-do…...
一篇顶一万篇,很难找到代码这么全的高分文章,WGS、RNA-seq、scRNA-seq、免疫肽组质谱联合分析
🚀科研不掉发,快来这个地表最强的生信神仙网站:中国银河生信云平台👉 立即访问:https://usegalaxy.cn结直肠癌免疫治疗中,多数新抗原筛选仅聚焦编码区,大量潜在靶点被忽略,非编码区能…...
逻辑器件设计中的总线保持(Bus Hold)功能解析与实战案例
1. 总线保持功能的前世今生 第一次听说总线保持(Bus Hold)这个概念,还是在五年前的一个深夜。当时我负责的项目遇到一个诡异现象:设备在热插拔时,主控板经常无法检测到业务板的拔出动作。排查了整整三天,最…...
merge sort(自用)
首先来看一下这道题目:# P1309 [NOIP 2011 普及组] 瑞士轮## 题目背景在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后…...
从晶体管到ALU:计算机运算基础全解析
1. 从晶体管到二进制:计算机运算的物理基础现代计算机的核心运算能力源于晶体管这一基础电子元件的巧妙运用。晶体管本质上是一个由半导体材料制成的三端器件,通过控制其中一个电极(基极或栅极)的电压,可以精确控制另外…...
三线制SPI通信原理与ZYNQ实现方案
1. 三线制SPI通信的背景与应用场景 在嵌入式系统设计中,SPI(Serial Peripheral Interface)总线是最常用的通信接口之一。传统四线制SPI包含SCLK(时钟)、MOSI(主机输出从机输入)、MISO(主机输入从机输出)和SS(片选)四条信号线。但在某些特定应用场景下,为…...
2026届毕业生推荐的六大降重复率平台解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要是为了切实有效地去降低文本所具备的AIGC也就是人工智能生成内容的特征,那就建…...
生成剧本杀软件2025推荐,创新剧情设计工具引领潮流
剧本杀软件2025推荐,创新剧情设计工具引领潮流随着剧本杀市场的蓬勃发展,越来越多的创作者和玩家对剧本杀软件的需求日益增长。为了帮助大家在众多选择中找到最适合自己的工具,本文将推荐一款在2025年备受瞩目的剧本杀软件——量子探险AI漫剧…...
终极指南:3步快速修复Visual C++运行库,让Windows告别DLL错误
终极指南:3步快速修复Visual C运行库,让Windows告别DLL错误 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C运行库是Windows系统…...
WorkBuddy 实用培训课程内容体系:从入门到精通的“数字员工”养成指南
构建的 WorkBuddy(基于OpenClaw架构)实用培训课程内容体系。本体系深度解构了OpenClaw的技术原理、生态应用与安全实践,旨在培养具备专业能力的“数字员工”管理者与开发者。课程前言:AI 范式转移——从“建议者”到“执行者”在人…...
