Які найлепшы спосаб арганізаваць і структураваць праект 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 карыстальнікам.