Пример нагрузочного тестирования с Gatling
1. обзор
Вprevious tutorial мы увидели, как использовать Gatling для нагрузочного тестирования пользовательского веб-приложения.
В этой статье мы воспользуемся стресс-инструментом Гатлинга, чтобы измерить производительность тестовой среды на этом веб-сайте.
2. Сценарий тестирования
Давайте сначала настроим наш основной сценарий использования, который приближается к типичному пользователю, который может просматривать сайт:
-
Перейти на домашнюю страницу
-
Открыть статью с домашней страницы
-
Перейти в путеводители / ОТДЫХ
-
Перейти в категорию отдыха
-
Перейти в полный архив
-
Открыть статью из архива
3. Запишите сценарий
Теперь мы запишем наш сценарий с помощью рекордера Гатлинга следующим образом:
$GATLING_HOME/bin/recorder.sh
А для пользователей Windows:
%GATLING_HOME%\bin\recorder.bat
Примечание.GATLING_HOME - это каталог установки Gatling.
Естьtwo modes for Gatling Recorder: HTTP Proxy и HAR Converter.
Мы подробно обсудили режим HTTP-прокси вprevious tutorial, поэтому давайте теперь рассмотрим вариант HAR Converter.
3.1. Конвертер HAR
HAR - это сокращение от HTTP Archive - это формат, в основномrecords the full information about a browsing session.
Мы можем получить HAR-файлы из браузера, а затем использовать Gatling Recorder, чтобы преобразовать его в симуляцию.
Мы создадим наш HAR-файл с помощью инструментов разработчика Chrome:
-
Меню → Дополнительные инструменты → Инструменты разработчика
-
Перейти на вкладкуNetwork
-
Убедитесь, чтоPreserve log отмечен
-
После того, как вы закончите навигацию по сайту, щелкните правой кнопкой мыши на запросах, которые вы хотите экспортировать
-
Затем выберите Копировать все как HAR
-
Вставьте их в файл, затем импортируйте его из регистратора Гатлинга
После того, как вы закончите настройку регистратора Гатлинга в соответствии с вашими предпочтениями, нажмите «Пуск».
Обратите внимание, что папка вывода по умолчаниюGATLING_HOME/user-files-simulations
4. Моделирование
Сгенерированный файл симуляции аналогично написан на Scala. В целом это нормально, но не очень читабельно, поэтому мы внесем некоторые изменения, чтобы очистить. Вот наша последняя симуляция:
class RestSimulation extends Simulation {
val httpProtocol = http.baseURL("http://staging.example.com")
val scn = scenario("RestSimulation")
.exec(http("home").get("/"))
.pause(23)
.exec(http("article_1").get("/spring-rest-api-metrics"))
.pause(39)
.exec(http("rest_series").get("/rest-with-spring-series"))
.pause(60)
.exec(http("rest_category").get("/category/rest/"))
.pause(26)
.exec(http("archive").get("/full_archive"))
.pause(70)
.exec(http("article_2").get("/spring-data-rest-intro"))
setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
}
Здесь важно отметить, что полный файл моделирования намного больше; здесьwe didn’t include static resources для простоты.
5. Запустите нагрузочный тест
Теперь мы можем запустить нашу симуляцию следующим образом:
$GATLING_HOME/bin/gatling.sh
А для пользователей Windows:
%GATLING_HOME%\bin\gatling.bat
Инструмент Gatling просканируетGATLING_HOME/user-files-simulations и выведет список всех найденных имитаций, которые мы можем выбрать.
Вот как выглядят результаты после запуска моделирования:
Для одного пользователя:
> request count 304 (OK=304 KO=0)
> min response time 75 (OK=75 KO=-)
> max response time 13745 (OK=13745 KO=-)
> mean response time 1102 (OK=1102 KO=-)
> std deviation 1728 (OK=1728 KO=-)
> response time 50th percentile 660 (OK=660 KO=-)
> response time 75th percentile 1006 (OK=1006 KO=-)
> mean requests/sec 0.53 (OK=0.53 KO=-)
---- Response Time Distribution ------------------------------------
> t < 800 ms 183 ( 60%)
> 800 ms < t < 1200 ms 54 ( 18%)
> t > 1200 ms 67 ( 22%)
> failed 0 ( 0%)
Для 5 одновременных пользователей:
> request count 1520 (OK=1520 KO=0)
> min response time 70 (OK=70 KO=-)
> max response time 30289 (OK=30289 KO=-)
> mean response time 1248 (OK=1248 KO=-)
> std deviation 2079 (OK=2079 KO=-)
> response time 50th percentile 504 (OK=504 KO=-)
> response time 75th percentile 1440 (OK=1440 KO=-)
> mean requests/sec 2.411 (OK=2.411 KO=-)
---- Response Time Distribution ------------------------------------
> t < 800 ms 943 ( 62%)
> 800 ms < t < 1200 ms 138 ( 9%)
> t > 1200 ms 439 ( 29%)
> failed 0 ( 0%)
Для 10 одновременных пользователей:
> request count 3058 (OK=3018 KO=40)
> min response time 0 (OK=69 KO=0)
> max response time 44916 (OK=44916 KO=30094)
> mean response time 2193 (OK=2063 KO=11996)
> std deviation 4185 (OK=3953 KO=7888)
> response time 50th percentile 506 (OK=494 KO=13670)
> response time 75th percentile 2035 (OK=1976 KO=15835)
> mean requests/sec 3.208 (OK=3.166 KO=0.042)
---- Response Time Distribution ----------------------------------------
> t < 800 ms 1752 ( 57%)
> 800 ms < t < 1200 ms 220 ( 7%)
> t > 1200 ms 1046 ( 34%)
> failed 40 ( 1%)
Обратите внимание, что при тестировании 10 одновременных пользователей некоторые из запросов не были выполнены - просто потому, что промежуточная среда не способна обрабатывать такую нагрузку.
6. Заключение
В этой быстрой статье мы изучили вариант HAR для записи тестовых сценариев в Gatling, а также провели простой начальный тест example.com.