一种基于JMeter的接口自动化测试方法

2382 篇文章 33 订阅
1293 篇文章 7 订阅

在这里插入图片描述
JMeter作为一款著名的软件测试工具,在DevOps模式下有着广泛的应用。本文重点介绍现有技术方案存在的问题,提出了一种基于JMeter的接口自动化测试方法,提供标准的脚本框架并进行了技术实践。

在DevOps模式下,开发、测试和运维团队合作变得更为紧密,以实现更快速的持续集成和交付。其中,JMeter作为一款著名的软件测试工具,伴随着DevOps模式的推广被业界广泛应用。然而,笔者在对多家外部公司进行技术管理的过程中发现,若不针对JMeter接口自动化测试框架制定统一的技术标准,不仅不方便对脚本进行审核,也会影响回归测试的规范性,而且还会因缺乏断言健康度度量而导致无法有效评估接口测试的质量和正确性。尽管有方案可以通过添加线程组并配置其循环次数、线程启动时间等参数来模拟普通用户发送请求对服务器接口进行压力测试,以及添加设置监听器和断言来判断请求相应的结果是否符合预期,但其方案没有提出区分不同的运行环境(如开发环境、测试环境、预发布环境以及生产环境等),即现有方案存在一定的技术局限性。

一、现有技术方案问题分析

笔者经研究多个技术方案的特点发现,现有方案主要存在五个方面的问题:一是现有方案的脚本没有明确提出区分不同的环境。例如在开发、测试、预发布等环节,不支持一套脚本在多种不同的环境中运行。二是现有方案的脚本没有对HTTP请求进行明确的规范化定义。缺乏明确的规范将导致无法区分测试结果属于哪个测试环境。此外,在接口测试失败的情况下,也就很难准确定位所在的代码模块。三是没有提出对项目的子模块建立循环控制器,没有提出用线程组来隔离不同的项目,没有提出针对业务流程采用事务控制器。四是没有针对增删查改类单接口测试提供规范化技术方案。五是缺乏针对断言的健康度度量。

二、基于JMeter的 接口自动化测试方法研究

针对现有方案中的难点问题,笔者尝试提出一种基于JMeter的接口自动化测试脚本框架(如图1 所示)。其中,JMeter脚本的预处理文件主要包含HTTP Cookie管理器、HTTP请求默认值、HTTP消息头管理器、数据库配置(正式环境)、数据库配置(测试环境)、查看结果树、聚合报告等,且上述组件在不用的情况下可以选择“禁用”。从功能角度看,该框架的优点主要体现在以下五个方面。

在这里插入图片描述

图1 基于Jmeter的接口自动化测试脚本框架

1.一套脚本支持多种不同的环境

笔者使用了多个If Controller来区分不同的环境,同时基于BeanShell Sampler为每个If Controller初始化各自环境的参数值。例如,测试计划定义一个用户变量env指明环境类型,每个If Controller内部可根据${env}来判断是否进入,并使用BeanShell取样器设定相关参数,如请求地址、协议、端口、随机值等。在此模式下,每个环境参数只需在BeanShell取样器内定义一次即可复用,最终实现一套脚本支持开发、测试、预发布等多个环境,并且最小化冗余代码,有效提高代码重用性和可维护性。

2.制定HTTP请求的命名规范

在命名方面,笔者将HTTP请求命名为“ e n v − 用例编号 − 接口名”,其中 {env}-用例编号-接口名”,其中 env用例编号接口名,其中{env}是用户定义变量中定义的环境类型,以便于观察测试报告中不同环境和测试用例的执行情况。同时,每个业务流程对应一个测试用例编号,例如,一个订单支付流程可能包含多个HTTP请求,但却是一个接口测试用例。通过对HTTP请求命名采用规范化方式,不仅明确了标识环境、测试用例和具体接口,也方便后续快速定位问题和追踪测试过程。

3.引入不同类型的控制器

