python单元测试框架(测试固件、批量执行)

python测试框架
在Python语言中应用最广泛的单元测试框架是unittest和pytest,unittest属于标准库,只要安装了Python解释器后就可以直接导入使用了,pytest是第三方的库,需要单独的安装。

1.白盒测试原理
在软件架构的层面来说,测试最核心的步骤就是在软件开发过程中。就软件本身而言,软件的行为或者功能是软件细节实现的产物,这些最终是交付给用户的东⻄。所以在早期执行测试的系统有可能是一个可测试和健壮的系统,它会带来为用户提供的功能往往是让人满意的结果。因此给予这样的⻆度,开始执行测试的最佳方法是来自源代码,也就是软件编写的地方以及开发人员。由于源代码是对开发人员是可⻅的,这样的一个测试过程我们可以称为白盒测试

2.自动化测试用例编写
 

3.unittest实战

   unittest各个组件的介绍

testCase测试⽤例:测试类继承unittest模块中的TestCase类后,依据继承的这个类来设置⼀个新的测试⽤例类和测试⽅法。
测试固件:测试固件表示⼀个测试⽤例或者多个测试以及清理⼯作所需要的设置或者准备。初始化合情理
testSuite测试套件:测试套件顾名思义就是相关测试⽤例的集合。在unittest中主要通过TestSuite类提供对测试套件的⽀持。
testRunner测试运⾏:管理和运⾏测试⽤例的对象。
assert测试断⾔:对所测试的对象依据返回的实际结果与期望结果进⾏断⾔校验
测试结果:测试结果类管理着测试结果的输出,测试结果呈现给最终的⽤户来反馈本次测试执⾏的结果信息。
自动化测试用例要素包含:

1、前提条件 setUp()

2、测试步骤

3、结果验证

4、清理 tearDown()

4.unittest测试固件详解:
在unittest中测试固件依据方法可以分为两种执行方式,一种是测试固件只执行一次,另外一种是测试固件每次都执行,下面依据具体的案例来讲解二者

1.测试固件每次均执行

from selenium import webdriver
import unittest
class BaiduTest(unittest.TestCase):def setUp(self) -> None:self.driver=webdriver.Chrome()self.driver.get('http://www.baidu.com')self.driver.maximize_window()self.driver.implicitly_wait(30)def tearDown(self) -> None:self.driver.quit()def test_baidu_title(self):'''百度测试:验证百度首页的title'''# assert self.driver.title=='百度一下,你就知道'self.assertEqual(self.driver.title,'百度一下,你就知道')def test_baidu_url(self):'''百度测试:验证百度首页的url'''assert self.driver.current_url=='https://www.baidu.com/'def test_baidu_video(self):'''百度测试:验证点击视频后跳转到视频的页面'''nowhandler=self.driver.current_window_handleself.driver.find_element_by_link_text('视频').click()allhandlers=self.driver.window_handlesfor handler in allhandlers:if handler!=nowhandler:self.driver.switch_to.window(handler)self.assertTrue(self.driver.current_url.startswith('https://haokan.baidu.com/?sfrom=baidu-top'))def test_baidu_map(self):'''百度测试:验证点击地图后跳转到地图的页面'''nowhandler=self.driver.current_window_handleself.driver.find_element_by_link_text('地图').click()allhandlers=self.driver.window_handlesfor handler in allhandlers:if handler!=nowhandler:self.driver.switch_to.window(handler)self.assertTrue(self.driver.current_url.startswith('https://map.baidu'))if __name__ == '__main__':unittest.main(verbosuty=2)

执行如上的代码后,它的顺序为:测试固件-->测试用例,测试固件-->测试用例

2.测试固件只执行一次

使用的是类方法,这样测试固件只会执行一次的,⻅案例的代码:

