记录仪
我想执行多个线程(虚拟用户)调用的函数
仅在给定的持续时间(即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/

10-11 05:41