基于junit4搭建自定义的接口自动化测试框架

news2024/9/30 15:21:24

随着业务的逐步稳定,对于接口的改动也会逐渐变少。更多的是对业务逻辑的优化,功能实现的完善。对于测试来说,重复繁琐的功能测试不仅效率低下,而且耗费一定的人力资源。笔者支持的信息流业务下的一个图文管理平台就是一个功能较为完善,系统较为稳定的后台平台。每次平台新增一些小的功能,或者对某些模块做优化时,都会一定程度上影响其他模块。每次回归测试,甚至比新增的功能测试点还耗时,而且还不敢保证没有漏测的地方。因此,如何提升测试效率,保证回归测试的全面性和准确性,接口自动化测试是一种有效的手段。目前,有不少成熟的接口自动化测试框架可供使用,如junit4,httprunner等,不过,这些框架并不能满足所有的业务场景。因此,为了能够更灵活的将这些框架应用在具体的业务场景下,同时也进一步加深对框架的理解,这就有必要扩展这些框架,定义业务测试所需要的测试行为。基于此,笔者选择junit4框架,就如何扩展并搭建起一个自定义测试行为的接口自动化框架,和大家聊聊。

为什么是junit4框架?junit4作为一个开源的单元测试框架,正迅速成为java单元测试的标准框架。C++,python,php等语言都有了对应的xunit框架,这就便于语言之间的切换,降低了学习成本。此外,junit4便于二次开发,在其基础之上能够很容易的扩展框架。junit4的代码量也不是很大,以其高密度的设计模式和灵活性使得大家对junit框架评价很高。最后,junit开源社区也能够为初学者提供不错的学习文档以及问题解答。当然,由于笔者常使用java语言,这也缩小了选择范围。

在搭建测试框架之前,我们需要搞明白,接口自动化测试框架应该由哪些部分构建。一般情况下,接口自动化测试框架由数据驱动、接口执行驱动、调度器、结果验证以及结果报告五部分组成。接口常指应用程序编程接口,具体表现形式如:http接口请求、dubbo接口请求等。所以,接口执行驱动就是涉及http或者https协议的请求构建。那么数据驱动又是什么了,其实就是测试用例集合的管理,在测试运行时,用来加载成可执行的测试用例。接着,所谓的调度器则是将数据驱动和接口执行驱动组合起来的桥梁,简单来说,就是将http等接口的请求功能和测试数据结合起来,并执行。最后,结果验证以及结果报告不难理解,主要用于验证预期结果并将测试结果展现出来的模块。在初步了解了接口自动化测试框架搭建的五个模块后,接下来以junit4为基础框架,基于上述五个模块维度去展开讨论如何搭建接口自动化测试框架。

既然选择了junit4框架作为基础扩展框架,那么就有必要对junit4的工作原理有一定的了解。junit4工作原理本身涉及到很多知识,光从源码分析就能写出长篇大论。本文重点则在于如何扩展junit4框架,以搭建自定义的接口自动化测试框架。因此,接下来对其工作原理做出简要的介绍,以便大家快速进入状态。简单来说,junit4通过FrameworkMethod类去定义需要运行的测试用例,然后调用BlockJUnit4ClassRunner类中的computeTestMethods()方法加载出定义好的测试用例。接着,调用BlockJUnit4ClassRunner类中的methodInvoker()方法,触发测试用例的真正执行单元Statement,通过调用该执行单元类的evaluate()方法,执行具体的case。最后,调用Assert类中相关方法对测试用例中的预期结果做对比验证,获取测试用例运行结果。到此,junit4的基本原理介绍完毕。细心的朋友们会发现,上面介绍的几个基础类一定大有用处。事实上,对于上述基础类的继承与方法覆写,就可以轻松实现对junit4框架的扩展。

数据驱动作为管理测试用例并提供测试数据的源头,需要直观、便于扩展,便于维护。常见的测试用例管理有excel、xml、数据库等形式,这里,笔者选择excel作为管理测试用例数据的数据驱动源,是因为在excel上便于维护和扩展测试用例,而且,能够将测试用例更好地融入到笔者搭建的web平台中,以实现友好的前后端交互。Excel作为数据驱动的选择,如何管理测试用例了,这里提供两种方案。方案一:以每个excel文件为单元,作为一个接口的测试用例集合;在每个文件中,每行记录作为一个具体的测试用例,表示一个具体的业务测试场景;具体来说,每行记录包含接口的url、请求类型、请求参数、预期结果等。方案二:一个excel文件作为所有接口的测试用例集合,excel文件中的第一个sheet表格中每行记录表示一个接口的测试用例集,然后每个接口的测试用例集中具体的业务测试场景对应于excel中剩余每个sheet表格。当然,选择可以更多,这个大家可以自行根据需要扩展。数据驱动一个重要功能就是将excel中的具体业务测试场景加载成可执行的测试方法,这时就需要扩展junit4框架的FrameworkMethod类,自定义出我们需要执行的测试用例方法,也就是将excel中的每行记录定义成一个TestCase,每个接口对应的所有测试用例对应为一个TestSuite集。从下方源码中可以看出,TestCase即相当于junit4中的测试方法。

