背景
在平常开发中,Jmeter一般用得多的可能是对单个接口进行。不过排除在开发中会遇到这样的需求,就是一个业务需要先调用一个接口获取相关数据后,作为下一个接口调用的参数,此时接口间的调用是有时序的,在Jmeter测试此类业务时,就需要用到其中的【事务控制器】。
下面记录一项调用小程序二维码的过程,主要的实现是两个接口:
- 调用 auth.getAccessToken 接口获取 access_token ;
- 用上面获取的 access_token 调用 wxacode.createQRCode。
相关接口说明文档的连接:
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.createQRCode.html
JMeter
添加线程组
新打开的JMeter界面中,只有一个默认的【测试计划】,我们需要在【测试计划】中添加一个【线程组】:
添加用户定义的变量
【用户定义的变量】可设置一些变量数据用于后面测试的请求中引用:
看上面的图,要选第一个才是在环境中设置一些变量,至于另外一个,是设置一个全局的请求参数,每个测试的请求都会带上其中设置的变量数据。
在这里,我们把小程序的AppID和Secret (可通过小程序测试号申请) 保存在变量列表里:
添加事务控制器
到此就是关键点,多个请求形成顺序执行的一个事务,就需要一个【事务控制器】来管理,故在【线程组】中添加一个【事务控制器】:
后面的就和添加单个测试请求一样的,事务中具体的执行顺序是从上往下走的。
添加HTTP请求
【HTTP请求】的添加如下:
auth.getAccessToken
auth.getAccessToken接口测试的相关参数设置如下:
从上图中,可以看到在请求参数列表里,appid和secret字段不是一个具体的值,而是对【用户定义的变量】列表中的变量进行引用。
察看结果树
启动前记得添加【监听器】的【察看结果树】,不然无法观察测试请求后的结果:
启动测试
添加JSON提取器
在上一步,启动了测试,也成功从接口返回了相关数据,但这样的结果我们是没办法使用的,如要使用接口返回的数据,我们还要添加一些接口的【后置处理器】,这里从结果看都知道是需要一个【JSON提取器】:
有了【JSON提取器】,我们还要配置提取器从结果中提取那些参数数据:
Names of created variables:提取后的变量名,可提取多个元素,则参数名称写多个,用英文分号分开;
JSON Path expression:json提取器语法用英文分号隔开,应当与参数名称一一对应;
Match No.(0 for Random):匹配编号一样的需要用英文分号隔开,与参数名称一一对应;
Default Values:默认值同样用英文分号隔开,与参数名称一一对应;
设置成功就可以在后续的请求中,像引用【用户定义的变量】列表里的变量一样引用了。
wxacode.createQRCode
从上图看,在【路径】中引用了前面一个接口返回的access_token;
添加HTTP请求的头部信息
因为这个请求是POST方式的,而且消息体的数据是JSON格式的,故要想调用成功还需要请求体的头部信息:
并设置Content-Type的值:
添加事务【察看结果树】
到了上面一步,其实已经完成了接口调用的所有设置了,但为了察看此事务的执行结果,可在【事务控制器】下添加一个【察看结果树】,具体操作不说了。
最后的结果: