Okvir za ispitivanje performansi s Gatlingom i Mavenom

Koji je najbolji način za organizaciju i strukturiranje Gatlingovog projekta za ispitivanje performansi?

Prilikom dizajniranja okvira trebali bismo razmišljati o održivosti i proširivosti, stoga je vrlo važno kako organiziramo komponente.

U ovom uputstvu pokazat ćemo kako stvoriti okvir za testiranje performansi od nule pomoću Gatlinga i Mavena.

Testni okvir Gatlinga Mavena

Preduvjeti:

Za ovaj vodič morate imati instalirano sljedeće:

  • Java 1.8
  • Maven 3.5
  • IntelliJ s instaliranim dodatkom Scala

Prvo kreiramo osnovni projekt izvođenjem maven arhetipa Gatling:



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

Kada izvršite gornju naredbu, počet će preuzimati ovisnosti.

Kad se to zatraži, navedite vrijednosti za 'groupId', 'artifactId' i 'version'.

Moja postavka izgleda ovako:

Kad otvorite projekt, primijetit ćete da postoje neke zadane datoteke i mape.

Pod resursima imamo

tijela ovaj paket sadrži korisna opterećenja zahtjeva. Na primjer, možete imati predloške zahtjeva za razne zahtjeve.

podaci ovaj paket sadrži podatke potrebne za unos u vaše testove, poput CSV-ova.

Uz gore navedene dvije mape, postoje datoteke Gatling.conf, logback.xml i recorder.conf. O njima nećemo raspravljati u ovom vodiču.

Arhetip Gatling maven također stvara tri osnovna objekta Scala, ali nećemo ih koristiti, zato naprijed i izbrišite objekte.

Uz to ćemo stvoriti četiri paketa, konfiguracija , zahtjevi , scenariji , i simulacije :

Paket za konfiguriranje

U paketu config stvorite Scala objekt nazvan Config. Ovo će sadržavati razne konfiguracije za naš projekt, kao što su URL-ovi aplikacija, zadani korisnici itd. ...

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 }

Paket zahtjeva

Paket zahtjeva sadrži različite operativne zahtjeve. Na primjer, mogli bismo imati zahtjev koji dobiva token za autorizaciju. Drugi zahtjev može koristiti žeton iz prethodnog zahtjeva za stvaranje korisnika i tako dalje.

To su pojedinačni i izolirani zahtjevi koji se šalju različitim krajnjim točkama.

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

Paket scenarija

Paket scenarija sadrži poslovne scenarije. Na primjer, da bismo stvorili korisnika, prvo moramo dobiti oznaku autorizacije, a zatim token poslati kao zaglavlje zajedno s parametrima obrasca da bismo stvorili korisnika. tj. Koristimo odgovor prvog zahtjeva za ulazak u drugi zahtjev. Ovo 'lance zahtjeva' prilično je često u API testiranju.

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

Paket simulacija

Konačno, u paketu simulacija imamo Simulacije. Simulacije možete smatrati različitim profilima opterećenja. Na primjer, možemo imati simulaciju normalnog opterećenja ili simulaciju šiljka.

Simulacije moraju biti klase Scala i moraju proširiti klasu Gatlingove simulacije.

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

Vaš projekt trebao bi izgledati ovako:

Također moramo izmijeniti našu datoteku pom.xml kako bismo mogli prosljeđivati ​​parametre, kao što su korisnici i protok, u naše testove performansi tijekom izvođenja.

datoteka pom.xml

Datoteka pom.xml trebala bi izgledati ovako:


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





Napokon, da bismo izvršili simulacijsku klasu, izvodimo sljedeću naredbu

mvn clean gatling:execute -Dusers=1

Gornja naredba pokrenut će CreateUserSimulation s 1 korisnikom.