Gatling Vave Tusitaiala - Masani Gatling Galuega tauave

Lenei pou avea o se vave faʻasino taiala mo Gatling mea faigaluega mo faʻataʻitaʻiga galuega.

Talu ai, na matou vaʻai pe faʻapefea faʻatulaga lau poloketi Gatling i se fetaui lelei ma faigofie ona malamalama faʻusaga.

I lenei tulaga, tatou vaʻai i nisi faʻataʻitaʻiga ma faʻaaogaina o nisi masani Gatling gaioiga pe a fausiaina faʻataʻitaʻiga suʻega tusitusiga.


Gatling faʻataʻitaʻiga aofia ai i lenei tulaga o:



Faigofie faigofie

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


Faʻaaogaina o se HTTP sui

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

I le faʻataʻitaʻiga i luga atu, proxy.company.net o le sui sui URL ma 8080 o le sui sui.




HTTP Talosaga

MAUA Talosaga

Se faigofie GET talosaga ma faʻafesili tapulaʻa

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

POST Talosaga

O se faʻataʻitaʻiga POST talosaga ma fomu params, eg lafoina se pepa:

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

O se faʻataʻitaʻiga POST talosaga ma se faila faila e tatau ona i ai src/test/resources/bodies

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


Vaʻaiga

Malolo

Faʻaaliga: Ina ia mafai ona faʻaaoga le malologa, e tatau ona e faʻaopopoina lenei faʻaulu mai
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


Loops

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


Tui o tagata faʻaaoga tafailagi

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

Faaputuputu i luga

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)

I sesi taimi

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

Siaki ma Faamatalaga

I Gatling, o siaki e masani ona faʻaaoga e siaki ai tulaga tulaga tali tali tino, ae o faʻamatalaga e masani ona faʻaaoga e faʻailoa ai luga o taimi o tali.

Siaki

Siakiina tulaga ma JSON faʻamatalaga:

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

Sefe faʻamatalaga tali i Gatling sauniga

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

Manatu faʻaalia

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


Fafagaina

Faʻaaoga faʻavae

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

Faʻaaogaina alualu i luma

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