Referensi Cepet Gatling - Fungsi Gatling Umum

Pos iki dadi pedoman referensi cepet kanggo alat Gatling kanggo nyoba kinerja.

Sadurunge, kita ndeleng kepiye atur proyek Gatling sampeyan ing struktur sing logis lan gampang dingerteni.

Ing kiriman iki, kita bakal ndeleng sawetara conto lan panggunaan sawetara fungsi Gatling umum nalika nggawe skrip tes kinerja.


Tuladha gatling sing dicakup ing kiriman iki yaiku:



Simulasi sederhana

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


Nggunakake Proxy HTTP

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

Ing conto ing ndhuwur, proxy.company.net yaiku URL proksi lan 8080 yaiku port proksi.




Panjaluk HTTP

GET Panjaluk

Panjaluk GET sederhana kanthi paramèter pitakon



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

Panyuwunan POST

Panjaluk conto POST nganggo params formulir, kayata. ngirim formulir:

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

Panjaluk conto POST kanthi muatan file sing kudu ana ing src/test/resources/bodies

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


Skenario

Ngaso

Cathetan: Kanggo nggunakake ngaso, sampeyan kudu nambah impor iki
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


Puteran

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


Injeksi pangguna virtual

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

Ramp munggah

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)

Sanalika

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

Mriksa lan Pratelan

Ing Gatling, mriksa biasane digunakake kanggo mriksa awak respon kode status, dene pratelan biasane digunakake kanggo negesake manawa ana wektu nanggepi.

Mriksa

Priksa status lan data JSON:

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

Nyimpen data respons menyang sesi 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}')

Pratelan

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


Pakani

Panggunaan dhasar

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

Panggunaan majeng

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