使用 k6 测试 graphql 订阅

Posted

技术标签:

【中文标题】使用 k6 测试 graphql 订阅【英文标题】:Testing graphql subscriptions with k6 【发布时间】:2021-02-28 15:03:04 【问题描述】:

是否可以使用 k6 框架测试 graphql 订阅? 我试着去做,但没有太大的成功。也尝试用 k6 websockets 来做,但没有帮助。 谢谢

【问题讨论】:

【参考方案1】:

Grapqhql Subscription 是基于Websockets,所以理论上可以使用 k6 WebSocket 来实现。

您也可以参考订阅文档here。 您还可以使用开发人员工具中的 Playground 和 Networks 选项卡来确定发送到服务器的消息/请求。

这是我实现它的方法:

import ws from "k6/ws";

export default function()
const url = "ws://localhost:4000/graphql" // replace with your url
  const token = null; // replace with your auth token
  const operation = `
  subscription PostFeed 
    postCreated 
      author
      comment
    
  ` // replace with your subscription
  const headers = 
    "Sec-WebSocket-Protocol": "graphql-ws",
  ;

  if (token != null) Object.assign(headers, Authorization: `Bearer $token`);

  ws.connect(
    url,
    
      headers,
    ,
    (socket) => 
      socket.on("message", (msg) => 
        const message = JSON.parse(msg);
        if (message.type == "connection_ack")
          console.log("Connection Established with WebSocket");
        if (message.type == "data") console.log(`Message Received: $message`)
      );
      socket.on("open", () => 
        socket.send(
          JSON.stringify(
            type: "connection_init",
            payload: headers,
          )
        );
        socket.send(
          JSON.stringify(
            type: "start",
            payload: 
              query: operation,
            ,
          )
        );
      );
    
  );

  

希望这会有所帮助! ?

【讨论】:

以上是关于使用 k6 测试 graphql 订阅的主要内容,如果未能解决你的问题,请参考以下文章

我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphq

无法使用 graphq-request 表示嵌套对象输入类型的数组

如何使用 nestjs-graphql-fastify 服务器上传文件以及如何测试此类功能?

测试安全的 graphql 订阅

嵌入 Jetty 10 的 GraphQL 订阅

如何在 jest / apollo 客户端中捕获被拒绝的 graphql 订阅?