如何用Jmeter做接口自动化测试?跟着操作一次就明白了

内容详情

Jmeter是Apache公司组织开发的一款基于Java压力测试工具,开源且支持多个操作系统,可以对测试静态和动态ZY进行大并发负载模拟,或对服务器网络进行高强度并发测试,业界多将该工具应用于性能测试本文则利用该工具特点,结合接口级功能测试的属性、特点,开展了自动化测试方法探索与实践,以期与大家交流和分享。

一、实践背景在自动化功能测试领域,按照业界普遍认同的单元级、接口级、UI界面级7-2-1占比原则,接口级功能测试能够屏蔽案例对某些特殊环境依赖、适用范围广,可实现复杂案例设计,能收益率适中(占比20%),可提前开展等特点,但接口级自动化测试一般需要依据系统接口特点和报文格式进行适应性开发,工具研发周期较长的缺点,因此选择一款不用开发,即可适合接口级自动化测试工具是非常有意义的。

Jmeter因支持对服务器进行大规模的高强度负载测试,来检测不同并发数量下系统的整体性能情况,并可以通过内置的Jmeter控件,以文本表格或图形展示的形式生成吞吐量、响应时间等指标的统计分析,在业界被广泛应用于性能测试。

而该工具同时具有可移植性,并支持多线程工作,允许通过多个线程并发取消,同时可以通过单独的线程

并且它不仅具有多种配置元件、处理器、SEO器可供选择,还支持脚本编程、动态输入及自定义插件等,用户可根据自身需要进行功能扩展因此,基于Jmeter的高扩展性以及支持GUI界面等特性,本文结合使用Jmeter工具开展接口自动化功能测试,进行了有益的探索和总结。

测试方法及步骤

图1 基于Jmeter进行接口功能测试的步骤图基于Jmeter进行接口功能测试主要分为报文准备、数据准备、断言设置、测试执行、结果统计等五个步骤,如图1所示这种方法不仅适用于单交易场景,也适用于混合交易场景。

1.报文准备报文准备共有三种方法,分别是:直接复制粘贴报文、浏览器录制协议报文、手动添加参数三种方法(1)直接复制粘贴报文这种方法适用于开发人员已完成单元测试,此时开发人员可提供给测试人员能够直接使用的测试报文。

以HTTP请求为例,先在Jmeter工具里新建一个HTTP请求,然后在Body Data中复制粘贴请求报文对于HTTP请求而言,JSON和XML数据格式请求要选择此方法,并且在HTTP请求控件下新增HTTP信息头管理器。

设置Content-Type为对应的application/JSON或application/XML(2)浏览器录制协议报文这种方法适用于B/S结构的系统使用本地浏览器访问客户端,通过给浏览器设置代理服务器来录制协议报文。

使用这种方法时,我们首先要新建一个带录制功能的模板(Recording Templates),然后在浏览器中设置局域网的SEO端口,SEO地址为本机,即localhost在Jmeter工具中打开启动按钮后,在浏览器中访问客户端地址,进入操作界面,开始录制交易。

录制完成后在Jmeter工具中选择停止录制最后获取到的报文可能会包括一些无关的HTTP请求,需要删掉这些无关请求,完成交易报文裁剪录好的报文请求分为几种:HTTP请求方法为POST,指的是向服务器提交数据。

比如完成表单的数据提交,将数据提交给服务器处理GET方法用于请求服务器发送某个ZYPUT方法是让服务器用请求的主体部分来创建一个由所请求URL命名的新文档DELETE方法是请求服务器删除指定URL所对应的ZY

HEAD方法与GET类似,但这种方法允许客户端在未获取实际ZY时对ZY的首部进行检查(3)手动添加参数这种方法适用于测试人员无法从开发人员处获取到报文,或者无法通过浏览器录制到报文的情况也就是说当第(1)、(2)种报文准备方法都无法获取到报文时,可以通过手工添加参数来拼装报文。

以HTTP请求为例,首先需要在Jmeter里新建一个HTTP请求,然后在Parameters中按照报文的参数格式手工添加参数名称和参数值需要注意的是,在HTTP请求控件下,需要新增HTTP信息头管理器,否则有些报文执行时会报错。

2.数据准备数据准备主要有三种方式,分别是以文件格式保存、从数据库动态读取、关联以文件格式保存这种方法适用于需要每次进行接口功能测试时,使用不同数据进行迭代的情况首先,将数据信息存在文件里,用分隔符分隔。

然后新建CSV Data Set Config控件,定义路径、分隔符,参数名等并在后续使用参数名在报文中进行引用它可用于快速测试多种类型数据的情况如在文件中提前准备好基本账户、一般户、专用户、注册验资户、外币户等多种类测试数据。

从数据库动态读取如果需要从数据库获取数据及参数,或者快速批量准备基础数据,可通过连接数据库传递参数的方式,从数据库动态读取数据以ORACLE数据库为例,首先新建JDBC Connection Configuration配置元件,然后添加JDBC Request控件,将获取结果集的SQL语句填入JDBC Request中,并将结果集定义成变量。

