使用 k6 测试 graphql 订阅

nik*_*kov 2 load-testing k6

是否可以使用 k6 框架测试 graphql 订阅?我尝试这样做,但没有取得太大成功。还尝试使用 k6 websockets 来做到这一点,但没有帮助。谢谢

小智 6

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

您还可以在此处参阅订阅文档。您还可以使用开发人员工具中的 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,
            },
          })
        );
      });
    }
  );
}
  
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!