记录仪
我想执行多个线程(虚拟用户)调用的函数
仅在给定的持续时间(即IsElapsedTime)过去之后,函数printDebugLogs(debugLogsRepo)和printResponseCodeRepo(responseCodeRepo)函数
返回true。当前所有线程多次执行此函数。
//记录器功能由多线程执行
var debugLogsRepo = []
var responseCodeRepo=new Map();
var duration;
var startTime=new Date().getSeconds();
export function Logger(url, request, response, reqFrom, conf) {
//If logging enable
if (conf.logging) {
//ClienSide logging enable
if (conf.clientSideLog) {
//If request failed
pushFailedRequest(url, request, response, reqFrom, debugLogsRepo);
}
//Insert all response codes(i.e pass and failed)
pushResponseCodeStats(response, responseCodeRepo)
//Condition based on which flush logs
if ((IsTimeElapsed(conf))) {
printDebugLogs(debugLogsRepo);
printResponseCodeRepo(responseCodeRepo)
}
}
}
//If duration has been passed
export function IsTimeElapsed(conf) {
var duration = conf.logInterval;
var currentTime = new Date().getSeconds();
if ((Number(startTime) + Number(duration)) <= currentTime) {
startTime = new Date().getSeconds();
return true
}
return false;
}
最佳答案
k6中的每个VU都是独立运行的JavaScript运行时,甚至有可能在单独的计算机上运行,因此您无法在VU之间同步这些内容。
如果要调试,则只需一个VU即可运行脚本。或者,如果由于某种原因需要在调试时运行多个VU,则可以通过检查__VU
execution context variable在单个VU中打印调试日志:
if (__VU == 1) {
// print logs
}
关于javascript - 对所有线程执行一次功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59859583/