selenium自动化测试-unittest框架

unittest框架的优点

(1)能够组织多个用例去执行
(2)提供丰富的断言方法
(3)能够生成测试报告

unittest框架的核心要素

1. TestCase测试用例

TestCase(测试用例),最小的测试单元,创建的测试类需要继承该基类

步骤:

(1)导包import unittest

(2)新建测试类并继承unittest.TestCase

(3)测试方法必须以test字母开头

运行:

(1)运行测试类的所有测试方法,光标定位到类当前行右键运行

(2)运行单个测试方法,光标放到测试方法当前行

下面以自定义的计算器cal01.py进行测试,测试代码test_cal01.py

#cal01.py
# """自定义计算器"""
#被测试部分+-*/
def my_add(a,b):return a+b
def my_sub(a,b):return a-b
def my_mul(a,b):return a*b
def my_div(a,b):return a/b
#test_cal01.py
from cal01 import *
import unittest
class MyTest(unittest.TestCase):#MyTest继承unittest.TestCasedef test_add01(self):assert 3==my_add(1,2)def test_add02(self):assert 3.0==my_add(1.0,2)def test_add03(self):assert 3.0==my_add(1.0,2.0)

在类MyTest上运行,执行当前类下的所有测试方法

在test_add01上运行,执行当前测试方法

2. TestSuite测试套件

TestSuite(测试套件) 多条测试用例集合在一起,就是一个TestSuite

使用addtest()方法将测试用例添加到测试套件中

步骤:

(1)导包 import unittest

(2)实例化 suite = unittest.TestSuite()

(3)添加用例

suite.addTest(ClassName(“methodName”))#添加单个测试方法 suite.addTests([ClassName1(“methodName1”),ClassName2(“methodName2”)])#添加多个测试方法

TestSuite需要配合TestRunner才能被执行

3. TestRunner 测试执行器

步骤:

(1)导包 import unittest

(2)实例化 runner = unittest.TextTestRunner()

(3)执行 runner.run(suite) #suite:测试套件名称

下面执行test_cal01.py中,在测试套件中加入test_add03和test_add01,并执行

#testsuite01.py
import unittest
from test_cal01 import MyTest
suite =unittest.TestSuite()#实例化测试测试套件
suite.addTest(MyTest("test_add03"))#添加测试用例————添加单个测试方法
suite.addTest(MyTest("test_add01"))
# suite.addTests([MyTest("test_add03"),MyTest("test_add01")])
runner = unittest.TextTestRunner()#实例化
runner.run(suite)#suite:测试套件名称

4. TestLoader 测试装载器

使用unittest.TestLoader,通过该类下面的discover()方法自动搜索指定目录下指定开头的.py文件

假设当前目录下有n个文件,命名格式为testCal01.py~testCal99.py

#testloader01.py
import unittest
suite=unittest.TestLoader().discover("./",pattern='testCal*.py')
runner=unittest.TextTestRunner().run(suite)

5. Fixture 测试固件

对测试环境进行初始化和销毁

(1)方法级别           def setUp() / def tearDown()  

几个测试函数,执行几次,每个测试函数执行之前都会执行setUp,执行之后都会执行setDown

(2)类级别               def setUpClass() / def tearDownClass()   

测试类运行之前运行一次setUpClass类运行之后运行一次tearDownClass

注意:类方法必须使用@classmethod修饰

(3)模块级别           def setUpModule() / def tearDownModule()   

特性:模块运行之前执行一次setUpModule,运行之后运行一次tearDownModule

#test_fixture.py
from cal01 import *
import unittest
class MyTest(unittest.TestCase):#MyTest继承unittest.TestCasedef setUp(self):print("方法初始化执行")def tearDown(self):print("方法结束执行")@classmethoddef setUpClass(cls):print("类初始化执行")@classmethoddef tearDownClass(self):print("类结束执行")def test_add01(self):assert 3==my_add(1,2)def test_add02(self):assert 3.0==my_add(1.0,2)def test_add03(self):assert 3.0==my_add(1.0,2.0)

附1.运行测试用例的结果

unittest默认根据ASCII码值顺序加载测试用例 (数字与字母的顺序为0~9,A~Z,a~z) 不是按照测试用例的创建顺序从上到下执行

