首页 > 解决方案 > Jmeter - 将 JSON 响应数组传递给下一个 graphql http 请求

问题描述

我有 2 个 graphql http 请求如下。

第一个 http 请求的响应返回 json,如下所示:

{"data":{"customers":{"customerIds":["0e1c7b05-79c6-40c6-9144-7230a836fe04", "45677b05-79tt-56c6-9144-7230a836bbbb"]}}}

然后我创建了 json 提取器和 beanshell 以将客户 ID 保存在属性中

在此处输入图像描述

在此处输入图像描述

第二个 Http 请求然后使用上述 customerids 属性作为 graphql 请求正文的一部分

在此处输入图像描述

但我得到了 500 InternalServerError,因为下面的 customerids 列表中的引号没有被转义。我怎么能逃脱他们?

POST data:
{"query":"query getCustomerInfo {\n  getCustomerInfo(customerIds: \"["0e1c7b05-79c6-40c6-9144-7230a836fe04"]\") {\n firstName\n lastName\n school\n }\n}"}

标签: jmeter

解决方案


  1. 不要将 JMeter 函数或变量内联到脚本中

    使用此功能时,请确保您的脚本代码不直接在脚本代码中使用 JMeter 变量,因为缓存只会缓存第一个替换。而是使用脚本参数。

  2. 不要使用 Beanshell,因为 JMeter 3.1 你应该使用 JSR223 测试元素Groovy 语言编写脚本

因此,用JSR223 PostProcessor替换您的 Beanshell 断言并使用以下代码:

props.put("customerIds",vars.get("customerIds").replaceAll("\"","\\\\\""));

这样您将获得以下customerIds属性值:

[\"0e1c7b05-79c6-40c6-9144-7230a836fe04\",\"45677b05-79tt-56c6-9144-7230a836bbbb\"]

推荐阅读