【问题标题】:Performance test for graphQL APIgraphQL API 的性能测试
【发布时间】:2018-04-11 02:28:55
【问题描述】:

今天,当服务器是 REST API 时,我正在使用 Jmeter 进行 API 自动化测试和性能测试。

现在开发改为graphQL API,我有两个问题:

  1. 执行自动化 API 和性能测试的最佳方法是什么?
  2. Jmeter 是否支持 graphQL API?

【问题讨论】:

    标签: jmeter performance-testing graphql


    【解决方案1】:

    最简单的方法是直接在 JMeter 中使用 GraphQL 查询,而无需将它们转换为 JSON。

    您需要做的就是在标题中将“Content-Type”作为“application/graphql”传递。

    Image Link for: HTTP Request with GraphQL Query as input

    Image Link for: Header details

    【讨论】:

      【解决方案2】:

      我最近尝试使用 GraphQl 在 Jmeter 中使用 GET 和 POST 请求进行 API 测试

      确保它的 POST 请求同时针对 Query 和 Mutation

      Graph Ql 查询示例

      {
        storeConfig{
          default_title
          copyright
        }
      }
      

      对于 Jmeter 应该是这样的

      {
          "query":"{ storeConfig { default_title copyright } }"
      }
      

      加强 HTTP 请求

      您的域名将代替本地主机。确保你没有添加 https

      示例:- https://mydomainname.com

      Jmeter 中:- mydomainname.com

      设置 HTTP 标头管理器

      用于在 Jmeter

      中请求 Mutation

      Graphql 中的示例突变

       mutation {
            generateCustomerToken(
                email: "rd@mailinator.com"
                password: "1234567"
            ) {
                token
         }
      }
      

      Jemeter突变会是这样的

      {
          "query":"mutation { generateCustomerToken( email: \"rd@mailinator.com\" password: \"1234567\" ) { token } }"
      }
      

      双引号替换为 (\") 如上查询所示

      【讨论】:

        【解决方案3】:

        我使用Apollo构建GraphQL服务器,并使用JMeter查询GraphQL API如下。

        1。设置 HTTP 请求

        2。设置 HTTP 标头

        根据您的应用程序,您可能还需要为 JWT Web 令牌设置 HTTP 标头授权,例如:

        Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxx
        

        3。如果您的应用需要,请设置 HTTP Cookie

        4。运行测试

        【讨论】:

        • 这让我可以在同一个平台上测试我们的 REST API 和 GraphQL 端点。要记住的一件事是使用字符串中的 \(反斜杠)作为双引号。
        • 注意事项 1. 在双引号内,如果有双引号,用 (\") 替换。 2. 查询应该是一行而不是多行
        • @Yuci,我们如何传递从 csv 文件中读取的变量?
        【解决方案4】:

        我正在测试我们的 GraphQL 实现,您需要:

        【讨论】:

        • 试过你的解决方案没用,请测试后再放解决方案。它显示错误:- {"errors":[{"message":"Syntax Error: Unexpected ","extensions":{"category":"graphql"},"locations":[{"line" :1,"column":1}]}]}
        【解决方案5】:

        免责声明:我为 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}
        );
        

        【讨论】:

          【解决方案6】:

          您可以尝试使用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
          

          【讨论】:

            【解决方案7】:

            查看GraphQL documentationServing over HTTP 部分

            当接收到 HTTP GET 请求时,GraphQL 查询应该在“query”查询字符串中指定。

            因此,您只需将 GraphQL 查询附加到您的请求 URL。

            关于“最佳实践” - 您应该遵循 Web 应用程序和 HTTP API 测试的“正常”建议,例如查看REST API Testing - How to Do it Right 文章。

            【讨论】:

              猜你喜欢
              • 2018-04-15
              • 2018-10-28
              • 2017-10-10
              • 2018-05-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多