【发布时间】:2018-04-11 02:28:55
【问题描述】:
今天,当服务器是 REST API 时,我正在使用 Jmeter 进行 API 自动化测试和性能测试。
现在开发改为graphQL API,我有两个问题:
- 执行自动化 API 和性能测试的最佳方法是什么?
- Jmeter 是否支持 graphQL API?
【问题讨论】:
标签: jmeter performance-testing graphql
今天,当服务器是 REST API 时,我正在使用 Jmeter 进行 API 自动化测试和性能测试。
现在开发改为graphQL API,我有两个问题:
【问题讨论】:
标签: jmeter performance-testing graphql
最简单的方法是直接在 JMeter 中使用 GraphQL 查询,而无需将它们转换为 JSON。
您需要做的就是在标题中将“Content-Type”作为“application/graphql”传递。
【讨论】:
我最近尝试使用 GraphQl 在 Jmeter 中使用 GET 和 POST 请求进行 API 测试
确保它的 POST 请求同时针对 Query 和 Mutation
Graph Ql 查询示例
{
storeConfig{
default_title
copyright
}
}
对于 Jmeter 应该是这样的
{
"query":"{ storeConfig { default_title copyright } }"
}
加强 HTTP 请求
您的域名将代替本地主机。确保你没有添加 https
在 Jmeter 中:- mydomainname.com
设置 HTTP 标头管理器
用于在 Jmeter
中请求 MutationGraphql 中的示例突变
mutation {
generateCustomerToken(
email: "rd@mailinator.com"
password: "1234567"
) {
token
}
}
在Jemeter突变会是这样的
{
"query":"mutation { generateCustomerToken( email: \"rd@mailinator.com\" password: \"1234567\" ) { token } }"
}
将双引号替换为 (\") 如上查询所示
【讨论】:
我使用Apollo构建GraphQL服务器,并使用JMeter查询GraphQL API如下。
根据您的应用程序,您可能还需要为 JWT Web 令牌设置 HTTP 标头授权,例如:
Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxx
【讨论】:
我正在测试我们的 GraphQL 实现,您需要:
Content-Type: Application/json
https://i.stack.imgur.com/syXqK.png
【讨论】:
免责声明:我为 LoadImpact 工作; k6 背后的公司。
如果您愿意考虑替代方案,我最近写了一篇关于此主题的博文:Load testing GraphQL with k6。
这是一个 k6 示例的样子:
let accessToken = "YOUR_GITHUB_ACCESS_TOKEN";
let query = `
query FindFirstIssue {
repository(owner:"loadimpact", name:"k6") {
issues(first:1) {
edges {
node {
id
number
title
}
}
}
}
}`;
let headers = {
'Authorization': `Bearer ${accessToken}`,
"Content-Type": "application/json"
};
let res = http.post("https://api.github.com/graphql",
JSON.stringify({ query: query }),
{headers: headers}
);
【讨论】:
您可以尝试使用easygraphql-load-tester
easygraphql-load-tester 是一个节点库,用于基于 schema 对 GraphQL 进行负载测试;它将创建一堆查询,这些查询将用于测试您的服务器。
使用这个包,对我来说,使用服务器上的数据加载器识别错误的实现是可能的。
没有数据加载器的结果
All virtual users finished
Summary report @ 10:07:55(-0500) 2018-11-23
Scenarios launched: 5
Scenarios completed: 5
Requests completed: 295
RPS sent: 36.88
Request latency:
min: 1.6
max: 470.9
median: 32.9
p95: 233.2
p99: 410.8
Scenario counts:
GraphQL Query load test: 5 (100%)
Codes:
200: 295
数据加载器的结果
All virtual users finished
Summary report @ 10:09:09(-0500) 2018-11-23
Scenarios launched: 5
Scenarios completed: 5
Requests completed: 295
RPS sent: 65.85
Request latency:
min: 1.5
max: 71.9
median: 3.3
p95: 19.4
p99: 36.2
Scenario counts:
GraphQL Query load test: 5 (100%)
Codes:
200: 295
【讨论】:
查看GraphQL documentation 的Serving over HTTP 部分
当接收到 HTTP GET 请求时,GraphQL 查询应该在“query”查询字符串中指定。
因此,您只需将 GraphQL 查询附加到您的请求 URL。
关于“最佳实践” - 您应该遵循 Web 应用程序和 HTTP API 测试的“正常”建议,例如查看REST API Testing - How to Do it Right 文章。
【讨论】: