我正在尝试使用Jmeter的GraphQL HTTP请求对我的Graphql API进行负载测试。我正在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"
} ]
}
如果我做错了什么请告诉我。
1条答案
按热度按时间gdx19jrr1#
您需要从CSV文件中获取escape quotation marks
您正在发送:
而且它必须
我的期望是,您需要执行类似以下的操作,而不是
vars.putObject("listdata", listdata)
:有关JMeter中的Groovy脚本的更多信息:Apache Groovy: What Is Groovy Used For?