JMeter使用JSON提取器提取JSONArray中的多个值,并使用BeanShell进行字符串拼接

JMeter使用JSON提取器提取JSONArray中的多个值,并使用BeanShell进行字符串拼接

1.问题背景

在使用JMeter做接口测试的过程中,我遇到一个需求,详情如下:

首先,接口会以JSONArray的格式返回产品列表,如下图:
JMeter使用JSON提取器提取JSONArray中的多个值,并使用BeanShell进行字符串拼接
我依次需要查询这些产品的id,如下图:
JMeter使用JSON提取器提取JSONArray中的多个值,并使用BeanShell进行字符串拼接
然后将所有的id都提取出来,拼接成一个list的字符串,例如:
products = 1606973706248607,1606973706248606,1606973706248605,1606973706248600,1606973706248601
最后将其作为参数传入给下一个接口。

那么解决这个问题的步骤很简单,分两步:

  1. 使用JSON提取器,在接口响应报文中,通过JSONPath提取出所有产品的id值;
  2. 使用BeanShell编写简单的Java代码,循环所有的产品id,拼装成list字符串,并保存到参数中,供后续接口调用。

JMeter中取样器的配置如下图:
JMeter使用JSON提取器提取JSONArray中的多个值,并使用BeanShell进行字符串拼接

2.使用JSON提取器提取JSONArray中的多个值

JSON提取器-提取所有可用的产品的id”配置如下:
JMeter使用JSON提取器提取JSONArray中的多个值,并使用BeanShell进行字符串拼接
通过上图中的JSONPath,可以将所有产品的id,都提取出来。
运行接口后,在“结果树”中查看“调试取样器”,可以看到提取到的多个product id,如下图:
JMeter使用JSON提取器提取JSONArray中的多个值,并使用BeanShell进行字符串拼接
注意上图中,这些id,分别被保存在了JMeter自动创建的“product_”格式的多个参数中,由于产品的数量是不定的,这些参数的数量也是不定的,所以我们需要通过编写BeanShell来循环这些参数,从而拼接出想要的字符串list。

3.使用BeanShell进行字符串拼接

BeanShell 后置处理程序-将所有产品id拼接成list字符串”配置如下:
JMeter使用JSON提取器提取JSONArray中的多个值,并使用BeanShell进行字符串拼接
然后运行JMeter,可以在日志控制台中看到运行log,如下:
JMeter使用JSON提取器提取JSONArray中的多个值,并使用BeanShell进行字符串拼接
上图中,products变量成功保存了产品id的字符串list。

在“结果树”中查看“调试取样器”,也可以看到结果,如下图:
JMeter使用JSON提取器提取JSONArray中的多个值,并使用BeanShell进行字符串拼接