Платформа тестирования производительности с помощью Gatling и Maven

Как лучше всего организовать и структурировать проект Gatling для тестирования производительности?

При разработке фреймворка мы должны думать о ремонтопригодности и расширяемости, поэтому то, как мы организуем компоненты, очень важно.

В этом руководстве мы покажем, как создать среду тестирования производительности с нуля, используя Gatling и maven.




Платформа тестирования Gatling Maven

Предварительные условия:

Для этого урока вам необходимо установить следующее:


  • Java 1.8
  • Maven 3.5
  • IntelliJ с установленным плагином Scala

Сначала мы создаем базовый проект, запустив архетип maven Gatling:

mvn archetype:generate -DarchetypeGroupId=io.gatling.highcharts -DarchetypeArtifactId=gatling-highcharts-maven-archetype

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

При появлении запроса укажите значения для «groupId», «artifactId» и «version».

Моя установка выглядит следующим образом:


Когда вы откроете проект, вы заметите, что есть некоторые файлы и папки по умолчанию.

В рамках ресурсов у нас есть


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

данные этот пакет содержит данные, которые вам нужно передать вашим тестам, например CSV.

В дополнение к двум указанным выше папкам есть файлы Gatling.conf, logback.xml и рекордер.conf. Мы не будем обсуждать это в этом руководстве.

Архетип Gatling maven также создает три базовых объекта Scala, но мы не будем их использовать, поэтому удалите объекты.


Кроме того, мы создадим четыре пакета, config , Запросы , сценарии , а также симуляции :

Пакет конфигурации

В пакете config создайте объект Scala с именем Config. Это будет содержать различные конфигурации для нашего проекта, такие как URL-адреса приложений, пользователей по умолчанию и т. Д.

package io.devqa.config object Config {
val app_url = 'http://example-app.com'
val users = Integer.getInteger('users', 10).toInt
val rampUp = Integer.getInteger('rampup', 1).toInt
val throughput = Integer.getInteger('throughput', 100).toInt }

Пакет запросов

Пакет запросов содержит различные запросы операций. Например, у нас может быть запрос, который получает токен авторизации. Другой запрос может использовать токен из предыдущего запроса для создания пользователя и так далее.


Это отдельные и изолированные запросы, отправленные на разные конечные точки.

GetTokenRequest

package io.devqa.requests import io.gatling.core.Predef._ import io.gatling.http.Predef._ import io.devqa.config.Config.app_url object GetTokenRequest {
val get_token = http('RequestName').get(app_url + '/token')
.check(status is 200)
.check(jsonPath('$..token').saveAs('token')) }

CreateUserRequest

package io.devqa.requests import io.devqa.config.Config.app_url import io.gatling.core.Predef._ import io.gatling.http.Predef._ object CreateUserRequest {
val sentHeaders = Map('Authorization' -> 'bearer ${token}')
val create_user = exec(http('Create User Request')
.post(app_url + '/users')
.headers(sentHeaders)
.formParam('name', 'John')
.formParam('password', 'John5P4ss')
.check(status is 201)
.check(regex('Created').exists)) }

Пакет сценариев

Пакет сценариев содержит бизнес-сценарии. Например, чтобы создать пользователя, мы сначала должны получить токен аутентификации, а затем отправить токен в виде заголовка вместе с параметрами формы для создания пользователя. т.е. мы используем ответ первого запроса для подачи на второй запрос. Такая «цепочка запросов» довольно часто встречается при тестировании API.

CreateUserScenario

package io.devqa.scenarios import io.devqa.requests.{CreateUserRequest, GetTokenRequest} import io.gatling.core.Predef.scenario object CreateUserScenario {
val createUserScenario = scenario('Create User Scenario')
.exec(GetTokenRequest.get_token)
.exec(CreateUserRequest.create_user) }

Пакет моделирования

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

Симуляции должны быть классами Scala и должны расширять класс Gatling Simulation.

package io.devqa.simulations import io.devqa.scenarios.CreateUserScenario import io.gatling.core.Predef.Simulation import io.gatling.core.Predef._ import io.devqa.config.Config._ class CreateUserSimulation extends Simulation {
private val createUserExec = CreateUserScenario.createUserScenario
.inject(atOnceUsers(users))
setUp(createUserExec) }

Ваш проект должен выглядеть следующим образом:

Нам также необходимо изменить наш файл pom.xml, чтобы иметь возможность передавать параметры, такие как пользователи и пропускная способность, нашим тестам производительности во время выполнения.

файл pom.xml

Файл pom.xml должен выглядеть так:


4.0.0
testing-excellence
gatling-framework
1.0-SNAPSHOT

1.8
1.8
UTF-8
2.3.0
2.2.4
1.3.2
CreateUserSimulation



io.gatling.highcharts
gatling-charts-highcharts
${gatling.version}
test


com.typesafe
config
${typesafe-config.version}






io.gatling
gatling-maven-plugin
${gatling-plugin.version}



io.devqa.simulations.${simulation}




-Denv=${env}

-Dusers=${users}

-Drampup=${rampup}

-Dduration=${duration}

-Dthroughput=${throughput}




true





Наконец, чтобы выполнить класс моделирования, мы запускаем следующую команду

mvn clean gatling:execute -Dusers=1

Приведенная выше команда запустит CreateUserSimulation с 1 пользователем.