使用 k6 测试 graphql 订阅

问题描述

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

解决方法

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,})
        );
      });
    }
  );
}
  

希望这有帮助! ?