Mfumo wa Upimaji wa Utendaji na Gatling na Maven

Je! Ni ipi njia bora ya kuandaa na kuunda mradi wa Gatling kwa upimaji wa utendaji?

Wakati wa kubuni mfumo, tunapaswa kufikiria juu ya kudumisha na kupanua, kwa hivyo jinsi tunavyopanga vifaa ni muhimu sana.

Katika mafunzo haya, tutaonyesha jinsi ya kuunda mfumo wa upimaji wa utendaji kutoka mwanzoni kwa kutumia Gatling na maven.




Mfumo wa Mtihani wa Maven

Mahitaji ya awali:

Kwa mafunzo haya unahitaji kusakinisha zifuatazo:


  • Java 1.8
  • Maven 3.5
  • IntelliJ na Scala Plugin imewekwa

Kwanza, tunaunda mradi wa msingi kwa kuendesha archetype ya maven Gatling:



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

Unapotimiza amri hapo juu, itaanza kupakua utegemezi.

Unapohamasishwa, toa maadili ya 'groupId', 'artifactId', na 'toleo'.

Usanidi wangu unaonekana kama ifuatavyo:


Unapofungua mradi, utaona kuna faili na folda chaguomsingi.

Chini ya rasilimali, tunayo


miili kifurushi hiki kinashikilia malipo ya ombi. Kwa mfano, unaweza kuwa na templeti za maombi ya maombi anuwai.

data kifurushi hiki kinashikilia data unayohitaji kulisha kwa majaribio yako, kama vile CSVs.

Mbali na folda mbili zilizo hapo juu, kuna Gatling.conf, logback.xml na faili za kinasa sauti. Hatutazungumza haya katika mafunzo haya.

Gatling maven archetype pia huunda kitu cha msingi cha Scala, lakini hatutatumia, kwa hivyo endelea na ufute vitu.


Kwa kuongeza, tutaunda vifurushi vinne, usanidi , maombi , matukio , na uigaji :

Sanidi Kifurushi

Kwenye kifurushi cha usanidi, tengeneza kitu cha Scala kinachoitwa Config. Hii itashikilia usanidi anuwai wa mradi wetu kama URL za programu, watumiaji chaguomsingi, nk.

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 }

Inaomba Kifurushi

Kifurushi cha maombi kina maombi tofauti ya operesheni. Kwa mfano, tunaweza kuwa na ombi ambalo linapata ishara ya idhini. Ombi lingine linaweza kutumia ishara kutoka kwa ombi la awali kuunda mtumiaji na kadhalika.


Haya ni maombi ya kibinafsi na ya pekee yaliyotumwa kwa ncha tofauti.

Ombi la GetToken

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

UndaRequest ya Kuunda

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

Kifurushi cha Matukio

Kifurushi cha mazingira kinashikilia mazingira ya biashara. Kwa mfano, kuunda mtumiaji, tunapaswa kwanza kupata ishara ya auth na kisha tuma ishara kama kichwa pamoja na vigezo vya fomu ili kuunda mtumiaji. yaani tunatumia majibu ya ombi la kwanza kulisha ombi la pili. Hii 'mnyororo wa maombi' ni kawaida kabisa katika upimaji wa API.

UndaUserScenario

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

Uigaji Kifurushi

Mwishowe, tuna Uigaji katika kifurushi cha uigaji. Unaweza kufikiria uigaji kama maelezo tofauti ya mzigo. Kwa mfano, tunaweza kuwa na masimulizi ya kawaida ya mzigo au masimulizi ya mwiba.

Uigaji unahitaji kuwa darasa la Scala na lazima waongeze darasa la Uigaji wa Gatling.

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

Mradi wako unapaswa kuonekana kama yafuatayo:

Tunahitaji pia kurekebisha faili yetu ya pom.xml ili kuweza kupitisha vigezo, kama vile watumiaji na kupitisha kwa majaribio yetu ya utendaji wakati wa kukimbia.

faili ya pom.xml

Faili ya pom.xml inapaswa kuonekana kama:


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





Mwishowe, kutekeleza darasa la kuiga, tunaendesha amri ifuatayo

mvn clean gatling:execute -Dusers=1

Amri iliyo hapo juu itaendesha Uundaji wa Uundaji na mtumiaji 1.