【问题标题】:How create step lad in k6 for websocket如何在 k6 中为 websocket 创建 step lad
【发布时间】:2020-08-13 09:05:13
【问题描述】:

我尝试为 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 });
})
})
})
}

【问题讨论】:

    标签: performance websocket k6


    【解决方案1】:

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

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

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

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

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

    每 1.5 秒发送一次消息

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

    【讨论】:

    • 我打开新的套接字作为新的用户连接。我需要为它模拟负载。我应该为这种情况添加变量吗?
    • 我想你的意思是内部 websocket?您不是必需的,但我建议您使用 outerSocketinnerSocket 而不是只使用 socket 以便在脚本中更易于理解
    • Like ``` const outerResponse = ws.connect(url, params, function(outerSocket) { /// 用 outerSocket 做一些事情 const innerResponse = ws.connect(url, params, function(innerSocket) { // 这里你可以同时使用innerSocket 和outerSocket,这是可以理解的 }) // 使用outerSocket }) ``` 当然你也可以使用其他在你和脚本上下文中更有意义的名字
    • 你是对的。我打开了插座 2 次。删除了第一个,现在可以按预期使用阶段
    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2022-06-28
    • 2014-08-05
    • 2011-05-06
    相关资源
    最近更新 更多