from selenium import webdriver
import unittestclass BaiduTest(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:cls.driver=webdriver.Chrome()cls.driver.maximize_window()cls.driver.get('http://www.baidu.com')cls.driver.implicitly_wait(30)@classmethoddef tearDownClass(cls) -> None:cls.driver.quit()def test_baidu_title(self):'''百度测试:验证百度首页的title'''# assert self.driver.title=='百度一下,你就知道'self.assertEqual(self.driver.title,'百度一下,你就知道')def test_baidu_url(self):'''百度测试:验证百度首页的url'''assert self.driver.current_url=='https://www.baidu.com/'def test_baidu_video(self):'''百度测试:验证点击视频后跳转到视频的页面'''nowhandler=self.driver.current_window_handleself.driver.find_element_by_link_text('视频').click()allhandlers=self.driver.window_handlesfor handler in allhandlers:if handler!=nowhandler:self.driver.switch_to.window(handler)self.assertTrue(self.driver.current_url,'https://haokan.baidu.com/?sfrom=baidu-top')self.driver.close()self.driver.switch_to.window(nowhandler)def test_baidu_map(self):'''百度测试:验证点击地图后跳转到地图的页面'''nowhandler=self.driver.current_window_handleself.driver.find_element_by_link_text('地图').click()allhandlers=self.driver.window_handlesfor handler in allhandlers:if handler!=nowhandler:self.driver.switch_to.window(handler)self.assertTrue(self.driver.current_url.startswith('https://map.baidu'))self.driver.close()self.driver.switch_to.window(nowhandler)unittest.main(verbosity=2)

5.测试用例执行顺序详解
在unittest中,测试点的执行顺序是依据ascill码来执行的,也就是说根据ASCII码的顺序加载,数字与字母的顺序为:0-9,A-Z,a-z,所以以A开头的测试用例方法会优先执行,以a开头会后执行。也就是根据数字的大小从小到大执行的,切记数字的大小值的是不包含test,值的是test后面的测试点的数字大小,

6.verbosity的详解
在unittest中,执行的时候默认是1,也就是unittest.main(verbosity=1),在verbosity有三个参数,分别是0,1,2,代表的意思具体如下:

0(静默模式):仅仅获取总的测试用例数以及总的结果

1(默认模式)

2(详细模式):测试结果会显示每个测试用例的所有相关信息

7.测试用例注意事项:
            1、在⼀个测试类⾥⾯,每⼀个测试⽅法都是以test开头的,test不能是中间或者尾部,必须是开头,建议test_

2、每⼀个测试⽤例⽅法都应该有注释信息,这样在测试报告就会显示具体的测试点的检查点

3、在⾃动化测试中,每个测试⽤例都必须得有断⾔,⽆断⾔的⾃动化测试⽤例是⽆效的

4、最好⼀个测试⽤例⽅法对应⼀个业务测试点,不要多个业务检查点写⼀个测试⽤例

5、如果涉及到业务逻辑的处理,最好把业务逻辑的处理⽅法放在断⾔前⾯,这样做的⽬的是不要因为业务逻辑执⾏错误导致断⾔也是失败

6、测试⽤例名称最好规范,有约束

7、是否先写⾃动化测试的测试代码,在使⽤⾃动化测试⽅式写,本⼈觉得没必要,毕竟能够做⾃动化测试的都具备了功能测试的基本⽔平,所以没必要把⼀个业务的检查点写多次,浪费时间和⼈⼒成本。

8.测试套件详解
按测试类执行

from selenium import webdriver
import unittestclass BaiduTest(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:cls.driver=webdriver.Chrome()cls.driver.maximize_window()cls.driver.get('http://www.baidu.com')cls.driver.implicitly_wait(30)@classmethoddef tearDownClass(cls) -> None:cls.driver.quit()def test_baidu_title(self):'''百度测试:验证百度首页的title'''# assert self.driver.title=='百度一下,你就知道'self.assertEqual(self.driver.title,'百度一下,你就知道')def test_baidu_url(self):'''百度测试:验证百度首页的url'''assert self.driver.current_url=='https://www.baidu.com/'def test_baidu_video(self):'''百度测试:验证点击视频后跳转到视频的页面'''nowhandler=self.driver.current_window_handleself.driver.find_element_by_link_text('视频').click()allhandlers=self.driver.window_handlesfor handler in allhandlers:if handler!=nowhandler:self.driver.switch_to.window(handler)self.assertTrue(self.driver.current_url,'https://haokan.baidu.com/?sfrom=baidu-top')self.driver.close()self.driver.switch_to.window(nowhandler)def test_baidu_map(self):'''百度测试:验证点击地图后跳转到地图的页面'''nowhandler=self.driver.current_window_handleself.driver.find_element_by_link_text('地图').click()allhandlers=self.driver.window_handlesfor handler in allhandlers:if handler!=nowhandler:self.driver.switch_to.window(handler)self.assertTrue(self.driver.current_url.startswith('https://map.baidu'))self.driver.close()self.driver.switch_to.window(nowhandler)if __name__ == '__main__':# #按测试类来进行执行 调用TestLoader()当中的loadTestsFromTestCase的方法suite=unnittest.TestLoader().loadTestsFromTestCase(baiduTest)unnitest.TextTestRunner().run(suite)

按测试模块执行:

from selenium import webdriver
import unittestclass BaiduTest(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:cls.driver=webdriver.Chrome()cls.driver.maximize_window()cls.driver.get('http://www.baidu.com')cls.driver.implicitly_wait(30)@classmethoddef tearDownClass(cls) -> None:cls.driver.quit()def test_baidu_title(self):'''百度测试:验证百度首页的title'''# assert self.driver.title=='百度一下,你就知道'self.assertEqual(self.driver.title,'百度一下,你就知道')def test_baidu_url(self):'''百度测试:验证百度首页的url'''assert self.driver.current_url=='https://www.baidu.com/'def test_baidu_video(self):'''百度测试:验证点击视频后跳转到视频的页面'''nowhandler=self.driver.current_window_handleself.driver.find_element_by_link_text('视频').click()allhandlers=self.driver.window_handlesfor handler in allhandlers:if handler!=nowhandler:self.driver.switch_to.window(handler)self.assertTrue(self.driver.current_url,'https://haokan.baidu.com/?sfrom=baidu-top')self.driver.close()self.driver.switch_to.window(nowhandler)def test_baidu_map(self):'''百度测试:验证点击地图后跳转到地图的页面'''nowhandler=self.driver.current_window_handleself.driver.find_element_by_link_text('地图').click()allhandlers=self.driver.window_handlesfor handler in allhandlers:if handler!=nowhandler:self.driver.switch_to.window(handler)self.assertTrue(self.driver.current_url.startswith('https://map.baidu'))self.driver.close()self.driver.switch_to.window(nowhandler)if __name__ == '__main__':# 按模块来进行执行suite = unnittest.TestLoader().loadTestsFromModule('test_baidu_class.py')unnitest.TextTestRunner().run(suite)

9.批量执行所有的测试用例

import unittest
import osdef getTests():'''加载所有的测试模块'''suite=unittest.TestLoader().discover(#找到被执行模块的路径start_dir=os.path.dirname(__file__),#加载路径下所有以test_开头的测试模块的文件pattern='test_*.py' #正则表达式)return suitedef runSuite():unittest.TextTestRunner().run(getTests())runSuite()

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

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

相关文章

红日ATT&CK VulnStack靶场(三)

网络拓扑 web阶段 1.扫描DMZ机器端口 2.进行ssh和3306爆破无果后访问web服务 3.已知目标是Joomla,扫描目录 4.有用的目录分别为1.php 5.configuration.php~中泄露了数据库密码 6.administrator为后台登录地址 7.直接连接mysql 8.找到管理员表,密码加密了…

“多测合一”生产软件-不动产测量(不动产权籍调查测绘软件RESS),房地一体化测量由请湖南来示范

湖南“多测合一”生产软件-不动产测量软件,提取码:RESShttps://pan.baidu.com/s/1OqakLJICIP6buNiZ6j9Npw?pwdRESS 2020年7 月,国务院办公厅印发《 国务院办公厅关于进一步优化营商环境 更好服务市场主体的实施意见》 (国办发〔 …

【网络】高级IO

目录 一、五种IO模型 1、阻塞IO 2、非阻塞IO 3、信号驱动 4、IO多路转接 5、异步IO 6、总结 二、高级IO重要概念 1、同步通信与异步通信 2、阻塞 vs 非阻塞 三、非阻塞IO 1、fcntl 2、实现函数SetNoBlock 四、IO多路转接select 1、select 1.1、参数解释 1.2、…

Unity实现异步加载场景

一:创建UGUI 首先我们在LoginCanvas登入面板下面创建一个Panel,取名为LoadScreen,再在loadScreen下面创建一个Image组件,放置背景图片,然后我们再在lpadScreen下面继续创建一个Slider,这个是用来加载进度条的,我们改名为LoadSlid…

简单入门seleniumUI自动化测试

目录 一、selenium的介绍 二、selenium的原理 三、selenium的八种元素定位的方法 1、ID定位: 2 、name定位: 3、class定位: 4、tag定位: 5、link_text定位: 6、partial_link_text定位: 7、css定位…

航顺HK32F030M怎么样 航顺HK32F030M应用领域介绍

航顺HK32F030M是一款基于ARM Cortex-M0内核的32位微控制器,具有高性能、低功耗、经济适用等特点。以下是颖特新关于航顺HK32F030M的详细介绍: 一、性能表现 航顺HK32F030M采用ARM Cortex-M0内核,主频最高可达64MHz,具有出色的计算…

反编译微信小程序,可导出uniapp或taro项目

微信小程序反编译(全网通用) 微信小程序反编译 反编译主要分为四个阶段 操作流程 1. node.js安装 2. node安装模块 3. 开始反编译 4. 导入到微信开发者工具既可运行 微信小程序反编译 当碰到不会写的小程序功能时,正好看到隔壁小程序有类似…

FPGA应用学习笔记--时钟域的控制 亚稳态的解决

时钟域就是同一个时钟的区域,体现在laways语句边缘触发语句中,设计规模增大就会导致时钟不同步,有时差,就要设计多时钟域。 会经过与门的延时产生的新时钟域,这种其实不推荐使用,但在ascl里面很常见 在处理…

2023国赛数学建模C题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

SpringCloud实用篇5——elasticsearch基础

目录 1.初识elasticsearch1.1 了解ES1.1.1 elasticsearch的作用1.1.2 ELK技术栈1.1.3 elasticsearch和lucene1.1.4 总结 1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排 1.3 es的一些概念1.3.1 文档和字段1.3.2 索引和映射1.3.3 mysql与elasticsearch 1.4 部署单点…

单模光纤模场强度分布以及高斯近似的MATLAB仿真

已知纤芯半径5um,数值孔径NA 0.1,波长 用波长和数值孔径计算归一化常数V 之前我们在单模光纤特征方程及其MATLAB数值求解中,用线性关系拟合过V和W,这里直接用拟合结果 U用V和W计算 clc clear close alla 5e-6;%纤芯半径 NA …

Stable Diffusion + AnimateDiff运用

1.安装AnimateDiff,重启webui 2.下载对应的模型,最好到c站下载,google colab的资源有可能会出现下载问题 https://civitai.com/models/108836 3.下载完成后,你可以随便抽卡了。 抽卡完成后固定seed,然后打开这个插件&…

基于深度信念网络的西储大学轴承故障分类识别,基于EMD+DBN的西储大学轴承故障识别,LCD+DBN,LMD+DBN

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) (EMD,LCD,LMD)+DBN的深度信念网络的西储大学轴承故障分类识别 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类…

C数据结构与算法——常见排序算法时间复杂度比较 应用

实验任务 (1) 掌握常见比较排序算法的实现; (2) 掌握常用比较排序算法的性能及其适用场合。 实验内容 (1) 平均时间复杂度O(n2)和O(nlog2n)的算法至少各选两种实现; (2) 待排序的无重复关键字存放在一维整型数组中,数量为60000个&#xff…

springboot使用configtree读取树形文件目录中的配置

文章目录 一、介绍二、演示环境三、项目演示1. 配置文件2. 导入配置3. 检测配置属性 四、应用场景五、源码解析1. ConfigTreeConfigDataLocationResolver2. ConfigTreeConfigDataLoader 六、总结 一、介绍 相信绝大多数使用springboot开发项目的朋友们在添加配置时&#xff0c…

同步_异步请求和Ajax并利用axios框架简化

目录 同步和异步 原生的Ajax 创建XMLHttpRequest对象 常用方法 常用属性 axios框架 同步和异步 同步请求:发送请求后,会做出回应,回应的内容会覆盖浏览器中的内容,这样会打断其他正常的操作,显得不太友好&#…

汉诺塔:传说中的智慧游戏

文章目录 前言规则概述数学原理核心Java代码实现结语 前言 汉诺塔(Hanoi Tower),又称汉诺塔游戏,是源自印度古老传说的经典智力游戏。这个谜题的起源被认为与印度的寺庙有关,是由僧侣们传承的智慧游戏。汉诺塔塔座包含…

点击base64编码过的图片在另一个页面显示

开始的代码是这样的,新开一个窗口显示经过base64编码后的图片,但是url太长了显示失败。 openImage(imgSrc) {window.open(imgSrc, _blank); }, 解决方法:这段代码接收一个Base64编码的图像数据,把它转换为一个Blob对象。 Blob&…

LabVIEW使用边缘检测技术实现彩色图像隐写术

LabVIEW使用边缘检测技术实现彩色图像隐写术 隐写术是隐藏信息的做法,以隐瞒通信的存在而闻名。该技术涉及在适当的载体(如图像,音频或视频)中插入秘密消息。在这些载体中,数字图像因其在互联网上的广泛使用而受到青睐…

1+X Web前端开发职业技能等级证书建设方案

一 、系统概述 1X Web前端开发技术是计算机类专业重要的核心课程,课程所包含的教学内容多,实践性强,并且相关技术更新快。传统的课堂讲授模式以教师为中心,学生被动式接收,难以调动学生学习的积极性和主动性。混合式教…