问题描述
是否可以使用 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,})
);
});
}
);
}
希望这有帮助! ?