Kaduka Provada Kadro kun Gatling kaj Maven

Kio estas la plej bona maniero organizi kaj strukturi projekton Gatling por agado-testado?

Dum projektado de kadro, ni devas pripensi daŭrigeblecon kaj etendeblecon, do kiel ni organizas la erojn tre gravas.

En ĉi tiu lernilo, ni montros kiel krei rendimentan testan kadron de nulo per Gatling kaj maven.




Gatling Maven Test Framework

Antaŭkondiĉoj:

Por ĉi tiu lernilo vi bezonas la jenan instalitan:


  • Java 1.8
  • Maven 3.5
  • IntelliJ kun Scala Plugin instalita

Unue ni kreas bazan projekton per rula ar thetipo Gven de Gven:

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

Kiam vi plenumos la supran komandon, ĝi komencos elŝuti la dependecojn.

Kiam vi petas ĝin, donu valorojn por 'groupId', 'artifactId' kaj 'version'.

Mia aranĝo aspektas jene:


Kiam vi malfermos la projekton, vi rimarkos, ke estas iuj defaŭltaj dosieroj kaj dosierujoj.

Sub la rimedoj, ni havas


korpoj ĉi tiu pako enhavas la petajn utilajn ŝarĝojn. Ekzemple, vi povas havi petajn ŝablonojn por diversaj petoj.

datumoj ĉi tiu pako enhavas la datumojn, kiujn vi bezonas por provi, kiel CSV.

Aldone al la supraj du dosierujoj, ekzistas dosieroj Gatling.conf, logback.xml kaj recorder.conf. Ni ne diskutos ĉi tiujn en ĉi tiu lernilo.

La Gatling-maven-arketipo ankaŭ kreas tri bazajn Scala-objekton, sed ni ne uzos ilin, do iru antaŭen kaj forigu la objektojn.


Krome ni kreos kvar pakojn, agordi , petoj , scenaroj , kaj simuladoj :

Agorda Pako

En la agorda pako kreu Scala-objekton nomatan Agordo. Ĉi tio tenos diversajn agordojn por nia projekto kiel aplikaj URLoj, defaŭltaj uzantoj, ktp ...

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 }

Peto de Petoj

La pakaĵoj de petoj enhavas diversajn operaciajn petojn. Ekzemple, ni povus havi peton, kiu ricevas rajtigan signon. Alia peto povas uzi la signon de la antaŭa peto por krei uzanton ktp.


Ĉi tiuj estas individuaj kaj izolitaj petoj senditaj al malsamaj finpunktoj.

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

Pakaĵo pri Scenaroj

La scenara pako tenas la komercajn scenarojn. Ekzemple, por krei uzanton, ni unue devas akiri aŭtentan signon kaj poste sendi la signon kiel kaplinion kune kun formaj parametroj por krei uzanton. t.e. ni uzas la respondon de la unua peto por nutri al la dua peto. Ĉi tiu 'ĉeno de petoj' estas sufiĉe ofta en API-testado.

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

Simulaĵa Pako

Fine ni havas la Simulaĵojn en la pakaĵa simulado. Vi povas pensi pri simuladoj kiel malsamaj ŝarĝaj profiloj. Ekzemple, ni povas havi normalan ŝarĝan simuladon aŭ pikan simuladon.

La simuladoj devas esti Scala-klasoj kaj ili devas etendi la klason de 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) }

Via projekto devas aspekti jene:

Ni ankaŭ bezonas modifi nian pom.xml-dosieron por povi transdoni parametrojn, kiel uzantoj kaj trairo al niaj agadotestoj dum rultempo.

pom.xml-dosiero

La dosiero pom.xml devas aspekti kiel:


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





Fine, por ekzekuti la simuladan klason, ni lanĉas la jenan komandon

mvn clean gatling:execute -Dusers=1

La supra komando funkciigos la CreateUserSimulation kun 1 uzanto.