selenium——unittest框架

news2024/12/25 9:06:58

目录

  • 一、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.coloradmin.cn/o/508951.html

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

相关文章

第十三章_Redis中的BigKey

MoreKey案例 大批量往redis里面插入2000W测试数据key Linux Bash下面执行&#xff0c;插入100W # 生成100W条redis批量设置kv的语句(keykn,valuevn)写入到/tmp目录下的redisTest.txt文件中 for((i1;i<100*10000;i)); do echo "set k$i v$i" >> /tmp/redi…

使用Eclipse +SpotBugs 检测代码弱点

文章目录 SpotBugs 插件的安装SpotBugs 的使用弱点扫描弱点查看的视图SpotBugs 是分析Java代码弱点的静态分析工具,SpotBugs提供了Eclipse的插件使用方式,在Eclipse 中安装插件之后就可以坚持Java代码的弱点了。 SpotBugs 插件的安装 SpotBugs 的插件安装主要有两种方式 在插…

8款 Vue 富文本编辑器

文章目录 TinyMCE - 富文本编辑器里的 Word &#xff0c;功能想不到的丰富tiptap - 多人在线实时协同编辑CKEditor 5 - 开源免费可商用&#xff0c;行内编辑Quill - 易扩展、轻量级二开、代码高亮好用Froala - 插件丰富&#xff0c;UI友好&#xff0c;编辑器里的苹果summernote…

Android系统原理性问题分析 - 消息传递机制的分析(Looper 和 Handler)

声明 在Android系统中经常会遇到一些系统原理性的问题&#xff0c;在此专栏中集中来讨论下。比如&#xff1a;Android为了线程安全&#xff0c;不允许在UI线程外操作UI&#xff0c;很多时候做界面刷新都需要通过Handler来通知UI组件更新。此篇参考一些博客和书籍&#xff0c;不…

数据库sql语句练习(三)

例题&#xff1a; ●哪些项目消费了不止一次 select distinct name消费了不止一次的项目 from shopping group by name having count(*)>1 注&#xff1a;加disdinct去除重复的返回值&#xff0c;不加默认为all ●按照不同消费项目的总金额从高到低的顺序&#xff0c;列出不…

PMP证书“扫盲”时间2023年考证人快看过来

二&#xff0c;PMP报考指南 学历与工作经验要求&#xff1a; 本科及以上学历&#xff0c;三年或以上的项目管理工作经验&#xff1b; 专科及以上学历&#xff0c;五年或以上的项目管理工作经验。 项目管理培训&#xff1a;35小时以上的项目管理教育/培训。 备注&#xff1…

Vue3-黑马(一)

目录&#xff1a; &#xff08;1&#xff09;vue3-基础-环境准备 &#xff08;2&#xff09;vue3-基础-入门案例 &#xff08;3&#xff09;vue3-基础-main.ts &#xff08;1&#xff09;vue3-基础-环境准备 vue3的技术选型&#xff0c;它提供了两套API&#xff0c;一个是选…

面试题——selenium原理解析、appium原理解析

这里写目录标题 一、selenium原理解析1、目的2、技术点3、Selenium 介绍4、Selenium 自动化测试5、为什么能够支持这么多种浏览器&#xff1f;6、Selenium 工作原理 二、appium原理解析1、目的2、技术点3、Appium 介绍4、Appium 工作原理 一、selenium原理解析 1、目的 了解是…

远程桌面连接出现了内部错误怎么解决?

远程桌面连接是一种非常方便的工具&#xff0c;可以让用户从远程访问其他计算机的桌面界面。但是&#xff0c;有时候在连接远程桌面时会出现内部错误&#xff0c;导致无法连接或者连接后无法正常使用。在本文中&#xff0c;我们将会讨论远程桌面连接出现内部错误的原因和解决方…

CRMEB知识付费二次开发 加密阿里云视频MP4点播链接为m3u8格式 hls blob协议

只有添加分发加速的域名才能使用HLS加密&#xff0c;同时也要做HTTPS证书添加&#xff0c;不然也会报错。 1、这是电脑端视频播放页面效果 2、这个手机端H5视频播放页面效果 3、在网站后台上传你的视频内容 4、上传完之后可以进行预览 5、在阿里云控制台设置就好自己的转码模…

舞台特效-第14届蓝桥杯省赛Scratch初级组真题第2题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第131讲。 舞台特效&#xff0c;本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程初级组真题第2题&#xf…

SRVCC流程及异常场景介绍

SRVCC(Single Radio Voice Call Continuity)用于在LTE和3G网络之间,实现VoLTE电话无缝切换到3G网络。用户正在使用VoLTE电话进行通话,当他们移出了LTE网络覆盖范围,SRVCC技术会自动将电话切换到3G网络,从而保持通话不中断。 关键流程如下 UE(用户设备)向MME(移动管理…

Python 密码破解指南:5~9

协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【OpenDocCN 饱和式翻译计划】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 收割 SB 的人会被 SB 们封神&#xff0c;试图唤醒 SB 的人是 SB 眼中的 SB。——SB 第三定律 五、凯…

RHCSA之基础配置

目录 RHCSA之基础配置 快照设置 1.快照的作用 2.创建快照 3.删除快照 界面图标 Boxes --- 命令行字符形状工具 Calculator --- 计算器 Cheese --- 摄像头 Files --- 文件 FireFox --- 火狐浏览器 Red Hat Subscription Manager --- red hat订阅经理 Settings --- 设…

车载铁路M12工业交换机 3U 轨道交通板卡交换机设计方案

支持双电源冗余 支持Bypass 专门为轨道交通应用设计和制造的以太网数据通信设备 根据IEC61375-2-5和IEC61375-2-3协议实现的列车级骨干以太网核心设备 中国铁路 产品认证 XM-5145工业交换机是专为轨道交通、船载、车载等恶劣环境设计开发的二层网管型交换机。产品设计符合轨…

Java学习(11):Java实现图书馆书库管理系统

接上次博客&#xff1a;Java学习&#xff08;10&#xff09;多接口、接口的继承、抽象类和接口的区别、Object类【toString 、equals、hashcode】、接口实例 【compareTo、clone 】、浅拷贝和深拷贝、内部类_di-Dora的博客-CSDN博客 我们要想完成这个书库管理系统&#xff0c;…

MySQL基础(十七)触发器

在实际开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;有 2 个或者多个相互关联的表&#xff0c;如商品信息和库存信息分别存放在 2 个不同的数据表中&#xff0c;我们在添加一条新商品记录的时候&#xff0c;为了保证数据的完整性&#xff0c;必须同时在库存表中添加…

VMware ESXi 7.0 U3m Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

ESXi 7 U3 标准版集成 Intel 网卡、USB 网卡 和 NVMe 驱动 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-7-u3-sysin/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2023-05-03&#xff0c;发布 ESXi 7.0U…

8-1HBase的安装与简单操作

目录 第1关&#xff1a;Hbase数据库的安装 代码如下&#xff1a; 第二关&#xff1a;创建表 首先要启动&#xff1a;hbase shell 1、create “表名” , ”列族名” 新建一个表 2、list 列出hbase中存在的所有表 代码测试&#xff1a; 第三关&#xff1a;添加数据、…

加解密技术了解

常用的对称加密算法&#xff1a; 对称算法&#xff0c;指加密和解密使用相同密钥的加密算法&#xff0c;对称加密算法用来对敏感数据等信息进行加密。 1). DES算法 2). 3DES算法 3). AES算法 4). TDEA算法 5). Blowfish算法 6). RC5算法 7). IDEA算法 三种常用对称算法…