Структура тэсціравання прадукцыйнасці з 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

Файл 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 карыстальнікам.