unittest单元测试2

news2024/11/17 4:59:13

目录

unittest框架解析

构建测试套件

用例的执行顺序

unittest断言

HTML报告生成

异常捕捉与错误截图

数据驱动

🎁更多干货

完整版文档下载方式:


unittest框架解析

unittest 是python 的单元测试框架,unittest 单元测试提供了创建测试用例,测试套件以及批量执行的方案, unittest 在安装pyhton 以后就直接自带了,直接import unittest 就可以使用。

作为单元测试的框架, unittest 也是可以对程序最小模块的一种敏捷化的测试。在自动化测试中,必须需要知道所使用语言的单元测试框架。利用单元测试框架,创建一个类,该类继承unittest的TestCase,这样可以把每个case看成是一个最小的单元, 由测试容器组织起来,到时候直接执行,同时引入测试报告。

构建测试套件

addTest() 的应用
当有多个或者几百测试用例的时候, 这样就需要一个测试容器( 测试套件) ,把测试用例放在该容器中进行执行,unittest 模块中提供了TestSuite 类来生成测试套件,使用该类的构造函数可以生成一个测试套件的实例,该类提供了addTest来把每个测试用例加入到测试套件中。

def createsuite():
suite = unittest.TestSuite()
#将测试用例加入到测试容器(套件)中
suite.addTest(testbaidu1.Baidu1("test_baidusearch"))
suite.addTest(testbaidu1.Baidu1("test_hao"))
suite.addTest(testbaidu2.Baidu2("test_baidusearch"))
return suite

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

makeSuite()和TestLoader()的应用

在unittest 框架中提供了makeSuite() 的方法,makeSuite可以实现把测试用例类内所有的测试case组成的测试套件TestSuite ,unittest 调用makeSuite的时候,只需要把测试类名称传入即可。

TestLoader 用于创建类和模块的测试套件,一般的情况下,使TestLoader().loadTestsFromTestCase(TestClass)来加载测试类。

#手工添加案例到套件,

