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

随着业务的逐步稳定,对于接口的改动也会逐渐变少。更多的是对业务逻辑的优化,功能实现的完善。对于测试来说,重复繁琐的功能测试不仅效率低下,而且耗费一定的人力资源。笔者支持的信息流业务下的一个图文管理平台就是一个功能较为完善,系统较为稳定的后台平台。每次平台新增一些小的功能,或者对某些模块做优化时,都会一定程度上影响其他模块。每次回归测试,甚至比新增的功能测试点还耗时,而且还不敢保证没有漏测的地方。因此,如何提升测试效率,保证回归测试的全面性和准确性,接口自动化测试是一种有效的手段。目前,有不少成熟的接口自动化测试框架可供使用,如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的实现等等。但是,基于上面的思路,可以让大家能够轻松的搭建出自定义的测试框架,剩余的只需不断的完善。最后想要说的是:“纸上得来终觉浅,绝知此事要躬行”。


              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战 

三、Web自动化项目实战


四、App自动化项目实战 

五、一线大厂简历


六、测试开发DevOps体系 

七、常用自动化测试工具

八、JMeter性能测试 

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到! 

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

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

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

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

相关文章

Lambda表达式的简单理解

1. 初识lambda表达式 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式(Lambda exp…

广州华锐互动:VR煤矿特殊工种作业实训帮助提高矿工的操作技能和安全意识

VR煤矿特殊工种作业实训系统为煤矿企业培训提供了全方位的支持,帮助提高矿工的操作技能和安全意识,促进煤矿企业的安全生产。 首先,VR煤矿特殊工种作业实训系统可以提供逼真的虚拟操作环境,使矿工能够身临其境地感受各种工种的作业…

计算机网络 网络层上 | IP数据报,IP地址,ICMP,ARP等

文章目录 1 网络层的两个层面2 网络协议IP2.1 虚拟互联网络2.2 IP地址2.2.1 固定分类编址方式2.2.2 无分类编制CIDR2.2.3 MAC地址和IP地址区别 2.3 地址解析协议ARP2.3.1 解析过程 2.4 IP数据报格式 3 IP层转发分组流程4 国际控制报文协议ICMP4.1 ICMP格式结构4.2 分类4.2.1 差…

学习MS Dynamics AX 2012编程开发 2. X++语言

X是用于构建Dynamics AX功能的编程语言。X是一种与C类似的面向对象编程语言。 完成本章后,您将能够理解X语言;您将知道可用的数据类型是什么,如何创建各种循环,如何比较和操作变量,在哪里可以找到预定义的函数&#x…

【Android逆向】记录一次某某虚拟机的逆向

导语 学了一段时间的XPosed,发现XPosed真的好强,只要技术强,什么操作都能实现... 这次主要记录一下我对这款应用的逆向思路 apk检查 使用MT管理器检查apk的加壳情况 发现是某数字的免费版本 直接使用frida-dexdump 脱下来后备用 应用分…

二叉树前,中序推后续_中,后续推前序

文章目录 介绍思路例子 介绍 二叉树是由根、左子树、右子树三部分组成。 二叉树的遍历方式又可以分为前序遍历,中序遍历,后序遍历。 前序遍历:根,左子树,右子树 中序遍历:左子树,根&#xff0…

菜鸟学习日记(python)——匿名函数

Python 使用 lambda 来创建匿名函数。 lambda 函数是一种小型、匿名的内联函数,它可以具有任意数量的参数,但只能有一个表达式。 匿名函数的一般格式如下: lambda 参数列表:表达式 表达式用于计算并返回函数结果 lambda 函数通常用于编写…

FreeRtos里的几个中断屏蔽

1、primask 寄存器 PRIMASK用于禁止除NMI和HardFalut外的所有异常和中断,使用方法: cpsid i ; //设置primask (禁止中断) cpsie i ; //清除primask (使能中断) 也可以 movs r0,#1 msr primask r0; //将 1写入p…

C# WPF上位机开发(网络程序界面开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 之前我们讨论过,设备之间通讯的方式很多。但是,不知道大家有没有注意,前面谈到的这些通讯方式都需要上位机电脑…

华为云创新动能涌现,浒墅关开启先进制造新纪元

编辑:阿冒 设计:沐由 穿境而过的京杭大运河,孕育了苏州浒墅关深厚的历史文化底蕴。千年延续不断的繁华,滋养了一代又一代奋进的浒墅关人。今天,一座国家级经开区挺立在这里,散发出创新创业的蓬勃活力。 苏州…

WordPress如何搭建多站点

这边之前有讲到过wordpress站中站(栏目站)建站教程,同样的也有讲到过WordPress开启多站点配置,两种方法都是用来搭建子站点的,而开启多站点的方式不同于普通搭建站中站,多站点配置开启,是可以实…

STM32F407-14.3.18-01连接霍尔传感器

连接霍尔传感器 可通过用于生成电机驱动 PWM 信号的高级控制定时器(TIM1 或 TIM8)以及图 114 中称为 “接口定时器”的另一个定时器 TIMx(TIM2、TIM3、TIM4 或 TIM5),实现与霍尔传感器的连接。3 个定时器输入引脚&…

【C语言】实战项目——通讯录

引言 学会创建一个通讯录,对过往知识进行加深和巩固。 文章很长,要耐心学完哦! ✨ 猪巴戒:个人主页✨ 所属专栏:《C语言进阶》 🎈跟着猪巴戒,一起学习C语言🎈 目录 引言 实战 建…

C语言——完数难题(编程题目)

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 生命如同寓言,其价值不在于…

【数据分享】2019-2023年我国区县逐年二手房房价数据(Excel/Shp格式)

房价是一个区域发展程度的重要体现,一个区域的房价越高通常代表这个区域越发达,对于人口的吸引力越大!因此,房价数据是我们在各项城市研究中都非常常用的数据!之前我们分享了2019—2023年我国区县逐月的二手房房价数据…

破译模式:模式识别在计算机视觉中的作用

一、介绍 在当代数字领域,计算机视觉中的模式识别是关键的基石,推动着众多技术进步和应用。本文探讨了计算机视觉中模式识别的本质、方法、应用、挑战和未来趋势。通过使机器能够识别和解释视觉数据中的模式,模式识别不仅推动了计算机视觉领域…

小程序商城活动页面怎么生成二维码

背景 小程序商城某些页面需要做成活动推广页,或需要某一个页面做成二维码进行推广。比如某些非公开的商品做成一个活动,发送指定部分用户,这个活动页面可以做成二维码。 前提 小程序已经上线 步骤 登录微信小程序官网,选择工具…

【i.MX6ULL】使用buildroot构建根文件系统

文章目录 前言1、下载源码2、构建根文件系统1. 配置buildroot2. 编译buildroot3. buildroot根文件系统测试 3、buildroot第三方软件和库的配置1. 使能 alsa-lib2. 使能 alsa-utils 4、 buildroot下的busybox配置1. busybox配置2. 使能常用命令 前言 本篇文章时参考的正点原子的…

嵌入式开发中的总线与时钟

总线 AHB总线 AHB的全称是"Advanced High-performance Bus",中文翻译就是"高级高性能总线"。这是一种在计算机系统中用于连接不同硬件组件的总线架构,它可以帮助这些组件之间高效地传输数据和信息。这个总线架构通常用于处理速度较快且对性能要求较高的…

设计模式详解---单例模式

1. 设计模式详解 单例模式是一种创建对象的设计模式,它确保一个类只有一个实例,并提供全局访问点以获取该实例。 在单例模式中,类负责创建自己的唯一实例,并确保任何其他对象只能访问该实例。这对于需要共享状态或资源的情况非常有…