如何在 Jmeter 中没有 foreach 控制器的情况下从数组中提取值(通过 JSON 提取器获得)

How to extract a value from an array (obtained through JSON extractor) without foreach controller in Jmeter

我正在处理 Jmeter 的一些问题。我向 API 发出 HTTP 请求,这个 API 在 JSON 中回答我,所以我使用 JSON 提取器来提取我需要的信息(我使用 JSON 路径表达式“$.asset_host”获取它并将其存储在名为“data”的变量中。所以现在我有一个变量,它是一个名为“data”的数组,其中包含 data[0] = asset_host.

问题是我需要在下一个 HTTP 请求中使用此信息,但我不知道如何在不使用 foreach 控制器的情况下从“数据”中获取 asset_host。我尝试了 ${data[0]}${data}[0]${data_0} 但它不起作用。

有人知道如何在数组数据的键 0 处获取 asset_host 值吗?

编辑

这是 JSON 响应:

{
    "chat_web_socket_port": "9009",
    "assets_server": "\/\/assets.local",
    "chat_web_socket_host": "chat",
    "chat_web_socket_secure": false
}

Here the JSON extractor

EDIT_2

好的,我找到了它不起作用的原因。 JSON 响应给我“//assets.local”,所以如果我在下一个请求中使用它作为主机,它会将“//assets.local”作为主机,这就是它不起作用的原因。我将不得不操纵字符串来删除“//”。

EDIT_3

好的,为了完成这个 post,我使用了 JSR223 采样器来操作字符串并删除了“//”。我把代码放在这里,也许它对以后的人有帮助。

String assets = vars.get("assetServerHost_1");
String newAssets = assets.replace('//', '');
vars.put("hostForAssets", newAssets);

正在将“//assets.local”更改为“assets.local

感谢您的阅读,感谢您的帮助。

你能检查一下 Debug Sampler 中的数据吗?

我的猜测是:如果 $.asset_host 是一个数组,那么 jmeter 将创建单独的变量作为 data_1data_2、.... data_n 数组的第一个元素将是 data_1

编辑如下

调试采样器在 Jmeter 中是开箱即用的。详情 here.

我用了这个样本JSON

{
"name": "John",
"age": 30,
"cars": [
    "Ford",
    "BMW",
    "Fiat"
],
"asset_host": "test string"
}

我的 JSON 提取器配置

请注意 Match No 应等于 0

下面是在 Debug Sampler 中看到的提取值

如果没有看到您的测试计划、您的 JSON 提取器配置和 JSON 响应,很难说出了什么问题,有太多可能的失败原因,最常见的一个是不正确的放置JSON 提取器(有关详细信息,请参阅 JMeter Scoping Rules 用户手册章节)

盲拍:

  1. 0放入“匹配号:字段:

这样您就可以将所需的值引用为 ${data}

  1. 如果你有 -1 - 那么很可能你有 ${data_1} 变量和 ${data_matchNr} 保存匹配数的变量

您可以使用 Debug Sampler and View Results Tree listener combination

检查 JSON 提取器生成了哪些变量