0

我尝试为 websocket 的 k6 性能测试生成步进负载。常规设置,例如

export let options = {
    stages: [
        {
            "duration": "0m30s",
            "target": 10
        },
        {
            "duration": "0m30s",
            "target": 10
        },
        {
            "duration": "0m30s",
            "target": 0
        }
    ],

};

不适用于k6。我试过--vus 10 --i 10 了,但它只是经历了 10 次场景并睡到 10 分钟结束。

比我尝试过k6 run --vus 5 --stage 3m:10,5m:10,10m:35,1m30s:0的,但结果几乎相同。如何使用步进模式为 websocket 测试创建主动负载?每次流量完成后都要连接?

测试流程:

import ws from "k6/ws";
import { check } from "k6";

export default function() {
  const url = "ws://URL:8000/";
  const params = { tags: { my_tag: "hello" } };

  const response = ws.connect(url, params, function(socket) {
    socket.on("open", function open() {
      console.log("connected");
      socket.send(Date.now());


   var url = "ws://URL:8000/";
   var response = ws.connect(url, null, function(socket) {
    socket.on('open', function() {
      socket.send('Hello');
      socket.send('How are you?');
    });



    socket.on("close", () => console.log("disconnected"));

    socket.on("error", (e) => {
      if (e.error() != "websocket: close sent") {
        console.log("An unexpected error occured: ", e.error());
      }
    });

  check(response, { "status is 101": r => r && r.status === 101 });
})
})
})
}
4

1 回答 1

0

如文档 中所述,ws.connect直到通过调用socket.close()或服务器关闭另一端的连接(或由于执行其他操作时出错)关闭连接。

因此,如果您只想在那里发送 2 条消息,您应该调用socket.close(). 你也可以在对方收到东西后关闭使用 by using

socket.on("message", function(msg) {
 console.log("got: "+ msg);
 socket.close();
}

但是,如果您不需要重新连接而是只想发送更多消息,您可能应该使用计时器

      socket.setInterval(function() {
        socket.send('Hello');
        socket.send('How are you?');
      }, 1500);

每 1.5 秒发送一次消息

我不知道为什么你在另一个内部打开另一个 websocket 连接,但这可能是你的错误,如果你不使用不同的变量名,可能会使代码难以阅读socket

于 2020-08-13T11:30:31.053 回答