Кой е най-добрият начин за организиране и структуриране на проект на Gatling за тестване на ефективността?
Когато проектираме рамка, трябва да помислим за поддръжката и разширяемостта, така че как сме организирали компонентите е много важно.
В този урок ще покажем как да създадем рамка за тестване на производителността от нулата, използвайки Gatling и maven.
Предварителни условия:
За този урок трябва да имате инсталирано следното:
Първо, ние създаваме основен проект, като стартираме архетипа 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 трябва да изглежда така:
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 потребител.