事实上,每个TestCase对应着一个具体的http请求,通过组合不同的参数,以期验证不同的业务场景。因此,接口执行驱动就是对不同的TestCase代表的url执行http请求。前面提到过,测试用例的真正执行单元是Statement类,因此,只需要继承Statement类,覆写唯一的evaluate()方法,在evaluate()方法中执行http请求,需要注意的是,我们需要将http请求具体分为get和post请求,具体的请求类型对应着不同的测试用例。

明确数据驱动和接口执行驱动之后,接着需要将所有的测试用例集和http请求结合起来,以执行接口测试,这里就涉及到调度器的概念了。调度器主要是将数据驱动加载的TestSuite集生成Junit4框架需要的执行器runner。通过调用runner的run()方法,遍历runnner以生成所有的TestCase。然后,针对每个TestCase执行覆写的methodInvoker ()方法,在 methodInvoker ()中生成每个TestCase所需要的所有执行单元statements,statements包含测试执行前数据准备、http请求执行以及测试执行后数据清理等工作。如上述可知,通过继承BlockJUnit4ClassRunner类自定义需要执行接口测试的runner。其中,覆写computeTestMethods(),生成需要执行的所有TestCase;然后,覆写methodInvoker,针对生成的TestCase指定需要执行的接口执行驱动XStatement。

最后,结果验证以及结果报告是很重要的环节。接口自动化测试的意义就是通过自动化测试手段,对系统进行大量回归测试,验证测试结果,从而定位出bug。对于大批量的回归测试,将测试结果统计出来,对于问题分析有很大的帮助,所以一份简单明了的结果报告很重要。对于结果验证,最简单的一种思路就是利用assertEquals去对指定字段的预期结果和实际结果做对比验证。此外,可以针对每个测试用例维护一份完整准确的运行结果,每次只需将实际运行的结果与其进行对比。结果报告需要提供运行测试用例的总数,本次执行成功的用例总数以及失败的用例总数;对于失败的用例,需要给出失败的原因;将所有的这些点透传到前端直观的展示出来即可。

是时候总结一下了,本文从数据驱动、接口执行驱动、调度器、结果验证以及结果报告五个维度讲解了如何基于junit4框架去搭建自定义化的接口自动化测试框架。逻辑不复杂,大家可以按照这个思路去动手尝试一下。为了让大家有个直观的概念,下面以流程图的形式为大家呈现出自定义的接口自动化框架扩展及运行原理。

一个接口自动化框架需要实现的东西不限于上面的五部分,包括数据准备、数据清理、请求参数的加签验签,数据库的操作与结果验证、mock的实现等等。但是,基于上面的思路,可以让大家能够轻松的搭建出自定义的测试框架,剩余的只需不断的完善。最后想要说的是:“纸上得来终觉浅,绝知此事要躬行”。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

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

相关文章

Elasticsearch:ES|QL 的限制

尽管 ES|QL 带来性能及使用上的便捷,在实际的使用中,它还是有一些限制。在今天的文章中,我们来列举它的一些限制。 结果集大小限制 默认情况下,ES|QL 查询最多返回 500 行。 你可以使用 LIMIT 命令将行数增加到最多 10,000 行。 …

SDH设备

文章目录 实际的SDH设备结构:OSN3500

Archicad 26 (BIM建模软件)

Archicad 26是一款建筑信息模型(BIM)软件,由Graphisoft公司开发。它提供了全面的设计和建模工具,用于创建3D建筑模型、制作施工图纸等。 Archicad 26支持多种文件格式,并且可以与其他CAD软件进行互操作。它具有强大的建…

关于mysql自增列起始值与数据实际id不一致的问题

从一个数据表生成表结构和数据的脚本之后。把脚本复制到另一个数据库执行同步数据结构和数据。 Navicat 发生了如下异常提示,并中断了脚本执行: Duplicate entry 51110 for key sys_log.PRIMARY 然后检查sys_log表的建表脚本,发现有如下行&…

期中考试后,老师用它发成绩

期中考试过后,对于老师们来说,最烦的就是学生家长一直不停的咨询成绩。然而,一群班群直接公布成绩不仅耗时,还不合规。那么,如何用代码和Excel实现让学生自助查询成绩呢?下面,我将向各位老师介绍…

