问题描述
我尝试为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}}