def createsuite():
suite = unittest.TestSuite()
#将测试用例加入到测试容器(套件)中
suite.addTest(unittest.makeSuite(testbaidu1.Baidu1))
suite.addTest(unittest.makeSuite(testbaidu2.Baidu2))
return suite
'''
suite1 =unittest.TestLoader().loadTestsFromTestCase(testbaidu1.Baidu1)
suite2 = unittest.TestLoader().loadTestsFromTestCase(testbaidu2.Baidu2)
suite = unittest.TestSuite([suite1, suite2])
return suite

``

discover()的应用

discover 是通过递归的方式到其子目录中从指定的目录开始, 找到所有测试模块并返回一个包含它们对象的TestSuite ,然后进行加载与模式匹配唯一的测试文件,discover 参数分别为discover(dir,pattern,top_level_dir=None)

def createsuite():
discover=unittest.defaultTestLoader.discover('../test',pattern='test*.py',top_level_dir=None)
print discover
return discover

用例的执行顺序

unittest 框架默认加载测试用例的顺序是根据ASCII 码的顺序,数字与字母的顺序为: 09,AZ,a~z 。所以, TestAdd 类会优先于TestBdd 类被发现, test_aaa() 方法会优先于test_ccc() 被执行。对于测试目录与测试
文件来说, unittest 框架同样是按照这个规则来加载测试用例。
addTest()方法按照增加顺序来执行
忽略用例的执行

@unittest.skip("skipping")


unittest断言

自动化的测试中, 对于每个单独的case来说,一个case的执行结果中, 必然会有期望结果与实际结果, 来判断该case是通过还是失败, 在unittest 的库中提供了大量的实用方法来检查预期值与实际值, 来验证case的结果, 一般来说, 检查条件大体分为等价性, 逻辑比较以及其他, 如果给定的断言通过, 测试会继续执行到下一行的代码, 如果断言失败, 对应的case测试会立即停止或者生成错误信息( 一般打印错误信息即可) ,但是不要影响其他的case执行。

HTML报告生成

脚本执行完毕之后,还需要看到HTML报告,下面我们就通过HTMLTestRunner.py 来生成测试报告

if __name__=="__main__":
curpath=sys.path[0]
#取当前时间
now=time.strftime("%Y-%m-%d-%H %M %S",time.localtime(time.time()))
if not os.path.exists(curpath+'/resultreport'):
os.makedirs(curpath+'/resultreport')
filename=curpath+'/resultreport/'+now+'resultreport.html'
with open(filename,'wb') as fp:
#出html报告
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'测试报告',description=u'用例执行
情况',verbosity=2)
suite=createsuite()
runner.run(suite)

异常捕捉与错误截图

用例不可能每一次运行都成功,肯定运行时候有不成功的时候。如果可以捕捉到错误,并且把错误截图保存,这将是一个非常棒的功能,也会给我们错误定位带来方便。

def savescreenshot(self,driver,file_name):
if not os.path.exists('./image'):
os.makedirs('./image')
now=time.strftime("%Y%m%d-%H%M%S",time.localtime(time.time()))
#截图保存
driver.get_screenshot_as_file('./image/'+now+'-'+file_name)
time.sleep(1)

数据驱动

之前我们的case都是数据和代码在一起编写。考虑如下场景:
需要多次执行一个案例,比如baidu搜索,分别输入中文、英文、数字等进行搜索,这时候需要编写3个案例吗?有没有版本一次运行?
python 的unittest 没有自带数据驱动功能。所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成。

@ddt
class Baidu1(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome()
self.url="http://www.baidu.com/"
self.driver.implicitly_wait(5)
# self.verificationErrors = []
# self.accept_next_alert = True
def tearDown(self):
self.driver.quit()
# self.assertEqual([], self.verificationErrors)
# @unittest.skip("skipping")
@data("Lisa","张一凡","蒋欣")
def test_baidu1(self,value):
self.driver.get(self.url)
self.driver.find_element_by_id("kw").clear()
self.driver.find_element_by_id("kw") .send_keys(value)
self.driver.find_element_by_id("su") .click()
time.sleep(5)

🎁更多干货


完整版文档下载方式:

这些资料,对于从事【软件测试】等相关工作的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享。

在评论区和我互动交流或者私❤我【软件测试学习】领取即可,拿走不谢。


如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “👍点赞” “✍️评论” “💙收藏” 一键三连哦!

 

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

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

相关文章

怎么把CAJ转换成PDF文件格式?分享这两个方法!

随着互联网的发展,中国知网(CNKI)已成为许多学术研究人员和学生们获取文献资料的重要来源。在CNKI上,常见的文件格式是CAJ(China Academic Journals)。然而,由于个人喜好或特定需求,我们有时会希望将这些CA…

PDF文档转化为HTML网页格式怎么操作?分享这三个方法给大家!

PDF文档作为一种常见的文档格式,广泛应用于各个领域。然而,如果您想将PDF文档直接发布到网站上,或是想在网页上进行展示,您可能需要将PDF转化为HTML格式。在此,我为大家介绍三种将PDF转化为HTML格式的方法。 方法一&am…

mysql语句练习题,创建表create ,枚举中文字符集设置,修改(update)

作业: 1.创建表: 创建员工表employee,字段如下: id(员工编号),name(员工名字),gender(员工性别),salary(员工薪…

d3dx9_43.dll丢失怎么解决(分享三个解决方法)

d3dx9_43.dll是一个Microsoft DirectX的动态链接库文件,它包含了一系列用于图形、音频和输入的功能和接口。它是DirectX 9的一部分,用于提供游戏和其他图形应用程序所需的图形和声音效果。如果计算机中d3dx9_43.dll丢失,会造成很多游戏无法打…

opencv图片根据规则改变颜色

解析 1. 读入图片 2.通道分离 3.像素值在【100,200】之间,赋值128。大于200赋值255,小于100赋值0。 源码 import cv2 img_raw_path"past/unet-test_result0-0-1-0.png" img_rawcv2.imread(img_raw_path) (r,g,b)cv2.split(img_…

运动控制介绍

运动控制介绍 1 介绍1.1 概述1.2 运动控制的基本架构1.3 常见的控制功能1.4 运动控制研究的问题分类位置变化问题周期式旋转速度变化问题 1.5 知识体系1.6 路径规划 和 轨迹规划区别与联系1.7 运动控制系统 2 《运动控制系统》[班华 李长友 主编] 摘要1 绪论1.1 运动控制研究的…

信息系统项目管理师(第四版)教材精读思维导图-第二章信息技术发展

请参阅我的另一篇文章,综合介绍软考高项: 信息系统项目管理师(软考高项)备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 思维导图源文件下载: https://download.csdn.net/download/hanjingjava/88023847 …

SpringBoot 如何使用 EmbeddedDatabaseBuilder 进行数据库集成测试

SpringBoot 如何使用 EmbeddedDatabaseBuilder 进行数据库集成测试 在开发 SpringBoot 应用程序时,我们通常需要与数据库进行交互。为了确保我们的应用程序在生产环境中可以正常工作,我们需要进行数据库集成测试,以测试我们的应用程序是否能…

非线性规划快速入门和练习题集

目录 定义 标准形式 练习题1 练习题2 练习题3 定义 当目标函数或者约束条件中含有非1次项的时候,会出现非线性函数的规划。 标准形式 ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 其中f(x)是标准函数,A,b,Ae…

Basic——C++类型转换(转型操作符详解)

C转型操作符 1.C语言类型转换存在的隐患2.static_cast3.const_cast介绍测试案例 4.dynamic_cast5.reinterpret_cast 1.C语言类型转换存在的隐患 数据丢失:当将一个较大的数据类型转换为较小的数据类型时,可能会导致数据丢失。例如,将一个浮点…

mac M1 安装nacos

背景 m1不支持本地安装,只能用docker : “由于 rocksdb 暂不支持 M1 平台,所以使用 Zulu JDK 的小伙伴们运行 Nacos 2.x 版本会报错,网上通用的解决方案是使用 Oracle JDK 来运行 Nacos 2.x 版本,但对于强迫症的我来说…

计算机网关原理、子网掩码原理(路由器、交换机)

文章目录 网关网关的历史网关的功能网关的原理相关疑问为什么用子网掩码与IP地址进行与运算来确定一个IP地址所属的子网?网关地址是谁定的,是配置路由的人随意定的吗?(配置人员定的)如何正确设置网关地址(路…

java的断言

断言介绍 Java的断言就是一条assert 声明,其中包含了一个布尔表达式。 断言可以被启用或者禁用,默认是禁用的。 断言被启用的情况下,执行到断言的声明,就会计算布尔表达式的值。如果表达式的值为false,那么就会抛出一…

【Elasticsearch】安装elasticsearch

目录 安装elasticsearch 1.部署单点es 1.1.创建网络 1.2.加载镜像 1.3.运行 2.部署kibana 2.1.部署 2.2.DevTools 3.安装IK分词器 3.1.在线安装ik插件(较慢) 3.2.离线安装ik插件(推荐) 1)查看数据卷目录 …

十三、Docker Compose使用和主要功能

学习参考:尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 一、核心概念二、主要功能二、docker compose常用命令三、docker compose 案例3.1 自己写一个微服务模块3.2 用Dockerfile将上面的模块编排(不使用compose)3.3 使用compose编…

滑动平均值滤波(CODESYS ST源代码)

有关滑动平均值滤波算法的详细介绍请查看下面文章链接,这里不再赘述: 博途PLC各种平均值滤波算法对比(SCL+梯形图代码)_模拟量平均值滤波梯形图程序_RXXW_Dor的博客-CSDN博客此文会对比各种滤波算法的优劣,给出具体算法描述和测试代码算术平均值不区分原始数据的质量,特…

高阶组件/react组件复用

也可以用children模式 优化 高阶组件 组件名称相同设置组件名字 效果 解决props丢失 setstate是异步更新的 推荐语法 页面更新完后的回调函数 组件性能优化 1. 2.

WAIC2023会后记

听了3天WAIC的会, 大开眼界,算是上了堂大课。 本次参会的目的是听听AI企业信息化的想法、理论和实践。以进一步探索可能的业务场景。三天的会结束后,留下深刻印象的有如下几点。 大模型当道 2023这次大会的主题成了大模型,谈的…

超链接标签和列表标签

五、超链接标签 href: target: 行内标签,没有href属性和span没区别 有href不写值,跳转当前页面,即刷新效果 写完之后后端数据还没过来,不知道要跳转哪个页面,不想进行刷新页面,加#,叫锚点 回到底…