Toggle navigation
测试开发者
首页
(current)
软件开发
默认分类
Python
MySQL
JAVA
软件测试
软测基础
Jmeter
运维管理
Jenkins
其他随笔
随笔简记
搜索
【Jmeter04】接口关联
陈缺
2022-09-02 23:55:25
Jmeter
JMeter实现接口关联
# 1. 测试项目 因为新蜂商城没有发现比较好的用来做接口关联示例的接口,所以这里更换为公主号测试平台进行示例 申请测试账号 申请地址:[http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index](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](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值与有效期 ![在这里插入图片描述](https://img-blog.csdnimg.cn/a46fa383a7b34bbdbc44e545e9d58e26.png) ## 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**:默认值,匹配不到值的时候取该值 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9d489c921bff4a4f8ebb71977b28174e.png) 建议加入调试取样器,便于在结果中观察 ![在这里插入图片描述](https://img-blog.csdnimg.cn/60a042bb41d44c7bac76daf51bda7e3b.png) ### 2.2.2 正则表达式提取器 在某些项目中,服务器返回并非json格式的文本,这时候,可以用正则表达式来提取想要的值,也从这里可以看出,正则表达式的适用范围会更广一些 #### a. 正则表达式 正则表达式作为一种通用的对字符串操作的一种逻辑公式,用以过滤出自己想要的内容 完整参考:[https://www.runoob.com/regexp/regexp-syntax.html](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$,2对应$2$,以此类推 ![在这里插入图片描述](https://img-blog.csdnimg.cn/97719b34fc0d4bd08d65da5a527c4b55.png) 在调试结果中查看 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d4e8c68b413549959169cf1f28fa2094.png) ## 2.3 在另一接口中引用 JMeter通过 **${引用名称}** 来使用变量,这里我们使用${ack},根据上文,${ack_g1}也有同样的效果,可以试一试哦 以获取用户标签为例 接口说明:http请求方式:GET(请使用 https 协议) https://api.weixin.qq.com/cgi-bin/tags/get?access_token=ACCESS_TOKEN ![在这里插入图片描述](https://img-blog.csdnimg.cn/21942f1a464148e1a6bc4cf6308253fa.png) 返回结果 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3831a64856224b95927a3762b0834371.png) # 3. 综述 通过上面的步骤,我们可以通过后置处理器Json提取器或正则表达式保存服务器的响应数据,并且在后续请求中使用,以达到接口关联的目的了
友情链接:
CSDN
TBD
TBD
TBD
TBD