以便在报文中进行引用这种方法可以用于快速批量准备基础数据如往1000个账号中存入现金、批量签约等(3)关联关联,即前一个交易的输出是后一个交易的输入关联方式有多种,其中正则表达式的应用较为广泛首先需要新建正则表达式提取器,填写相应字段,然后再在后续报文中对参数名进行引用即可。

字段含义如下所示:①引用名称:下一个请求要引用的参数名称②正则表达式:():括起来的部分是要提取的内容.:匹配任何字符串+:一次或多次?:找到第一个匹配项后停止③模板:如果正则表达式中有多个提取表达式,则$0$代表全部,$1$代表第1个,以此类推;$1$$2$代表第1个和第2个,中间没有间隔,以此类推。

④匹配数字:0代表随即取值,-1代表全部取值,正数n则表示取第n个值⑤缺省值:如果参数没有取到数值,那默认赋予一个值3.断言设置断言主要分为三种形式,分别是通过性测试断言、反向案例断言、功能测试断言(1)通过性测试断言

在测试正向案例的时候,返回报文中带有成功标示或返回了成功码,则认为交易成功如在断言中加入响应文本:交易成功B/S结构网站,交易成功的标志是在断言中加入响应代码:200(2)反向案例断言在测试反向案例的时候,返回报文中带有错误标志或返回错误码,则认为反向案例通过。

如B/S结构网站要测试登陆的接口,当用户名和密码不合法的时候,会响应一个提示,然后状态码是400,此时可在断言中加入响应代码:400或XML格式接口报文的日期字段输入非数字字符时,可在断言中加入响应文本:日期格式输入非法。

(3)功能测试断言对接口进行系统功能测试时,要设计符合业务需求的功能测试断言此时可以通过添加后置处理器JSON Extractor,以及响应断言首先获取响应报文中的变量字段,然后在断言中使用Jmeter Variable去校验得到的变量与预先设置的值是否一样。

举个例子,若交易的响应报文为:  {"records":[{"num":"123456","name":"TONY","age":3}],"total":1,"size":10,"current":1,"pages":1}

假定我们想去判断num是否为123456,name是否为TONY需要首先添加后置处理器JSON Extractor将变量名称设置为num;name,要取的JSON表达式设置为$.records[0].num;$.records[0].name。

JSON Extractor使用JSON path表达式匹配,可以一次取多个变量值多个变量间用";"作为分隔符用"$"表示响应的根对象取子对象或对象的属性用"."表示取数组里的对象用"[ ]"表示,数组索引从0开始。

这里需要特别注意,JSON Extractor中的Variable names、JSON Path expressions、Default Values的数量必须一致,否则无法取到响应报文中的变量之后,添加响应断言,注意要选择Jmeter Variable类型的响应断言,并把JSON Extractor设置的变量名称填入Apply to中。

在运行前可以添加一个Debug PostProcessor控件,以便查看响应报文对应的变量返回值4.测试执行zaixian程组中定义好线程数是1(单并发),根据需要选择取样器错误后要执行的动作,例如是继续还是停止线程。

然后点击启动按钮,开始进行测试执行5.结果统计通过SEO器的聚合报告来统计测试结果如果交易运行失败,可通过查看结果树中的取样器结果以及请求和响应数据排查错误,进行报文调试三、实践总结本文所述的这种使用Jmeter进行接口功能测试的方法具有一定的优势。

第一,Jmeter工具可以通过灵活设置断言来验证程序返回结果是否正确,实现各种功能测试需求;第二,它能够方便快速的测试多种协议的无前台界面交易,对于一些B/S结构的系统,它可以不依赖于前台界面,并且可以跳过界面限制,直接向后台发起正向数据的功能逻辑测试或反向数据的健壮性测试。

第三,利用测试数据自动装填的方式,快速测试多种类型数据,用自动化测试来代替手工执行案例,提高测试效率;最后,由于它支持由多个交易组成的业务场景测试,所以可灵活、高效地为测试团队完成测试数据准备比如:我们可将对公账活期账户kaihu、启用、现金存入3个交易关联在一起,快速准备出大量有余额的对公活期账户,以供测试团队分配及使用。

以上测试方法的探索与实践,一方面有助于提升测试效率另一方面,也为今后的测试工作积累了宝贵的经验随着测试技术的不断发展,测试方法越来越多样化,每种测试方法都有不同的针对性对于不同类型的测试项目来说,测试策略和方法要根据实际情况来决定,选择合适的测试方法可以让我们的测试工作事半功倍。

我是谁?我是一名从事了多年软件测试的老测试员,今年年初我花了一个月整理了一份最适合2020年学习的软件测试学习干货,可以送给每一位对软件测试(包括接口测试)感兴趣的小伙伴,想要获取的可以关注我的头条号并在后台私信我:

【测试】,即可免费获取。

本站内容部分来源于网络,仅供学习交流分享,本站不承担任何由于内容的使用所引起的争议及损失。如有侵权,可联系管理员删除处理。本文链接:http://www.wyce.cn/index.php?m=home&c=View&a=index&aid=6349

二维码

联系管理员

在线咨询:点击这里给我发消息

邮箱:209087445@qq.com