确定哪些检查失败

Posted

技术标签:

【中文标题】确定哪些检查失败【英文标题】:Identify what check has failed 【发布时间】:2020-08-27 10:03:33 【问题描述】:

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

我可以看到 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);

这样的东西可以工作,但这不是可扩展的意思,更多的检查 = 更多的 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'); 

我的最终目标是在 influx 数据库中记录失败并存储失败的原因,以便我可以在 grafana 中添加查询以显示每次失败的不同轴。

【问题讨论】:

【参考方案1】:

您不应该在失败时手动增加计数器,您可以将标签添加到检查本身,然后在摘要中过滤标签值(并且标签也应该包含在不同的输出中,例如 influxdb , 被选中)。

check(res, 'Response Time': r => r.timings.duration < 2000,  type: 'response'); 
check(res, 'status was 200': r => r.status == 200,  type: 'status');

在您的选项/阈值中:

export const options = 
  thresholds: 
    'checks': [], // overall checks
    'checkstype:response': [], // duration checks
    'checkstype:status': [], // status checks
  

【讨论】:

【参考方案2】:

没有你想要的内置 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

【讨论】:

以上是关于确定哪些检查失败的主要内容,如果未能解决你的问题,请参考以下文章

添加一批实体。调用 SaveChanges() 时如何确定哪些实体失败

如何检查位置设置是不是在更改时失败

导致选型失败的原因有哪些?

databricks 错误 IllegalStateException:事务日志的完整性检查失败

数据源 连接失败

c++程序new一个对象失败,可能都有哪些情况