Определите, какая проверка не удалась

Я выполняю нагрузочное тестирование бэкэнда и добавляю пару проверок к ошибке в случае неудачи. Я могу собрать неудачную проверку и добавить ее в коллекцию ошибок, но я хотел бы знать, как определить, какая проверка не удалась, и добавить тег в коллекцию ошибок, соответствующую ошибке.

Я мог видеть, что функция 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);
}

Что-то вроде этого может работать, но это не масштабируемое значение, больше проверок = больше условий. Я ищу более упрощенное решение, которое может легко масштабироваться до количества проверок.

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'}); 

Моя конечная цель — записывать сбои в базу данных притока и сохранять причину сбоя, чтобы я мог добавлять запросы в grafana для отображения разных осей для каждого сбоя.


person Vijai    schedule 27.08.2020    source источник


Ответы (1)


В 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
person Михаил Стойков    schedule 01.09.2020