通过使用循环控制器对测试项目子模块进行分组,可实现子模块之间的逻辑隔离,以便于多次开展回归测试,并可以结合测试项目的逻辑结构对循环控制器命名。同时,使用线程组隔离测试项目可避免项目间相互影响,提高测试结果的准确性。又如,在对业务流程进行测试时,使用事务控制器对流程内多个HTTP请求进行包裹,可以统计事务控制器下面所有的HTTP请求整体性能指标。此外,使用事务控制器跨接口测量整体性能,将可评估真实业务场景。总之,通过使用不同类型控制器对测试项目进行合理划分,进一步提升了测试精准化水平。

4.提供单接口测试技术方案

针对增删查改类接口自动化测试,首先通过增加接口来补充测试数据,然后通过接口来查询增加后的数据,并基于JSON提取器获取增加后的数据ID进行修改,最后再根据增加的数据ID进行删除,即可使该类测试不仅无需采用连接数据库的脚本配置,而且也能避免产生脏数据。

5.提出针对JMeter断言的健康度度量

通过在查看结果控件中增加断言期望值,无论断言结果是否成功,都可根据Label中的测试案例编号,结合设计的断言期望值比对脚本中设置的断言期望值查看空断言情况,并对断言编写的正确与否进行集中核对。例如,用N来表示空断言的总数,T表示断言结果的总数,则可以将(T-N)/T作为断言健康度。此外,由于测试脚本的断言有权重之分,不同权重对应不同断言的重要性,因此可以更灵活地对断言进行度量。例如,设置一个断言的权重值为w,用wi来表示第i个空断言的权重,所有断言的权重之和为1,则断言的健康度可以表示为图片,其中图片为空断言权重之和。

三、基于JMeter的 接口自动化测试实践

为验证测试效果,笔者对9个系统实施了JMeter接口自动化测试,测试结果见表1。其中,开发阶段问题数是指外部开发人员在开发环境自行编写测试用例执行时发现的问题数;测试阶段问题数是指外部公司将脚本首次提交给管理员在测试环境执行审核时发现的问题数;空断言个数是指管理员在测试环境首次审核时发现的空断言个数。经分析,经过开发阶段的自纠自查,在首次提交管理员审核时,问题数呈下降趋势。总之,采用本文提出的脚本框架可减轻测试人员对框架搭建的关注,节约学习成本,使其更专注于测试用例本身。同时,该框架提高了测试脚本的质量、复用性和可维护性,从而使测试人员能够在相同时间内完成更多的测试任务, 提高工作效率。

表1 JMeter接口自动化测试结果

图片

在上述实践中,JMeter接口测试提交物包括接口文档、接口测试用例文档和接口测试报告三部分。其中, 接口测试用例文档需要注明每个测试用例涉及的接口。接口测试报告包括Data、Result和Script三个子文件夹,Data用来存放与数据处理有关的Excel表格,若没有可以为空,若有可以采用search.csv和result.csv等命名方式;Result用来存放生成的HTML Report,内容包括index.html有关包,以便于通过浏览器查看接口测试情况;Script主要包括xx.jmx和xx.jtl,xx.jmx为测试框架脚本,xx.jtl为生成的测试结果,可以通过JMeter查看,也可以通过xx.jtl生成HTML Report。制定JMeter接口测试提交物规范的目的不仅是便于归档,更是为了便于快速解读测试情况,以及更好地复现和排查问题,持续促进项目长期优化和迭代改进。

自动化测试的本质是通过提升测试效率,进一步提升软件产品的交付质量和效率。本文首先介绍了JMeter接口自动化测试现有技术方案存在的问题,如由于缺乏标准导致增加脚本审核难度等,然后提出了一种基于JMeter的接口自动化测试方法,可用于提高测试人员编写脚本的效率和质量,助力测试质量持续提升。希望能够为读者带来有益启发。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

在这里插入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值