Fljótleg tilvísun í gatling - Algengar gatlingaaðgerðir

Þessi færsla þjónar sem skyndileiðbeiningar fyrir Gatling tól til frammistöðuprófana.

Áður sáum við hvernig á að skipuleggðu Gatling verkefnið í rökréttri og auðskiljanlegri uppbyggingu.

Í þessari færslu skoðum við nokkur dæmi og notkun á nokkrum algengum Gatling aðgerðum þegar búið er til frammistöðuprófunarforrit.


Dæmi um gatling sem fjallað er um í þessari færslu eru:



Einföld eftirlíking

import io.gatling.core.Predef._ import io.gatling.http.Predef._ class SimplestSimulation extends Simulation {
setUp(scenario('Homepage')
.exec(http('Home').get('https://devqa.io'))
.inject(atOnceUsers(1))) }


Notkun HTTP proxy

setUp(scenario('Proxy on')
.exec(http('World').get('https://devqa.io'))
.inject(atOnceUsers(1)))
.protocols(http.proxy(Proxy('proxy.company.net', 8080))) }

Í dæminu hér að ofan, proxy.company.net er umboðsslóðin og 8080 er umboðshöfn.




HTTP beiðnir

FÁ beiðni

Einföld GET beiðni með fyrirspurna breytur



http('Get Gatling posts')
.get('https://devqa.io')
.queryParam('post', 'gatling')
.queryParam('category', 'performance testing')
.header('Accept-Language', 'en')

POST beiðni

Sýnishorn af POST beiðni með formi params, t.d. senda inn eyðublað:

http('POST with params')
.post('https://www.example.com/login')
.formParam('firstname', 'David')
.formParam('lastname', 'Brown')
.header('Accept-Language', 'en')

Sýnishorn af POST beiðni með skráhleðslu sem verður að vera í src/test/resources/bodies

http('Post with file payload')
.post('https://example.com/users')
.body(RawFileBody('bodyFileName.json')).asJSON
.header('Content-type','application/json')


Atburðarás

Hlé

Athugið: Til að nota hléið þarftu að bæta þessum innflutningi við
import scala.concurrent.duration.DurationInt


scenario('with secode pause')
// ...
.pause(2, 3) // will make a random pause of 2-3 seconds
.pause(2) // will make a fixed pause of 2 seconds
scenario('millisecond pause')
// ...
.pause(200.milliseconds) // fixed pause of 0.2 second


Lykkjur

scenario('repeat')
.repeat(3)( // repeat 3 times
exec(http('google').get('https://www.example.com'))
)


Inndæling sýndarnotenda

val scn=scenario('Virtual users') setUp(
scn.inject(
nothingFor(4.seconds),
atOnceUsers(10),
rampUsers(10) over(5.seconds))

Rampaðu upp

rampUsers(10) over(5.seconds)
// linear rampup
// 10 users added over 5 seconds (1 extra user every 500 ms)
constantUsersPerSec(10) during(5.seconds)
// adds 10 users every second
// (so a total of 50 users after 5 seconds)

Í einu

nothingFor(4.seconds) // no new users added during 4 seconds atOnceUsers(10) // 10 users added immediately // not really recommended since it can hammer down the tested server heavisideUsers(10) over(2.seconds) // better approximation of a peak of users

Athuganir og fullyrðingar

Í Gatling eru ávísanir venjulega notaðar til að leita að viðbragðsaðilum um stöðuskóða, en fullyrðingar eru venjulega notaðar til að fullyrða um tímasetningu svara.

Athuganir

Athuga stöðu og JSON gögn:

http('name').get('/path')
.check(status.is(200))
.check(jsonPath('$.name').is('some name'))

Vistar svörunargögn á Gatling fundur

http('name').get('/path')
.check(header('location').saveAs('newLocation'))
.check(jsonPath('$.name').saveAs('name'))
// You can now use $newLocation and $name in your requests :
http('get home').get('/users/${name}')

Fullyrðingar

setUp(scn).assertions(
global.responseTime.mean.lt(50), // mean resp time < 50 ms
forAll.failedRequests.percent.gt(5) // for each request, < 5% failure )


Fóðrari

Grunnnotkun

val feeder1 = Array(
Map('foo' -> 'foo1', 'bar' -> 'bar1'),
Map('foo' -> 'foo2', 'bar' -> 'bar2'),
Map('foo' -> 'foo3', 'bar' -> 'bar3') ) // repeating the values val feeder1a = feeder1.circular val feeder1b = feeder1.random // infinite entries with keys 'value1', 'value2' val feeder2 = Iterator.continually(Map('value1' -> 100, 'value2' -> 'toto')) // infinite random entries val feeder3 = Iterator.continually(Map(
'value1' -> Random.nextInt(100),
'value2' -> Random.alphanumeric.take(4)) ) // using the feeder to build the URLs scenario('scenario name')
.feed(feeder)
.exec(http('request name')
.get('/path/${value1}') )

Ítarlegri notkun

// reading a csv file to build a feeder val feeder = csv('data.csv') // the csv file must have a header row which defines the keys and be comma (,) separated // filling a template file with the content of a feeder scn.feed(feeder).exec(
http('request name')
.post('https://www.example.com')
.body(ElFileBody('filename.xml')).asXML))