使用Jmeter进行rest API测试


1.     背景概述

服务器接口文档链接:https://github.com/xlink-corp/xlink-sdk

2.     Jmeter的下载安装

2.1  Jmeter官方下载地址:http://jmeter.apache.org/download_jmeter.cgi

此处我们使用最新的3.0版本,直接集成了jsonpath等功能

使用Jmeter进行rest API测试_第1张图片

2.2  Jmeter无需安装,下载之后只需解压即可。JmeterJava写的,运行的前提是需要安装JDK3.0要求JDK1.7以上。JDK的安装此处不赘述。

2.3  配置相关参数

1)设置系统环境变量:JMETER_HOME,值是jmeter的安装路径,如E:\apache-jmeter-3.0

2)在系统环境变量CLASSPATH加上%JMETER_HOME%\lib;

3)Jmeter需要写注册表,否则启动会报如下错误。


方法:Windows+R打开运行,输入regedit,打开系统注册表,在HKEY_LOCAL_MACHINE\Software\JavaSoft下新建项“Prefs”即可。

2.4  Jmeter安装路径bin目录下双击jmeter.bat,启动Jmeter,进入操作界面。

使用Jmeter进行rest API测试_第2张图片

2.5  Jmeter 3.0版本在HTTP请求body data中使用的默认字体(Consolas)不支持汉字的显示,输入的汉字无法正确显示,解决方法:进入Jmeter安装目录bin路径下打开jmeter.properties文件,找到#jsyntaxtextarea.font.family=Hack这一行,把前面的#注释去掉,使其使用Hack字体即能显示中文。

3.     进行rest API测试(以用户身份接口为例)

3.1  POST类型(以注册邮箱账号为例)

a.      首先,用Jmeter创建一个测试计划第一步都是新建线程组。右键点击测试计划,选择“添加”->“线程”->“线程组”,添加一个线程组:

使用Jmeter进行rest API测试_第3张图片

线程组是用来控制脚本执行次数的,可修改名称,其他先保持默认即可,创建好如下。

使用Jmeter进行rest API测试_第4张图片

b.     线程组建好后,接下来就是添加实际测试内容。参看接口文档:

使用Jmeter进行rest API测试_第5张图片

明确HTTP请求方式是POST、消息内容格式是Json,则下一步,添加消息头,声明消息格式为Json

右键点击线程组,选择“添加”->“配置元件”->HTTP信息头管理器”,添加消息头管理器:

使用Jmeter进行rest API测试_第6张图片

进入消息头设置页面,点击“添加”,输入消息头参数名称为“Content-Type”,参数值为“application/json”,点击保存。

使用Jmeter进行rest API测试_第7张图片

c.      接着添加取样器HTTP请求。右键点击线程组,选择“添加”->Sampler->HTTP请求”,添加HTTP请求:

 使用Jmeter进行rest API测试_第8张图片

d.     在新建的HTTP请求输入各项内容:

1)编辑名称和注释;

2)输入服务器域名或IP,注意此处前面不要添加Http://,否则运行会报“URI can't be null”的错误;

3)HTTP请求选项卡设置用Java执行,协议输入HTTP,方法为POSTContent encoding默认是UTF-8,可填可不填;

4)输入API路径,即文档中的/v2/user_register

5)输入消息内容,Json Content放在Body Data中,按要求修改各个key值;

6)保存,则整个HTTP Post请求创建完毕。参看下图:

使用Jmeter进行rest API测试_第9张图片

e.      添加察看结果树,查看请求结果

右键点击线程组,选择“添加”->“监听器”->“察看结果树”:

使用Jmeter进行rest API测试_第10张图片

添加后点击启动按钮,即可在察看结果数中查看RequestResponse的结果,成功或失败都会有相应的信息提示。多次执行时也可点击菜单栏的清除按钮,清除之前执行数据。

使用Jmeter进行rest API测试_第11张图片

 3.2  其他类型及注意事项

a.      首先要明确请求的方法,是POSTGETPUTDELETE…中的哪一种,可简单分辨为:一般向服务器请求数据需带有参数或上传文件的用POST、无需传参用GET(做法参看例子7.获取用户信息)、修改数据用PUT(做法参看例子8.修改用户基本信息)、删除数据用DELETE

b.     Jmeter执行测试计划是按顺序执行,可按接口顺序写下来,如果消息头格式一致,则无需每个HTTP请求添加单独的消息头;如果不一致,则新建消息头,新消息头下面的HTTP请求会采用上面最近一个消息头。

c.      Jmeter测试计划的每个项都可以直接右键复制粘贴,可减轻各个请求重复设置内容的工作量。

d.     Content的数据也可以直接放在Parameters里面去发送,直接把整个Json放在一个参数里面传送。

e.      Content的数据如果是文件,就可以使用第3个方式Files upload,选择本地文件,直接上传整个文件。

 

3.3   Jmeter参数化方法

在各个接口测试中,有时下一个接口的ContentHeader里面的参数是上一个接口Response返回的Json里面的数据,此时我们需要能将ResponseJsonkey值提取出来,并赋给某个变量,在其它接口中直接引用。

 

Jmeter提供三种提取Json数据的方法:

a.      通过正则表达式提取(以从登录与认证接口提取token为例)

右键点击HTTP请求,选择“添加”->“后置处理器”->“正则表达式处理器”:

 使用Jmeter进行rest API测试_第12张图片

设置

1) Applyto:默认即可

2) 检查的响应字段:可选需检查的字段,默认主体即可

3)引用名称:即声明一个变量来保存提取出的数值,在后续可直接通过该变量来引用提取的值

4)正则表达式:"access_token":"(.+?)"()里面的就是要提取的值

5) 模板:$1$代表取第一组数据,用$$引用起来,如果在正则表达式中有多个提取表达式(多个括号括起来的内容),则可以是$1$$2$等等,表示取解析到的第几个值给上面设置的参数。

6)匹配数字:0代表随机取值,1代表全部取值,这里设为1即可。

7)缺省值:如果参数没有取到值,则可以使用缺省值。此处不需设置

 

提取出的变量值在其它地方通过${}来引用,例如上面的${access_token}

使用Jmeter进行rest API测试_第13张图片

 

b.     通过JsonPath提取

右键点击HTTP请求,选择“添加”->“后置处理器”->Json Path PostProcessor”:

使用Jmeter进行rest API测试_第14张图片

 

设置

1) Applyto:默认即可

2) Variable names:变量名称,即声明一个变量来保存提取出的数值,在后续可直接通过该变量来引用提取的值

3)Json Path expressionsJson Path表达式,$.access_token$表示根目录,.表示当前节点,有关Json Path的语法可自行上网查资料

4)Match Numers:匹配数字,即匹配取出的第几个值,可不写

5)Default Values:缺省默认值,可不写

 

同样,提取出的变量值在其它地方通过${}来引用,例如上面${access_token}

使用Jmeter进行rest API测试_第15张图片

 

c.      通过BeanShell编写脚本提取

BeanShell是一个轻量级的面向 Java 的脚本语言。 BeanShell Post Processor 允许使用标准的 Java 语法来处理 Json 数据。右键点击HTTP请求,选择“添加”->“后置处理器”->BeanShell PostProcessor”:

使用Jmeter进行rest API测试_第16张图片

 

输入相应设置及脚本,也可达到提取json数据的目的。

使用Jmeter进行rest API测试_第17张图片

你可能感兴趣的:(Jmeter)