Как получить значение длительности группы для группы - PullRequest
1 голос
/ 22 мая 2019

У меня есть тест K6, где нагрузочное тестирование потока, и я группирую каждый запрос страницы. Что я хочу сделать, так это выполнить проверку продолжительности каждой группы, что-то вроде


  group('Home page', function(){
         http.get('localhost:8080')
   });
   //something like this 
   check(group.duration, function()=>{'performs check logic'})

   group('search page', function(){
    http.get('localhost:8080/Search?term=mysearch')
   })
   check(group.duration, function()=>{'performs check logic'})

В документации говорится, что группа генерирует group_duration, но не указывается, как ее прослушивать. Не силен в JS, поэтому мои извинения, если это что-то простое.

1 Ответ

1 голос
/ 23 мая 2019

Группы в настоящее время не возвращают свою продолжительность.

Излучать в этом контексте означает, что если вы используете облако вывода json output / influenxdb / stastsd / load для хранения метрик, чем метрика, то есть то, что длительность группы будет отправлена, и вы сможете позже ... делать все, что захотите изнутри метрическое хранилище.

Также синтаксис для check check(variable_name_to_use, map_of_name_to_function_to_calls) так что-то вроде

check(group.duraiton, {
  "checking duration is less than 20 as normal function": function(d){ return d<20}, 
  "checking duration is less than 20 as arrow function": (d)=>{ return d<20}, 
  "checking duration is less than 20 as arrow function without the brackets": (d)=>d<20, 
})

Вам также необходимо указать схему для URL при использовании http.*.

Я также хотел бы отметить, что идея group состоит в том, чтобы измерить, сколько занимает данная группа (!) Запросов или операций. Например, их можно использовать для группировки всех операций, которые включают в себя ваш «вход в систему», «добавление товара в корзину», «оформление заказа и оплата» и так далее. Они, безусловно, полезны, но группирование отдельных запросов, когда все ваши группы представляют собой один запрос, не добавляет никаких новых данных :)

Решение 1: Вы можете сделать это самостоятельно так:

import { check, group } from "k6";
import http from 'k6/http';

export default function() {
        var group_duration;
    group('Home page', function(){
                var start = new Date();
        http.get('http://localhost:8080');
                group_duration = new Date() - start;
    });
    check(group_duration,  {
                "Name of group check": function(d){return d<200}
        })

    group('search page', function(){
                var start = new Date();
        http.get('http://localhost:8080/Search?term=mysearch');
                group_duration = new Date() - start;
    })
        console.log(group_duration);
    check(group_duration,  {
                "Name of group check": (d)=>d<200
        })
}

Конечно, вы можете переместить это в функцию и просто вернуть длительность как:

function mygroup(name, f) {
        var start = new Date();
        group(name, f);
        return new Date() - start;
}

А потом позвоните mygroup и получите продолжительность как

var group_duration = mygroup('Home page', function(){
    http.get('http://localhost:8080');
});

Решение 2: В вашем случае, когда вы используете только один запрос в каждой группе, вы можете использовать тот факт, что запрос действительно возвращает, сколько они взяли. Итак

resp = http.get("google.com");
check (resp.timings.duration, {
    "check response time", (d) => d<200
});

Проверяет, что данный запрос занял менее 200 миллисекунд. Вы можете увидеть больше вещей, которые есть в ответе в документах

Как разработчик K6, я думаю, что то, что вы предлагаете, не является плохой идеей, и я хотел бы, чтобы вы на самом деле открыли вопрос

...