Рамка за тестване на ефективността с 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 и recorder.conf. Няма да ги обсъждаме в този урок.

Архетипът на Gatling maven също създава три основни обекта Scala, но няма да ги използваме, затова продължете и изтрийте обектите.


Освен това ще създадем четири пакета, конфиг , заявки , сценарии , и симулации :

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

В конфигурационния пакет създайте 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 file

Файлът 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 потребител.