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.driver
        driver.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.alert
        except NoAlertPresentException as e:
            return False
        return True
    if __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 suite

if __name__ == "__main__":
    suite = createsuite()
     runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)

(2)一个类一个类的添加
makeSuite():只是添加文件里的类,类里的方法不用一个一个的添加。

import unittest
from src0303 import test001, test002

def createsuite():
    suite=unittest.TestSuite()
    suite.addTest(unittest.makeSuite(test001.testCase1))
    suite.addTest(unittest.makeSuite(test001.testCase2))
    return suite

if __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.driver
        driver.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.alert
        except NoAlertPresentException as e:
            return False
        return True
    if __name__ == "__main__ ":
      unittest.main(verbosity=0)

6.HTML报告生成

将控制台结果整理成结果,涉及失败的原因和结果。将HTMLTestRunner.py放到安装python的lib文件夹里。
未完待更新…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于 EKS Fargate 搭建微服务性能分析系统

背景 近期 Amazon Fargate 在中国区正式落地,因 Fargate 使用 Serverless 架构,更加适合对性能要求不敏感的服务使用,Pyroscope 是一款基于 Golang 开发的应用程序性能分析工具,Pyroscope 的服务端为无状态服务且性能要求不敏感&…

mysql数据迁移与同步常用解决方案总结

目录 一、前言 二、数据迁移场景 2.1 整库迁移 2.2 表数据迁移 2.3 mysql版本变更 2.4 mysql数据迁移至其他存储介质 2.5 自建数据到上云环境 2.6 mysql数据到其他国产数据库 三、数据库物理迁移实施方案 3.1 数据库物理迁移概述 3.1.1 物理迁移适用场景 3.1.2 物理…

TCP三次握手

TCP三次握手 文章目录 TCP三次握手1. TCP三次握手过程和状态变迁1. 准备工作2. 进行连接 2. 能把三次握手改为两次握手吗?3. 改为两次握手会出现什么后果?4. 改为四次握手行不行?5. TCP第三次握手失败了怎么办?6. 三次握手是否可以…

TCP四次挥手

TCP四次挥手详解 文章目录 TCP四次挥手详解1. TCP四次挥手过程和状态变迁2. 为什么挥手需要四次?3. 为什么中间的ACK和FIN不可以像三次握手那样合为一个报文段呢?4. 为什么TIME_WAIT等待的时间是2MSL?5. 等待2MSL的意义5.1 保证客户端最后发送…

Linux网络——Shell编程之数组

Linux网络——Shell编程之数组 一、概念二、数组的定义三、Shell数组操作1. 获取数组的所有元素的列表2. 获取数组的所有元素下标3.取数组的元素个数4. 获取数组的某个元素的值5.删除数组某个元素6.删除数组7.数组切片8.数组字符替换9.数组追加元素 四、数组在函数的传参 一、概…

天猫数据分析:2023年Q1天猫净水器品牌销售TOP10排行榜

水质的好坏更是与人们的身体健康密切相关。随着社会经济的发展,居民生活水平提升,人们对饮用水质量、安全性的要求也不断提高,净水器也因此逐渐成为现代生活的必需品。 根据鲸参谋电商数据显示,2023年Q1在天猫平台上,净…

3. SQL底层执行原理详解

一条SQL在MySQL中是如何执行的 1. MySQL的内部组件结构1.1 Server层1.2 Store层 2. 连接器3. 分析器4. 优化器5. 执行器6. bin-log归档 本文是按照自己的理解进行笔记总结,如有不正确的地方,还望大佬多多指点纠正,勿喷。 1. MySQL的内部组件结…

MVC分部视图的使用:Html.Partial/RenderPartial,Html.Action/RenderAction,RenderPage

ASP.NET MVC 里的部分视图,相当于 Web Form 里的 User Control。我们的页面往往会有许多重用的地方,可以进行封装重用。 使用部分视图有以下优点: 1. 可以简写代码。 2. 页面代码更加清晰、更好维护。 在视图里有多种方法可以 加载部分视图&a…

硬盘数据突然消失怎么回事?硬盘数据突然消失怎么找回

