根据我在https://graphql.org/learn/serving-over-http/和Performance test for graphQL API上所读的内容,我可以通过jmeter发送graphQL请求。
在堆栈溢出示例中,使用Apollo构建了一个graphQL服务器,然后通过Jmeter查询。我只是尝试进行负载测试,而不是构建架构或数据集,因此我在本地计算机上没有Apollo,并且我也不确定如果尝试这样做,我是否会测试QA环境全部在本地。
我可以在https://proprietary-website/graphql/gql处访问我们的graphQL,如果运行以下查询,它将返回预期结果:
query currentUserProfile {
currentUserProfile {
id
}
}
现在,我尝试将其应用于jmeter
然后我运行500个线程的jmeter负载测试
我看到了在请求正文中传递的有效URL:
GET https://proprietary-website/graphql/gql
GET data:
{"query":{"currentUserProfile {id}"}}
[no cookies]
但我回来了:
HTTP/1.0 400 Bad Request
Content-Type: text/html; charset=UTF-8
Referrer-Policy: no-referrer
Content-Length: 1555
Date: Thu, 12 Dec 2019 16:40:26 GMT
我是graphql的新手,是否不允许将Jmeter请求发送到开发人员给我的URL,我是否必须使用apollo服务器?如果是这样,有人可以给我指出一些例子吗?
我在Windows 10上
我也尝试过:
更新:我刚刚看到我可以将查询复制为curl请求,因此我将该请求粘贴到命令行中,这为我提供了额外的标头,这些标头可以放入我的jmeter HTTP标头管理器中:
$ curl'https://proprietary-website/graphql/gql'-H'接受编码:gzip,deflate,br'-H'内容类型:application / json'-H'接受:application / json'-H'连接: keep-alive'-H'DNT:1'-H'来源:https://proprietary-website'-H'授权:不记名的用户'--data-binary'{“ query”:“查询currentUserProfile {currentUserProfile {id}} “}'
但是我仍然得到400,所以我认为我需要以不同的方式发送查询,因为它显示为--data-binary(不确定这意味着什么)。我尝试了其他一些SO建议,但到目前为止还没有运气
我还尝试使用O'Reilly graphql书中的一个应用程序snowtooth.herokuapp.com。这比较简单,所以curl请求更加简单,并且粘贴到jmeter中的信息更少,但是我仍然收到错误:使用协议缺少HTTP GET查询:HTTP,服务器名称:snowtooth.herokuapp.com,方法:GET and Body数据:{“ query”:“ query {allLifts {name}}”},以及标头管理器中的所有必需标头
答案 0 :(得分:1)
不确定proprietary website
的实现是什么,但是可以像这样测试http://snowtooth.herokuapp.com/:
还要注意,由于JMeter 5.1可以通过CURL命令创建JMeter测试计划,因此该http://snowtooth.herokuapp.com/为我提供了以下CURL命令:
curl 'http://snowtooth.herokuapp.com/' -H 'Accept-Encoding: gzip, deflate, br' -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Connection: keep-alive' -H 'DNT: 1' -H 'Origin: http://snowtooth.herokuapp.com' --data-binary '{"query":"{allLifts{name}}"}' --compressed
当我将其导入JMeter时,我可以成功执行请求: