如何在k6中为Websocket创建步骤Lad

问题描述

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

export let options = {
    stages: [
        {
            "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 });
})
})
})
}

解决方法

documentation ws.connect块中所述,直到通过调用socket.close()或服务器在另一端关闭连接(或由于执行某操作时发生错误)而关闭连接其他)。

因此,如果您只想发送2条消息,则应致电socket.close()。您也可以使用

在收到另一端的东西后关闭
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连接,但这可能是您的错误,并且如果您不使用与{不同的变量名,则可能会使代码难以阅读{1}}