我正在尝试使用J抄的Graphql HTTP请求来加载我的GraphQL。我正在JSR223预处理器中读取CSV文件以创建ArrayList。我正在将ArrayList加载到参数中。当我使用参数值时,由于格式化问题,我得到了错误。查询时不使用该参数。
query MyQuery {
batchGetData(input_data: ["aqwedasd","aqwedasq"]) {
data {
value1
value2
value3
}
}
}
没有参数的JMeter请求体。下面的请求工作正常,没有任何问题.
POST https://example.com/graphql
POST data:
{"operationName":null,"query":"query MyQuery {\n batchGetData(input_data: [\"aqwedasd\",\"aqwedasq\"]) {\n data {\n value1\n value2\n value3\n }\n }\n}"}
[no cookies]
现在,使用JSR223预处理器,我读取了一个CSV文件,并使用下面的脚本创建了一个ArrayList,并将其添加到listdata参数中。
def rows = new File("values.csv").readLines()
Collections.shuffle(rows)
ArrayList<String> listdata = new ArrayList<String>()
listdata = rows.subList(0, 5)
vars.putObject("listdata", listdata)
现在,在我的查询中,我使用了上面的listdata参数。
GraphQL查询:
query MyQuery {
batchGetData(input_data: ${listdata}) {
data {
value1
value2
value3
}
}
}
现在,当我运行线程组时,JMeter将查询转换为下面的请求体。这会失败,因为它没有与之前的请求相同的**。
POST https://example.com/graphql
POST data:
{"operationName":null,"query":"query MyQuery {\n batchGetData(input_data: ["aqwedasd","aqwedasq"]) {\n data {\n value1\n value2\n value3\n }\n }\n}"}
[no cookies]
对于上述请求,我将得到以下错误
{
"errors" : [ {
"message" : "Invalid JSON payload in GraphQLAuth POST request.",
"errorType" : "MalformedHttpRequestException"
} ]
}
如果我做错了什么请告诉我。
发布于 2022-10-19 09:24:39
您需要从CSV文件中获得转义引号
你在发送:
(input_data: ["aqwedasd","aqwedasq"])
而且它必须是
(input_data: [\"aqwedasd\",\"aqwedasq\"])
我的期望是,与vars.putObject("listdata", listdata)
不同,您需要做的事情如下:
def json = new groovy.json.JsonBuilder(listdata).toString()
def escapedJson = org.apache.commons.text.StringEscapeUtils.escapeJson(json)
vars.put('listdata', escapedJson)
有关JMeter::Groovy用于什么?中Groovy脚本的更多信息
https://stackoverflow.com/questions/74122770
复制相似问题