Arrays 如何在Jmeter中不使用foreach控制器的情况下从数组(通过JSON提取器获得)中提取值
我正在处理Jmeter的一些问题。我向一个API发出HTTP请求,这个API用JSON回答我,所以我使用JSON提取器来提取我需要的信息(我使用JSON路径表达式“$.asset\u host”来获取它并将其存储在名为“data”的变量中)。现在我有一个变量,它是一个名为“data”的数组,其中data[0]=asset\u host 问题是,我需要在下一个HTTP请求中使用此信息,但我不知道如何在不使用foreach控制器的情况下从“数据”获取asset_主机。我尝试了${data[0]}、${data}[0]和${data\u 0},但都不起作用 有人知道如何获取数组数据键0处的asset_主机值吗 编辑 以下是JSON响应:Arrays 如何在Jmeter中不使用foreach控制器的情况下从数组(通过JSON提取器获得)中提取值,arrays,jmeter,load-testing,Arrays,Jmeter,Load Testing,我正在处理Jmeter的一些问题。我向一个API发出HTTP请求,这个API用JSON回答我,所以我使用JSON提取器来提取我需要的信息(我使用JSON路径表达式“$.asset\u host”来获取它并将其存储在名为“data”的变量中)。现在我有一个变量,它是一个名为“data”的数组,其中data[0]=asset\u host 问题是,我需要在下一个HTTP请求中使用此信息,但我不知道如何在不使用foreach控制器的情况下从“数据”获取asset_主机。我尝试了${data[0]}、$
{
“聊天室网络插座端口”:“9009”,
“资产\服务器”:“\/\/assets.local”,
“聊天室网络插座主机”:“聊天室”,
“聊天室网络插座安全”:false
}
编辑_2
好吧,我找到了为什么它不起作用。JSON响应为我提供“//assets.local”,因此,如果我在下一个请求中将其用作主机,它会将“//assets.local”用作主机,这就是它不起作用的原因。我将不得不操纵字符串以删除“/”
编辑_3
好的,为了完成这篇文章,我使用了JSR223采样器来操作字符串并删除“/”。我把代码放在这里,也许将来它会帮助别人
String assets = vars.get("assetServerHost_1");
String newAssets = assets.replace('//', '');
vars.put("hostForAssets", newAssets);
它正在将“//assets.local”更改为“assets.local”
感谢您的阅读和帮助。您能在
调试采样器中检查数据的外观吗
我的猜测是:如果$.asset\u host
是一个数组,那么jmeter将创建单个变量,如data\u 1
,data\u 2
<代码>数据
数组的第一个元素将是data\u 1
编辑如下
调试采样器在Jmeter中是现成的。细节
我使用了这个示例JSON
{
"name": "John",
"age": 30,
"cars": [
"Ford",
"BMW",
"Fiat"
],
"asset_host": "test string"
}
我的JSON提取器配置
请注意,Match No
应等于0
下面是在调试采样器中看到的提取值
如果不查看您的测试计划、JSON提取器配置和JSON响应,很难说出什么问题,可能有太多的失败原因,最常见的原因是JSON提取器的位置不正确(有关更多详细信息,请参阅用户手册一章)
盲射:
将0
放入“匹配号:字段:
这样,您就可以将所需的值引用为${data}
如果您有-1
,那么很可能您有${data\u 1}
变量和${data\u matchNr}
变量保存匹配数
您可以使用以下命令检查JSON提取器生成的变量
谢谢你的回答。我试图在“匹配号”字段中输入0,但它不起作用。它给我“/”而不是-1的值。但是当我在同一字段中输入-1时,如果我尝试使用${data\u 1},它会对主机“${data\u 1}”执行下一个请求“所以它不起作用。我试图找到调试采样器,但我没有,它是一个插件吗?再次感谢你试图帮助我,谢谢你试图帮助我。调试采样器和插件是否在Jmeter中?我现在没看到。asset_host不是数组,它是json响应中的一个简单字符串,但当我使用json提取器时,它是在数组中提取的。。。因此,我尝试使用${data_1}访问它,但它不起作用。编辑我的答案以增加基于上述回复的清晰度感谢您的“编辑”部分。最后我发现了为什么它不起作用。JSON响应将“//assets.local”作为响应,因此如果我在下一个请求采样器中使用它,它会将“//assets.local”放在主机中,这就是它无法工作的原因。因此,我必须找到一种方法来操作字符串并删除${data_1}开头的“/”。谢谢你的帮助,现在我可以有一个调试采样器,这将是有益的!很高兴你能修改剧本。但是,您不必使用${data\u 1}
。因为这不是数组,所以可以通过${data}