个人站点: 测试开发者https://www.devtester.cn/
1. 测试项目
因为新蜂商城没有发现比较好的用来做接口关联示例的接口,所以这里更换为公主号测试平台进行示例
申请测试账号
申请地址:http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
API文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
用自己的号扫码登录即可,后期需要用到appID与appsecret来获取token
2. 接口关联
在项目中,一些操作往往需要调用多个接口,并且接口之间互有关联。如公众号接口平台后续的操作基本都需要有access_token,我们需要首先将access_token取到,然后在后续接口中使用。
2.1 获取access_token接口
请求说明:GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
JMeter调用成功后,获取到access_token值与有效期
2.2 将access_token保存为参数
显然,access_token每次申请后都会发生变化,如果不做变量保存,则后续操作无法进行
常用的方法为在请求后面添加后置处理器的json处理器或正则表达式提取器,一般而言,正则表达式提取器通用性更高一些。下面以这两种方式做说明
2.2.1 Json提取器
a. json提取器
对象:{}
List:[]
$ 表示根节点
. 表示子节点
$.key 或 $[“key”]
… 表示递归取得
- $…id将key为id的值取出来,只会作为独立的值而不是容器类型
$.key[index].sub-key
表达式 | 说明 |
---|---|
$ | 根节点 |
@ | 当前节点 |
.or[] | 子节点 |
… | 选择所有符合条件的节点 |
* | 所有节点 |
[] | 迭代器标示,如数组下标 |
[,] | 支持迭代器中做多选 |
[start : end : step] | 数组切片运算符 |
?() | 支持过滤操作 |
() | 支持表达式计算 |
当有多个值需要提取时,需要使用分号;隔开,注意数量要对应,否则会报错
b.具体参数设置说明
Names of created variables:接收值的变量名,示例定义了两个,ac_token获取access_token的值,ex获取expires_in的值
Json path:jsonpath表达式
Match no:0随机;n取第几个匹配值;-1匹配所有,后续引用变量名_N取第N个值
Compute comcatemation var(suffix_ALL):如果发现许多结果,插件将使用" , "分隔符将它们连接起来,并将其存储在名为< variable name>_ALL的var中
Default values:默认值,匹配不到值的时候取该值
建议加入调试取样器,便于在结果中观察
2.2.2 正则表达式提取器
在某些项目中,服务器返回并非json格式的文本,这时候,可以用正则表达式来提取想要的值,也从这里可以看出,正则表达式的适用范围会更广一些
a. 正则表达式
正则表达式作为一种通用的对字符串操作的一种逻辑公式,用以过滤出自己想要的内容
完整参考:https://www.runoob.com/regexp/regexp-syntax.html
JMeter常用 左边界(.*?)右边界 来提取我们所需要的值,简单粗暴却实用
**(.*?)**就是我们需要找到的值。从这里可以看出,关键是要确保左右边界能够在响应中唯一,如果有与其他文本重复,我们需要继续扩大边界范围
简单说明如下,注意使用英文标点:
() 分组,如果需要匹配,则需要加
. 表示匹配除换行以外的任意一个字符
* 表示前面的元素出现0次及以上,即任意次, 等价于{0,}
+ 表示前面的元素出现至少一次, 等价于{1, }
? 表示前面的元素最多只能出现一次,或者将贪婪模式转换为非贪婪模式
b. 具体操作
添加后置处理器-正则表达式提取器
引用名称即后续要使用的变量名。
模板:表示ack要取的分组的值,正则表达式分组下,$0$ 表示取包括边界在内的整个值,$1$ 表示ack取第一个分组的值,在这里为access_token的值,$2$ 表示ack取第二个分组的值,这里是expires_in的值
在实际使用中可以通过${引用名称_g1}的形式来使用,1对应
1
1
1,2对应
2
2
2,以此类推
在调试结果中查看
2.3 在另一接口中引用
JMeter通过 ${引用名称} 来使用变量,这里我们使用${ack},根据上文,${ack_g1}也有同样的效果,可以试一试哦
以获取用户标签为例
接口说明:http请求方式:GET(请使用 https 协议) https://api.weixin.qq.com/cgi-bin/tags/get?access_token=ACCESS_TOKEN
返回结果
3. 综述
通过上面的步骤,我们可以通过后置处理器Json提取器或正则表达式保存服务器的响应数据,并且在后续请求中使用,以达到接口关联的目的了