@@ -3,6 +3,7 @@ import http from "k6/http";
33import { check , sleep } from "k6" ;
44import { Counter , Trend } from "k6/metrics" ;
55import { helloWorld } from "./sources.js" ;
6+ import { getRandomId , generateToken } from "./tokenHelpers.js" ;
67import {
78 LONG_REQUEST_MS ,
89 EXTRA_LONG_REQUEST_MS ,
@@ -13,24 +14,24 @@ import {
1314 WEBSOCKET_PARAMS ,
1415 getTestOptions
1516} from "./configuration.js" ;
16- import generateToken from "./generateToken.js" ;
1717
1818// Change these options to increase the user goal or time to run the test.
1919export const options = getTestOptions (
20- /* User goal */ 100 ,
21- /* Ramp up time minutes */ 1 ,
22- /* High load time minutes */ 1
20+ /* User goal */ 1000 ,
21+ /* Ramp up time minutes */ 5 ,
22+ /* High load time minutes */ 10
2323) ;
2424
2525// Change this to test different code
2626const sourceToTest = helloWorld ;
27+ // Timeout is we go greater than the max request time to ensure we stay
28+ // close to our concurrent user goal.
29+ const MAX_REQUEST_TIME_MS = 20000 ;
2730
2831const exceptionCounter = new Counter ( "exceptions" ) ;
2932const errorCounter = new Counter ( "errors" ) ;
30- const connectToCloseTime = new Trend (
31- "websocket_session_duration_without_sleep" ,
32- true
33- ) ;
33+ const timeoutCounter = new Counter ( "timeouts" ) ;
34+ const totalRequestTime = new Trend ( "total_request_time" , true ) ;
3435// websocket sessions > LONG_REQUEST_MS
3536const longWebsocketSessions = new Counter ( "long_websocket_sessions" ) ;
3637// websocket sessions > EXTRA_LONG_REQUEST_MS
@@ -42,7 +43,9 @@ function isResultSuccess(result) {
4243}
4344
4445export default function ( ) {
45- const authToken = generateToken ( MiniAppType . CONSOLE ) ;
46+ const requestStartTime = Date . now ( ) ;
47+ const sessionId = getRandomId ( ) ;
48+ const authToken = generateToken ( MiniAppType . CONSOLE , sessionId ) ;
4649 const uploadResult = http . put (
4750 UPLOAD_URL + authToken ,
4851 sourceToTest ,
@@ -53,41 +56,57 @@ export default function () {
5356
5457 if ( isResultSuccess ( uploadResult ) ) {
5558 const res = ws . connect ( WEBSOCKET_URL + authToken , WEBSOCKET_PARAMS , ( socket ) =>
56- onSocketConnect ( socket , Date . now ( ) )
59+ onSocketConnect ( socket , requestStartTime , Date . now ( ) , sessionId )
5760 ) ;
5861
5962 check ( res , { "websocket status is 101" : ( r ) => r && r . status === 101 } ) ;
63+ } else {
64+ console . log ( `ERROR upload failed for session id ${ sessionId } ` ) ;
6065 }
6166}
6267
63- function onSocketConnect ( socket , startTime ) {
64- socket . on ( "open" , ( ) => { } ) ;
68+ function onSocketConnect ( socket , requestStartTime , websocketStartTime , sessionId ) {
69+ socket . on ( "open" , ( ) => {
70+ socket . setTimeout ( ( ) => {
71+ console . log ( `Triggering TIMEOUT for session id ${ sessionId } , request has gone longer than ${ MAX_REQUEST_TIME_MS } ms.` ) ;
72+ socket . close ( ) ;
73+ } , MAX_REQUEST_TIME_MS ) ;
74+ } ) ;
6575
6676 socket . on ( "message" , function ( data ) {
6777 const parsedData = JSON . parse ( data ) ;
6878 if ( parsedData . type === "EXCEPTION" ) {
69- console . log ( "[ EXCEPTION] " + parsedData . value ) ;
79+ console . log ( ` EXCEPTION for session id ${ sessionId } ` + parsedData . value ) ;
7080 exceptionCounter . add ( 1 ) ;
7181 }
7282 } ) ;
7383
7484 socket . on ( "close" , ( ) => {
75- const time = Date . now ( ) - startTime ;
76- connectToCloseTime . add ( time ) ;
77- if ( time > LONG_REQUEST_MS ) {
78- longWebsocketSessions . add ( 1 ) ;
79- }
80- if ( time > EXTRA_LONG_REQUEST_MS ) {
81- extraLongWebsocketSessions . add ( 1 ) ;
85+ const websocketTime = Date . now ( ) - websocketStartTime ;
86+ const totalTime = Date . now ( ) - requestStartTime ;
87+ if ( websocketTime < MAX_REQUEST_TIME_MS ) {
88+ // only log requests that didn't time out, as timeouts are a separate metric.
89+ totalRequestTime . add ( totalTime ) ;
90+ if ( totalTime > EXTRA_LONG_REQUEST_MS ) {
91+ console . log ( `EXTRA LONG REQUEST Session id ${ sessionId } had a request time of ${ totalTime } ms.` ) ;
92+ extraLongWebsocketSessions . add ( 1 ) ;
93+ } else if ( totalTime > LONG_REQUEST_MS ) {
94+ console . log ( `LONG REQUEST Session id ${ sessionId } had a request time of ${ totalTime } ms.` ) ;
95+ longWebsocketSessions . add ( 1 ) ;
96+ }
97+ } else {
98+ console . log ( `TIMEOUT detected for session id ${ sessionId } ` ) ;
99+ timeoutCounter . add ( 1 ) ;
82100 }
83- const sleepTime = Math . floor ( 20 - ( time / 1000 ) ) ;
101+
102+ const sleepTime = Math . floor ( ( MAX_REQUEST_TIME_MS - totalTime ) / 1000 ) ;
84103 if ( sleepTime > 0 ) {
85104 sleep ( sleepTime ) ;
86105 }
87106 } ) ;
88107
89108 socket . on ( "error" , function ( e ) {
90- console . log ( "[ ERROR] " + e . error ( ) ) ;
109+ console . log ( ` ERROR on websocket request for session id ${ sessionId } ` + e . error ( ) ) ;
91110 errorCounter . add ( 1 ) ;
92111 } ) ;
93112}
0 commit comments