Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在Jmeter中不使用foreach控制器的情况下从数组(通过JSON提取器获得)中提取值_Arrays_Jmeter_Load Testing - Fatal编程技术网

Arrays 如何在Jmeter中不使用foreach控制器的情况下从数组(通过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]}、$

我正在处理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响应:

{
“聊天室网络插座端口”:“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}