Репозиторий программы находится тут https://github.com/wg/wrk
Для установки нужно загрузить себе исходники и скопмилировать программу, для этого нужны компиллятор, git и ssl библиотеки.
1 2 3 4 | sudo apt-get install build-essential libssl-dev git git clone https://github.com/wg/wrk.git cd wrk make |
После полученный исполняемый файл можно перенести в директорию с бинарниками:
1 | sudo cp wrk /usr/local/bin |
Теперь перейдем непосредственно к тестированию приложения. Команда на тест выглядит следующим образом:
1 | wrk -t8 -c200 -d30s --timeout 2s http://localhost:8080/api |
Параметры:
-t8: Устанавливает работу в восемь потоков.
-c200: Открывает 200 соединений.
-d30s: Продолжительность теста 30 секунд.
—timeout 2s: Таймаут на запросы по 2 секунды.
http://localhost:8080/api Приложение, которое мы тестируем (слушает порт 8080, path /api).
Получаем следующий результат:
1 2 3 4 5 6 7 8 9 | Running 30s test @ http://localhost:8080/api 8 threads and 200 connections Thread Stats Avg Stdev Max +/- Stdev Latency 16.25ms 91.14ms 762.58ms 97.72% Req/Sec 4.61k 2.18k 16.12k 71.38% 785314 requests in 30.00s, 303.6MB read Socket errors: connect 0, read 0, write 0, timeout 27 Requests/sec: 26177.13 Transfer/sec: 10.12MB |
Опишем какие значения что демонстрируют. Первые две строки описывают конфигурацию теста.
1 2 | Running 30s test @ http://localhost:8080/api 8 threads and 200 connections |
Дальше идут статистические данные о запросах. Среднее, максимальное время и другие.
1 2 3 | Thread Stats Avg Stdev Max +/- Stdev Latency 16.25ms 91.14ms 762.58ms 97.72% Req/Sec 4.61k 2.18k 16.12k 71.38% |
Следом идут данные о количестве запросов, ошибках, полученных данных.
1 2 3 4 | 785314 requests in 30.00s, 303.6MB read Socket errors: connect 0, read 0, write 0, timeout 27 Requests/sec: 26177.13 Transfer/sec: 10.12MB |
Как можно понять, всего было сделано 785314 запроса за 30 секунд, тоесть 26177.13 запросов в секунду.
Обычно тесты запускаются для нескольких конфигурациях приложения, с использованием различных модулей и библиотек и т.п. Лучший результат теста показывает высокое значение Requests/sec и в то же время низкое Latency.
Помимо wrk существуют и другие утилиты для нагрузочного тестирования, например, yandex-tank. https://github.com/yandex/yandex-tank.