使用 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 表示嵌套对象输入类型的数组