【JMeter04】接口关联

个人站点: 测试开发者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提取器或正则表达式保存服务器的响应数据,并且在后续请求中使用,以达到接口关联的目的了

JMeter 中实现多个接口之间的关联,主要依赖于从接口响应中提取数据并将其传递给后续请求。这种操作可以通过多种工具和组件完成,如正则表达式提取器、JSON 提取器、BeanShell 脚本以及用户自定义变量等。以下是一些常用方法及其实现方式: ### 1. JSON 提取器 对于返回 JSON 格式数据的接口,可以使用 JSON 提取器来获取特定字段的值。例如,假设某个接口返回如下 JSON 数据: ```json { "id": 123, "token": "abc123xyz" } ``` 可以通过 JSON 提取器提取 `token` 字段,并将其存储在一个变量中(如 `auth_token`),以便后续请求使用。这种方式适用于结构化的 JSON 响应数据,且不需要复杂的正则表达式[^1]。 ### 2. 正则表达式提取器 当接口返回的数据格式不是严格的 JSON 或 XML 时,可以使用正则表达式提取器。例如,如果响应内容中包含如下 HTML 片段: ```html <input type="hidden" name="session_id" value="abcd1234"> ``` 可以使用正则表达式 `name="session_id" value="(.+?)"` 来提取 `session_id` 的值,并将其存储在变量中(如 `session_id`)[^3]。 ### 3. BeanShell 脚本 在某些复杂场景中,可能需要使用 BeanShell 脚本来处理提取逻辑。例如,可以通过编写 Java 代码片段来解析响应内容,并提取所需的数据。BeanShell 脚本提供了更高的灵活性,适用于需要自定义处理逻辑的情况。 ### 4. 用户自定义变量 在测试脚本中,可以预先定义一些全局变量,用于存储从接口响应中提取的值。这些变量可以在后续请求中作为参数使用。例如,在登录接口响应中提取 `user_id` 后,可以将其存储为用户自定义变量,并在后续请求中传递该变量以模拟已认证用户的行为[^1]。 ### 5. 多接口并发测试中的关联 在进行多接口并发测试时,确保接口之间的数据一致性尤为重要。例如,在模拟 400 个用户并发请求时,每个用户可能需要独立的会话标识或令牌。可以通过在每个线程组中动态生成或提取这些值,并将其传递给后续请求,以确保每个用户的请求独立且连贯[^2]。 ### 示例代码:使用 JSON 提取器 假设有一个登录接口,返回的 JSON 数据如下: ```json { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxxx" } ``` 在 JMeter 中,可以添加一个 JSON 提取器,配置如下: - **Names of created variables**: `token` - **JSON Path expressions**: `$.access_token` - **Match No. (0 for Random)**: `0` 然后,在后续请求中,使用 `${token}` 引用提取的值。 ### 示例代码:使用正则表达式提取器 假设某个接口返回如下 HTML 内容: ```html <div id="user">User ID: 12345</div> ``` 可以使用正则表达式 `User ID: (\d+)` 来提取用户 ID,并将其存储在变量 `user_id` 中。 ### 示例代码:使用 BeanShell 脚本 在 BeanShell 后置处理器中,可以编写如下代码来提取响应中的数据: ```java String response = prev.getResponseDataAsString(); String userId = response.replaceAll(".*User ID: (\\d+).*", "$1"); vars.put("user_id", userId); ``` 这段代码从响应中提取用户 ID,并将其存储在变量 `user_id` 中。 ### 总结 在 JMeter 中实现多接口关联的关键在于正确提取接口响应中的关键数据,并将其传递给后续请求。根据接口返回的数据格式和复杂程度,可以选择合适的方法,如 JSON 提取器、正则表达式提取器、BeanShell 脚本或用户自定义变量[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值