[C/C++]数据结构 链表OJ题:移除链表元素

题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 方法一: 从头开始遍历链表,当遇到相同元素则跳过该元素,指向下一节点 struct ListNode* removeElements(struct ListNode* head…

智慧法院 | 平均执行效率提升86%,RPA数字劳动力改善法院整体工作效能

为深化政法智能化建设,加强“智慧治理”“智慧法院”“智慧检务”“智慧警务”“智慧司法”等信息平台建设,深入实施大数据战略,实现科技创新成果同政法工作深度融合。法制日报社于今年3月继续举办了2023政法智能化建设创新案例及论文征集宣传…

利用TexturePacker 进行pvr.ccz与png互转

这几天在玩 小冰冰传奇 有几个新的游戏角色甚是喜欢,想找几张图片看看,索性就去下载apk找找里面的图片 https://dgame-apk.lilithgame.com/dtcq_675.lilith-android1013.apk 500多M 然后去下载TexturePacker这个软件 27M 我们直接把 dtcq_675.lil…

Vue路由(router-link)——高亮、动态传参

一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话,需要给当前跳转的导航加样式,同时要移除上一个a标签的样式,太麻烦!!! 2.解决方案 vue-router 提供了一个全局组件 router…

led台灯哪些牌子性价比高?推荐五个性价比超高的护眼台灯

作为学龄期儿童的家长,最担心的就是孩子长时间学习影响视力健康。无论是上网课、写作业、玩桌游还是陪伴孩子读绘本,都需要一个足够明亮的照明环境,因此选购一款为孩子视力发展保驾护航的台灯非常重要。为大家推荐几款性价比高的护眼台灯。 …

Devchat AI尝鲜试用:程序员开发提效利器,告别脏活累活

DevChat 简介 在当今的软件开发领域,程序员们每天都要面对海量的代码和复杂的任务。尽管技术不断发展,但程序员们依然需要花费大量时间进行重复性工作,如代码审查、错误排查、文档编写等。这些脏活累活不仅消耗了程序员们大量的时间和精力&am…

科东软件新型工业操作系统亮相2023工控中国大会

近日,2023第三届工控中国大会在苏州太湖国际会议中心成功举办!大会由中国电子信息产业发展研究院、中国工业经济联合会、国家智能制造专家委员会、国家产业基础专家委员会、江苏省工业和信息化厅、江苏省国有资产监督管理委员会、苏州市人民政府共同主办…

守护线程和非守护线程

一、前言 借鉴文章: 文章1 文章2 ①Java提供的两种线程 Java提供了两种线程: 守护线程和用户线程(非守护线程) 守护线程(Daemon Thread): 在程序运行时 在后台提供一种通用服务的线程&#x…

如何使用 NFTScan NFT API 在 Arbitrum 网络上开发 Web3 应用

Arbitrum 是以太坊的 Layer 2 扩容方案,为以太坊面临的高 gas 费和网络拥堵问题,提供了一个解决方案。作为 Layer 1 的以太坊基础层受每秒只能验算 15 笔交易的限制,在目前以太坊使用需求庞大的情况下,局限了以太坊的可扩展性。Ar…

计算机毕业设计 基于SpringBoot房屋租赁管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python 计算机竞赛

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列&#x…

深度学习经典网络:GoogleNet

深度学习经典网络--GoogleNet 1、为什么要提出Inception2、为什么是Inception3、实际中的Inception4、GoogleNet 整体网络结构 GoogLeNet是google推出的基于Inception模块的深度神经网络模型,在2014年的ImageNet竞赛中夺得了冠军,在随后的两年中一直在改…

全方位解析解决找不到msvcp120dll,无法继续执行代码问题的方法

在日常使用电脑的过程中,我们可能会遇到 “找不到msvcp120dll,无法继续执行代码” 的问题。大部分用户并不清楚msvcp120.dll是什么,更不知道怎样修复这个问题。其实不要紧的,今天我们就来了解一下msvcp120.dll文件,并且告知你多种…

react antd message多条数据展示样式

最终效果: 前言: 平时我们经常用到message来做一些错误提示,最常见的就是单行提示。如下图: 实现代码: message.error(This is an error message)多行动态message实现 参考文献:antd message 链接地址&a…

SOLIDWORKS 2024新产品发布会暨SOLIDWORKS 创新日活动-硕迪科技

“达索系统SOLIDWORKS 2024新产品发布会暨SOLIDWORKS创新日” 线下发布会即将登场!硕迪科技与达索系统携手为您奉上一场“云享未来,智协未来”的创新年度盛会,欢迎莅临! SOLIDWORKS 2024 以更加强大的姿态亮相,帮助您…