Комментарии 3
Статья хорошая. Для целей отслеживания деградаций я бы порекомендовал заменить подход с нагрузкой в пользователях/потоках без пауз: startVUs: 100, target: 1000 на профиль с фиксированной нагрузкой. Так можно будет оценивать время ответа.
Если этого не сделать, то вот приложение обрабатывало запросы от 100 потоков пусть за 100 мсек и мы получали 1000 rps. Вот оно стало оптимальнее, и готово обрабатывать запросы за 50 мсек, но в него приходит нагрузка в 2000 rps и мы получаем все равно тормоза и те же 100 мсек - не видим разницы.
В подходе с пулом подключений основная метрика не http_req_duration а
http_reqs......................: 10908 1081.901504/s
Если стало ниже, чем вчера - стало хуже.
А вот если подавать постоянную нагрузку, пусть в 150 rps, например, как на продуктиве или близко, вот так
https://k6.io/docs/using-k6/scenarios/executors/constant-arrival-rate
то будет тест для регрессионного тестирования, в котором можно замерять время ответа.
У вас есть пример скрипта для k6, как тестировать приложение c подзапросами, где есть первичный http.get('http://testserver:5000'), который вызывает еще несколько rest/graphql get чтоб их ответы отобразить на странице? Ведь скорость загрузки страницы — это совокупность всех запросов. В данном случае k6 измерит только статичный начальный Get?
Например в JMeter во время записи, рекордер позволяет сгруппировать все подзапросы для страницы и измерить скорость для всей группы запросов как нагрузку для одной страницы.
Или для этого и необходим batch, но придется все анализировать и кодить вручную? Спасибо.
Можно собрать k6 с дополнительным модулем xk6-browser (задача непростая) или скачать собранный. Использовать функцию setup, чтобы один раз открыть страницу и получить ее ресурсы используя Route — https://try.playwright.tech/?e=intercept-requests.
// Log and continue all network requests
page.route('**', (route, request) => {
if(request.method() == 'GET' &&
request.url().toString().indexOf('testserver:5000/')>0) {
console.log(request.url()); // тут копирование в список
}
route.continue();
});
Положить ссылки на ресурсы в список или в map, где ключ будет базовой ссылкой, а значениями — список ссылок на связанные ресурсы. Написать два теста. Один, который загружает только базовую ссылку, пусть в 95% случаев и второй, которой имитирует загрузку с пустым кешем браузера, пусть в 5% случаев. Загрузка с пустым кешем — это загрузка всех ссылок
Это сложный способ описал. Простой может кто-то еще подскажет
Интеграция нагрузочного тестирования на Grafana K6 в CI/CD