为所有线程执行一次函数

Execute functions once for all Threads

记录器 多个线程(虚拟用户)调用的函数。我想执行 函数 printDebugLogs(debugLogsRepo) 和 printResponseCodeRepo(responseCodeRepo) 仅在给定持续时间过去后即 IsElapsedTime 时 return true.Currently 所有线程多次执行此函数。

//多线程执行的Logger函数

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 都是一个独立的 运行ning JavaScript 运行时间,甚至可能在不同的机器上,所以你不能在 VU 之间同步这些东西。

如果您正在调试,您可以简单地 运行 您的脚本只有一个 VU。或者,如果出于某种原因您在调试时需要 运行 多个 VU,您可以通过检查 __VU execution context variable:

仅在单个 VU 中打印调试日志
if (__VU == 1) {
    // print logs
}