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

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双向转换电路 &#x1f527;采用的是5V供电的STC8H单片机输出PWM波形&#xff0c;经过上面的电平转换电路测量低压端的波形。 ✨在做3.3V <>5V 电平转换电路方案验证时&#xff0c;输入5V PWM波形和输出波形的波形上升沿有尖…...

【数据结构】选择排序(详细)

选择排序 1. 直接选择排序2. 堆排序2.1 堆2.2 堆的实现&#xff08;以大根堆为例&#xff09;2.3 堆排序 3. 堆排序&#xff08;topK问题&#xff09; 1. 直接选择排序 思想 以排升序为例。以a[i]为最大值&#xff08;或最小值&#xff09;&#xff0c;从a[i1]到a[n-1-i]比较选…...

什么是企业内容管理?

为什么出现企业内容管理&#xff1f; 在数字经济的宏观背景下&#xff0c;企业建立了各种应用系统以满足企业各业务的管理需求&#xff0c;这些系统每天都在产生大量的数据和信息资源&#xff0c;但在企业实践中存在很多数据或资源无法被应用系统获取、处理和共享。 比如发票…...

机器学习:分类、回归、决策树

分类&#xff1a;具有明确的类别 如&#xff1a;去银行借钱&#xff0c;会有借或者不借的两种类别 回归&#xff1a;不具有明确的类别和数值 如&#xff1a;去银行借钱&#xff0c;预测银行会借给我多少钱&#xff0c;如&#xff1a;1~100000之间的一个数值 不纯度&#xff1…...

java常见的异常,下一篇写如何正确处理异常

当我们编写Java程序时&#xff0c;经常会遇到各种异常情况。异常是指在程序执行过程中发生的一些错误或意外情况&#xff0c;它会打断程序的正常执行流程&#xff0c;并且需要被适当地处理。在Java中&#xff0c;异常被分为两种类型&#xff1a;可检查异常&#xff08;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升级内核,非必需&#xff0c;默认不升级&…...

ChatGPT辩证观点:“人才不是一个企业的核心竞争力,对人才的管理能力才是一个企业的核心竞争力”

一、问&#xff1a; “人才不是一个企业的核心竞争力&#xff0c;对人才的管理能力才是一个企业的核心竞争力”这句话的理解和误解&#xff0c;这句话有哪个中心论点转移和变化 二、ChatGPT答&#xff1a; 这句话的理解和误解&#xff1a; 理解&#xff1a;这句话的意思是说…...

windows11 永久关闭windows defender的方法

1、按键盘上的windows按键&#xff0c;再点【设置】选项。 2、点击左侧菜单的【隐私和安全性】&#xff0c;再点击列表的【Windows安全中心】选项。 3、点击界面的【病毒和威胁保护】设置项。 4、病毒保护的全部关闭 5、别人的图&#xff08;正常是都开着的&#xff09; 6、终极…...

继承的基本知识

概念 假设基于A类&#xff0c;创建了B类&#xff0c;那么称A为B的父类&#xff0c;B为A的子类 子类会继承父类的成员变量及成员函数&#xff0c;但是不能继承构造、析构、运算符重载 假设又基于B创建了C&#xff0c;那么称B为C的直接基类&#xff0c;A为C的间接基类 继承按…...

【Frida-实战】EA游戏平台的文件监控(PsExec.exe提权)

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ 代码编写开源代码搜索自己撸代码procexp确定句柄对应的文件名并过滤 2️⃣ PsExec.exe提权定位找不到EABackgroundService.exe的问题 PsExec.exe提权PsExec.exe原理 &#x1f6ec; 结论&#x1f4d6; 参考资料 &#x1f6eb; 问题…...

可视化和回归分析星巴克咖啡在中国的定价建议

可视化和回归分析星巴克咖啡在中国的定价建议。星巴克的拿铁大杯Tall 在各国的价格。 Claude AI | 代码自动生成的数据可视化代码 选择Claude AI 而非 ChatGPT的理由是前者更懂中文​&#xff01;具体可以参见我前面的两篇文章对比两者的中英文翻译的表现及使用安装等难易程度​…...

热门影片怎么买票比较便宜,低价买电影票的方法,纯攻略!

有时候真的有被自己蠢到&#xff01;看电影看了这么多年&#xff0c;竟然不知道电影票价格才9.9元、19.9元就能买到。之前我看电影动不动就是几十上百块&#xff0c;感觉好亏啊。 其实&#xff0c;我也不敢相信的&#xff0c;通过这些平台&#xff0c;同时在节假日甚至春节档期…...

Python通过SWIG调用C++时出现的ImportError问题解析

摘要 win10系统&#xff0c;编译器为mingw&#xff0c;按照教程封装C的一个类并用python调用&#xff0c;一步步进行直到最后一步运行python代码时&#xff0c;在python代码中import example时报错ImportError: DLL load failed while importing _example: The specified modul…...

3ds Max云渲染有多快,3ds Max云渲染怎么用?

本地渲染效果图和动画3D项目是一个非常耗时的过程&#xff0c;当在场景中使用未优化的几何体或在最终渲染中使用大量多边形模型时&#xff0c;诸如此类的变量最终会增加渲染项目所需的时间和处理器能力。随着提供的渲染服务的云渲染平台出现&#xff0c;越来越多动画师、艺术家…...

Java之线程安全

目录 一.上节回顾 1.Thread类常见的属性 2.Thread类中的方法 二.多线程带来的风险 1.观察线程不安全的现象 三.造成线程不安全现象的原因 1.多个线程修改了同一个共享变量 2.线程是抢占式执行的 3.原子性 4.内存可见性 5.有序性 四.解决线程不安全问题 ---synchroni…...

我有一个方法判断你有没有编程天赋

我有一个方法判断你有没有编程天赋 一 前言 基于知识的诅咒的原理 做一个敲击者很难。问题在于敲击者已拥有的知识&#xff08;歌曲题目&#xff09;让 他们想象不到缺乏这种知识会是什么情形。当他们敲击的时候&#xff0c;他 们不能想象听众听到的是那些独立的敲击声而不是…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

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

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

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...