可以由测试套件TestSuite类的addTest()方法添加测试用例控制顺序

附2.测试运行的结果表示

. :一条运行通过的测试用例

F:一条运行失败的测试用例

s:一条运行跳过的测试用例

E:一条运行错误的测试用例

附3.测试断言

断言方法由TestCase父类提供,所以要用self调用

self.assertEqual(a,b)    #判断a==b

self.assertIn(a,b)        #b是否包含a 注意:包含不能跳字符

self.assertTrue(a)        #判断a是否为True

附4.测试跳过

使用方式:(可以修饰方法,也可以修饰类)

#直接将测试函数标记为跳过

@unittest.skip("代码未完成")

#根据条件判断测试函数是否跳过

@unittest.skipIf(condition,reason)

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

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

相关文章

风丘EV能量流测试解决方案 提高电动汽车续航能力

电动汽车(EV)近些年发展迅猛,已被汽车业内普遍认为是未来汽车发展的新方向,但现如今电动汽车仍然存在一些短板,导致其还无法替代传统燃油车。对此,首先想到的肯定就是电动车的续航问题。其实解决电动车续航…

VBA技术资料MF133:隐藏编辑栏及计算字符串

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

centos7 使用docker安装了mongo 怎么设置远程链接,必须使用密码才能连接

docker run -d –name mongodb_container -e MONGO_INITDB_ROOT_USERNAMEroot -e MONGO_INITDB_ROOT_PASSWORDroot -e MONGO_INITDB_DATABASEdataserver -p 27017:27017 \ 无法在mongo容器里编辑文件 如果你无法直接编辑 MongoDB 容器内的配置文件,你可以尝试…

基于java+springboot+vue实现的大学生二手物品交易商城(文末源码+Lw+ppt)23-329

摘 要 二十一世纪我们的社会进入了信息时代,信息管理系统的建立,大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多,而在线管理系统刚好能满足这些需求,在线管理系统突破了传统管理方式的局限性。于是本文针对这…

Java:包装类简单认识泛型

一、包装类 包装类指的是基本数据类型(如int、double等)对应的类类型,我们可以通过包装类直接调用里面的方法! 基本数据类型 包装类 byte Byte short …

09 网络ARP请求,响应,ICMP协议

arp协议_arp请求_arp回应 ICMP包构造ping搜狐服务器参考 #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <linux/if_packet.h> #include <linux/if_ether.h> #include <string.h> #includ…

基于Springboot Vue医院管理系统+数据库脚本+文档(万字)

项目效果视频: 基于Springboot Vue医院管理系统 一、 项目介绍 角色&#xff1a;管理员、患者、医生 基于springboot vue实现的医院管理系统&#xff0c;有管理员、医生和患者三种角色。系统拥有丰富的功能&#xff0c;能够满足各类用户的需求&#xff0c;系统提供了登录和注册…

Day20 代码随想录(1刷) 二叉树

目录 654. 最大二叉树 617. 合并二叉树 700. 二叉搜索树中的搜索 98. 验证二叉搜索树 654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数…

最长公共子序列、LCS算法模型

LCS问题就是给定两个序列A和B&#xff0c;求他们最长的公共子序列。 在求解时&#xff0c;我们会设dp[i][j]表示为A[1 ~ i]序列和B[1 ~ j]序列中&#xff08;不规定结尾&#xff09;的最长子序列的长度。 if(a[i]b[i]) dp[i][j]dp[i-1][j-1]1; else dp[i][j]max(dp[i-1][j],dp…

白话模电:4.耦合、差分、无源滤波、反馈(考研面试常问问题)

一、介绍一下三极管多级放大电路的三种耦合方式及其特点&#xff1f;耦合的目的是什么&#xff1f; 多级放大电路中各放大级之间的连接方式称为耦合方式。常见的耦合方式有三种&#xff1a;阻容耦合&#xff08;RC耦合&#xff09;、直接耦合和变压器耦合。 耦合的目的是将信号…

华南地区日用品电商综合服务商「广州麦和」积极推进数字化,企企通助力企业SRM系统上线