硬盘上的数据对每个人都至关重要,它可能是我们的珍贵回忆,多年学习的总结,或者一些不可告人的秘密。而硬盘中的数据可能会在不知情的情况下消失或被删除,这种情况对我们来说十分痛苦和困扰。然而,我们不必担心&#xf…

如何用100天彻底学会Python?

Python 是一门功能强大、易于学习且历史悠久的编程语言。如果你希望在短时间内彻底学会 Python,需要制定一个全面的学习计划,并进行刻意的练习和实践。 以下是一份建议的学习计划,帮助你在 100 天内掌握 Python 技能。 第 1-10 天&#xff…

JavaScript class和继承的原理

(对于不屈不挠的人来说,没有失败这回事。——俾斯麦) class 相关链接 MDN链接 有关类的详细描述 关于构造函数,原型和原型链的说明 类的概述 类是用于创建对象的模板。他们用代码封装数据以处理该数据。JS 中的类建立在原型上…

【Queue新技法】用双数组实现一个队列 C++

目录 1 常规的队列构建2 加入一些限制2-1形式化说明2-2 优化:平衡队列 附录0 双数组或双链表实现队列1 单链表与循环缓冲区实现队列3 参考资料 1 常规的队列构建 到火车站办理退票,排队的人构成队列。注意到有两个关键动作: 入队&#xff0c…

C++类和对象(上)

目录 一、类 1.1 类的引入 1.2 类的定义 1.3 类的访问限定符及封装 1.3.1 类的访问限定符 1.3.2 封装 1.4 类定义方式 1.4.1 声明和定义都放在类体里 1.4.2 类可以声明和定义分离 1.5 类的作用域 1.6 类的实例化 1.6.1 定义 1.6.2 计算类对象的大小 二、this指针…

华为OD机试真题 Java 实现【猜字谜】【2023Q2】

一、题目描述 小王设计了一人简单的清字谈游戏,游戏的迷面是一人错误的单词,比如nesw,玩家需要猜出谈底库中正确的单词。猜中的要求如 对于某个谜面和谜底单词,满足下面任一条件都表示猜中: 变换顺序以后一样的&…

【MySQL】索引

之前的select所采用的方式是遍历数据表进行查找,这种方式效率是比较低的,尤其是数据表汇总数据量比较大的时候,于是便有了索引,MySQL中的索引的作用就是为了快速获取数据 文章目录 1.索引简介2.索引的数据结构2.1 B-Tree2.2 Hash索引 3.索引的分类4.索引的语法5.SQL性能分析6.…

字节跳动发放年终奖,远超预期~

最近一段时间,国内互联网大厂接连公布年终奖情况,整个后厂村都洋溢在春节般的喜庆气氛里。 虽然由于各种各样的顾虑(主要是人员流失问题),大部分公司都将年终奖发放时间调整到了年中,但好饭不怕晚&#xf…

Java笔记_17(异常、File)

Java笔记_17 一、异常1.1、异常体系介绍1.2、编译时异常和运行时异常1.3、异常的作用1.4、异常的处理方式1.5、捕获异常的灵魂四问1.6、异常中的常见方法1.7、抛出处理1.8、异常-练习(键盘录入数据)1.9、自定义异常 二、File2.1、File的概述和构造2.2、F…

uboot 启动内核代码分析

0、uboot和内核区别 uboot的本质就是一个复杂点的裸机程序。内核本身也是一个"裸机程序“,和uboot、和其他裸机程序并没有本质区别。 区别就是操作系统运行起来后在软件上分为内核层和应用层,分层后两层的权限不同,在内存访问和设备操作…

离散化(算法)

目录 一、离散化的概念二、离散化的模板三、离散化的应用题目思路分析代码实现 一、离散化的概念 离散化是一种将连续数据映射到离散值的过程。它通常用于优化某些算法,尤其是与区间查询相关的问题。 在离散化过程中,我们将一组实数转换为一组整数&#…

卫星下行链路预算模型(未完待续)

卫星下行链路预算模型 1. 接收端天线模型 简单一些,考虑地球同步卫星多波束通信系统,波束指向固定。波束数量为 N b N_b Nb​. 波束中心在地面的位置可以用经度向量和纬度向量表示: P ⃗ l g [ l 1 , l 2 , . . . , l N b ] P ⃗ l a [ a 1 , a 2 …
最新文章