Našumo testavimo sistema su Gatlingu ir Mavenu

Koks yra geriausias būdas organizuoti ir struktūrizuoti „Gatling“ projektą našumo testavimui?

Kurdami sistemą turėtume pagalvoti apie išlaikomumą ir išplėtimą, todėl labai svarbu, kaip organizuosime komponentus.

Šioje pamokoje parodysime, kaip sukurti našumo testavimo sistemą nuo nulio, naudojant „Gatling“ ir „Maven“.




Gatlingo Maveno testavimo sistema

Išankstinės sąlygos:

Šioje pamokoje turite įdiegti:


  • „Java 1.8“
  • Mavenas 3.5
  • „IntelliJ“ su įdiegtu „Scala“ papildiniu

Pirmiausia sukuriame pagrindinį projektą vykdydami „Maven Gatling“ archetipą:

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

Kai vykdysite pirmiau nurodytą komandą, ji pradės atsisiųsti priklausomybes.

Kai būsite paraginti, pateikite „groupId“, „artifactId“ ir „version“ reikšmes.

Mano sąranka atrodo taip:


Atidarę projektą pastebėsite, kad yra keletas numatytųjų failų ir aplankų.

Pagal išteklius turime


kūnai šiame pakete yra užklausos naudingosios apkrovos. Pavyzdžiui, galite turėti įvairių užklausų užklausų šablonus.

duomenis šiame pakete yra duomenys, kuriuos reikia pateikti bandymams, pvz., CSV.

Be pirmiau minėtų aplankų, yra Gatling.conf, logback.xml ir recorder.conf failai. Mes šioje diskusijoje jų neaptarsime.

„Gatling Maven“ archetipas taip pat sukuria tris pagrindinius „Scala“ objektus, tačiau mes jų nenaudosime, todėl pirmyn ir ištrinkite objektus.


Be to, sukursime keturis paketus, konfigūruoti , prašymus , scenarijus ir simuliacijos :

Konfigūruoti paketą

Konfigūracijos pakete sukurkite „Scala“ objektą, pavadintą „Config“. Tai turės įvairias mūsų projekto konfigūracijas, pvz., Programos URL, numatytuosius vartotojus ir kt.

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 }

Užklausų paketas

Užklausų pakete yra skirtingų operacijų užklausų. Pvz., Galime turėti užklausą, kuri gauna prieigos raktą. Kita užklausa gali naudoti ankstesnės užklausos prieigos raktą, kad sukurtumėte vartotoją ir pan.


Tai yra atskiros ir atskiros užklausos, siunčiamos į skirtingus galinius taškus.

„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)) }

Scenarijų paketas

Scenarijų pakete yra verslo scenarijai. Pvz., Norėdami sukurti vartotoją, pirmiausia turime gauti autentifikavimo ženklą ir tada atsiųsti žymą kaip antraštę kartu su formos parametrais, kad sukurtume vartotoją. t., mes naudojame pirmosios užklausos atsakymą į antrąją užklausą. Ši „užklausų grandinė“ yra gana dažna atliekant API testavimą.

„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) }

Modeliavimo paketas

Galiausiai, simuliacijas turime modeliavimo pakete. Jūs galite galvoti apie modeliavimą kaip skirtingą apkrovos profilį. Pavyzdžiui, galime atlikti įprastą apkrovos modeliavimą arba smaigalio modeliavimą.

Modeliavimas turi būti „Scala“ klasės ir pratęsti „Gatling“ modeliavimo klasę.

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) }

Jūsų projektas turėtų atrodyti taip:

Mes taip pat turime modifikuoti savo pom.xml failą, kad galėtume perduoti parametrus, tokius kaip vartotojai ir pralaidumas, mūsų vykdymo testams vykdymo metu.

pom.xml failas

Pom.xml failas turėtų atrodyti taip:


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





Galiausiai, norėdami vykdyti modeliavimo klasę, vykdome šią komandą

mvn clean gatling:execute -Dusers=1

Pirmiau nurodyta komanda vykdys „CreateUserSimulation“ su 1 vartotoju.