Kratke upute za Gatling - Uobičajene funkcije Gatlinga

Ovaj post služi kao brzi referentni vodič za Gatlingov alat za ispitivanje performansi.

Prije smo vidjeli kako organizirati svoj projekt Gatlinga u logičnoj i lako razumljivoj strukturi.

U ovom postu razmatramo neke primjere i običaje nekih uobičajenih funkcija Gatlinga prilikom stvaranja skripti za provjeru performansi.


Primjeri gatlinga obrađeni u ovom postu su:



Jednostavna simulacija

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


Korištenje HTTP proxyja

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

U gornjem primjeru, proxy.company.net je URL proxyja i 8080 je proxy port.




HTTP zahtjevi

GET Zahtjev

Jednostavan GET zahtjev s parametrima upita

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

POST zahtjev

Uzorak POST zahtjeva s paramjerima obrasca, na pr. podnošenje obrasca:

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

Uzorak POST zahtjeva s korisnim opterećenjem datoteke koje mora biti u src/test/resources/bodies

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


Scenarij

Zastaje

Bilješka: Da biste koristili pauzu, morate dodati ovaj uvoz
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


Petlje

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


Ubrizgavanje virtualnih korisnika

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

Porasti se

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)

Odjednom

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

Provjere i tvrdnje

U Gatlingu se provjere obično koriste za provjeru tijela s odgovorima na statusne kodove, dok se tvrdnje obično koriste za utvrđivanje vremena odgovora.

Provjere

Provjera statusa i JSON podataka:

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

Spremanje podataka o odgovoru u sesiju Gatling

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

Tvrdnje

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


Hranilice

Osnovna upotreba

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

Napredno korištenje

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