Javascript 确定哪些检查失败

Javascript 确定哪些检查失败,javascript,load-testing,k6,Javascript,Load Testing,K6,我正在对后端进行负载测试,如果测试失败,我将进行一些检查以添加到错误中。我可以收集失败的检查并将其添加到错误集合中,但我想知道如何识别失败的检查并将标记添加到与失败对应的错误集合中 我可以看到Check()函数采用可选的第三个参数tags,但似乎没有关于如何使用它的示例 以下是我当前的代码: export let errorRate = new Rate('errors'); export let checks = { 'Response Time': r => r.timings

我正在对后端进行负载测试,如果测试失败,我将进行一些检查以添加到错误中。我可以收集失败的检查并将其添加到错误集合中,但我想知道如何识别失败的检查并将标记添加到与失败对应的错误集合中

我可以看到Check()函数采用可选的第三个参数
tags
,但似乎没有关于如何使用它的示例

以下是我当前的代码:

export let errorRate = new Rate('errors');
export let checks = {
    'Response Time': r => r.timings.duration < 2000, // Response time should be less than 2seconds
    'status was 200': r => r.status == 200, // Response status should be 200
};

export default function() {
  let res = http.get('https://url');
  const result = check(res, checks);
  errorRate.add(!result, { type: 'failure type' }); //I'd like to set the type as either response or code here

  sleep(1);
}
export let errorRate=新速率(“错误”);
出口许可证={
“响应时间”:r=>r.timeings.duration<2000,//响应时间应小于2秒
“状态为200”:r=>r.status==200,//响应状态应为200
};
导出默认函数(){
让res=http.get('https://url');
const result=检查(res,checks);
errorRate.add(!result,{type:'failure type'});//我想在这里将类型设置为响应或代码
睡眠(1);
}
像这样的东西可以工作,但这不是可伸缩的意思,更多的检查=更多的if条件。我正在寻找一个更简单的解决方案,它可以很容易地扩展到检查数量

var result;
  result = check(res, {'Response Time': r => r.timings.duration < 2000});
  if (!result)
      errorRate.add(1, {type: 'response'}); 
  result = check(res, {'status was 200': r => r.status == 200});
  if (!result)
      errorRate.add(1, {type: 'status'}); 
var结果;
结果=检查(res,{'Response Time':r=>r.timings.duration<2000});
如果(!结果)
添加(1,{type:'response'});
结果=检查(res,{'status为200':r=>r.status==200});
如果(!结果)
添加(1,{type:'status'});

我的最终目标是在influx数据库中记录故障,并存储故障原因,这样我就可以在grafana中添加查询,以显示每个故障的不同轴。

对于您想要的功能,没有内置的k6功能-您可以在您的建议中打开一个问题:D

作为一种解决方法,我可以建议您将支票包装起来,并使用类似

function mycheck(input, checks) {
        for (var checkKey in checks){
                if (!check(input, {[checkKey]: checks[checkKey]})){
                        return checkKey;
                }
        }
        return null;
}

export default function() {
        var result = mycheck("something", {
                "first": () => true,
                "second": () => true,
                "third": () => true,
        });
        console.log(result);

        result = mycheck("something", {
                "first": () => true,
                "second": () => false,
                "third": () => false,
        });
        console.log(result);
}

将打印失败的支票:

INFO[0001] null
INFO[0001] second

running (00m00.0s), 0/1 VUs, 1 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs  00m00.0s/10m0s  1/1 iters, 1 per VU


    ✓ first
    ✗ second
     ↳  50% — ✓ 1 / ✗ 1
    ✓ third

    checks...............: 80.00% ✓ 4 ✗ 1
    data_received........: 0 B    0 B/s
    data_sent............: 0 B    0 B/s
    iteration_duration...: avg=263.44µs min=263.44µs med=263.44µs max=263.44µs p(90)=263.44µs p(95)=263.44µs
    iterations...........: 1      21.670176/s

没有你想要的内置k6功能-你可以在你的提案中提出一个问题:D

作为一种解决方法,我可以建议您将支票包装起来,并使用类似

function mycheck(input, checks) {
        for (var checkKey in checks){
                if (!check(input, {[checkKey]: checks[checkKey]})){
                        return checkKey;
                }
        }
        return null;
}

export default function() {
        var result = mycheck("something", {
                "first": () => true,
                "second": () => true,
                "third": () => true,
        });
        console.log(result);

        result = mycheck("something", {
                "first": () => true,
                "second": () => false,
                "third": () => false,
        });
        console.log(result);
}

将打印失败的支票:

INFO[0001] null
INFO[0001] second

running (00m00.0s), 0/1 VUs, 1 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs  00m00.0s/10m0s  1/1 iters, 1 per VU


    ✓ first
    ✗ second
     ↳  50% — ✓ 1 / ✗ 1
    ✓ third

    checks...............: 80.00% ✓ 4 ✗ 1
    data_received........: 0 B    0 B/s
    data_sent............: 0 B    0 B/s
    iteration_duration...: avg=263.44µs min=263.44µs med=263.44µs max=263.44µs p(90)=263.44µs p(95)=263.44µs
    iterations...........: 1      21.670176/s