近期&#xff0c;由企企通携手华南地区线上最大的居家清洁&个人护理行业的电子商务综合服务商之一麦和&#xff08;广州&#xff09;实业有限公司&#xff08;以下简称“广州麦和”&#xff09;打造的SRM采购供应链协同系统上线&#xff0c;推进数字化采购管理体系建设&…

el-select 下拉框点击某一禁选选项 按Esc关闭弹窗 下拉框无法收起问题

下面请看详细内容 会出现下图情况 弹窗能正常关闭 但是下拉框选项面板仍然存在 解决思路1&#xff1a; 本来想的是监听dialog的Esc关闭事件 关闭时修改el-select-dropdown的css样式 将display none 这个没实现 解决思路2&#xff1a; 看官网发现有个失焦事件 他手动触发失…

大词汇量高质量3D物体生成需要解决哪些问题?如何解决?

作者:Vallee | 来源:计算机视觉工坊 在公众号「计算机视觉工坊」后台,回复「原论文」可获取论文pdf和代码链接 DiffTF: 基于Transformer的大词汇量3D扩散模型 大词汇量3D物体生成 最近基于扩散模型的3D生成方法大火,但如何生成大量类别且高质量的3D模型还没得到很好地解决…

DARTS-: ROBUSTLY STEPPING OUT OF PERFORMANCE COLLAPSE WITHOUT INDICATORS

DARTS-&#xff1a;增加辅助跳跃连接&#xff0c;鲁棒走出搜索性能崩溃 论文链接&#xff1a;https://arxiv.org/abs/2009.01027 项目链接&#xff1a;GitHub - Meituan-AutoML/DARTS-: Code for “DARTS-: Robustly Stepping out of Performance Collapse Without Indicators…

数据平台“国产替代”掣肘在迁移?奇点云的工业制造实践解读

系列导读 如《“数据要素”三年行动计划&#xff08;2024—2026年&#xff09;》指出&#xff0c;工业制造是“数据要素”的关键领域之一。如何发挥海量数据资源、丰富应用场景等多重优势&#xff0c;以数据流引领技术流、资金流、人才流、物资流&#xff0c;对于制造企业而言是…

【面试题】ES文档写入和读取流程详解

前言&#xff1a;在回答这个问题之前我们先要搞清楚一个问题那就是什么是文档&#xff0c;避免不知所云&#xff01; 一、什么是文档&#xff1f; 在Elasticsearch中&#xff0c;文档&#xff08;Document&#xff09;是最基本的信息单元&#xff0c;用于表示和存储数据。文…

Android 系统应用 pk8签名文件转jks或keystore教程

一、介绍 签名文件对于我们在做应用开发中&#xff0c;经常遇到&#xff0c;且签名文件不仅仅是保护应用安全&#xff0c;还会涉及到应用与底层之间的数据共享和API文件等问题。 在Android中&#xff0c;签名文件同样也存在这个问题。但是android中又区分系统应用和普通应用。系…

C语言 青蛙跳台阶问题

目录 ​编辑 1.问题描述 2.问题分析 3.全部代码 4.结语 1.问题描述 一只青蛙可以一次跳一级台阶&#xff0c;也可以一次跳两级台阶&#xff0c;如果青蛙要跳上n级台阶有多少种跳法&#xff1f; 2.问题分析 当台阶只有一级时&#xff0c;只能跳一级&#xff0c;所以只有一…

用 C++ 编码架构图的最佳用例

统一建模语言&#xff08;UML&#xff09;&#xff0c;作为一种实际应用的语言标准&#xff0c;借助一系列架构图呈现建模软件系统。UML 的出现鼓励了自动化软件工具的开发&#xff0c;有助于自动代码生成。UML 图面向对象系统和软件工具&#xff0c;将静态结构和动态行为以可视…

注册、配置中心-微服务小白入门(2)

Nacos 已经下载安装并且使用了&#xff0c;那么看如何使用&#xff1a; Nacos 注册及配置&#xff0c;以下是一个服务启动后注册到nacos&#xff0c;同时&#xff0c;把该服务的相关配置&#xff0c;写到nacos之中 1、nacos设置 命名空间中&#xff0c;添加对应的服务命名空间…