Gatling Quick Reference - Gnìomhan Gatling Cumanta

Tha an dreuchd seo mar stiùireadh fiosrachaidh sgiobalta airson inneal Gatling airson deuchainn coileanaidh.

Roimhe sin, chunnaic sinn ciamar cuir air dòigh do phròiseact Gatling ann an structar loidsigeach agus furasta a thuigsinn.

Anns an dreuchd seo, bidh sinn a ’coimhead air cuid de eisimpleirean agus cleachdaidhean de chuid de ghnìomhan cumanta Gatling nuair a bhios sinn a’ cruthachadh sgriobtaichean deuchainn coileanaidh.


Is e eisimpleirean cruinneachaidh san dreuchd seo:



Samhladh sìmplidh

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


A ’cleachdadh neach-ionaid HTTP

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

Anns an eisimpleir gu h-àrd, proxy.company.net tha an URL neach-ionaid agus 8080 tha am port proxy.




Iarrtasan HTTP

Iarrtas GET

Iarrtas sìmplidh GET le paramadairean ceiste

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

Iarrtas POST

Iarrtas sampall POST le params foirm, m.e. a ’cur a-steach foirm:

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

Iarrtas sampall POST le uallach pàighidh faidhle a dh ’fheumas a bhith ann an src/test/resources/bodies

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


Scenario

Pauses

Nota: Gus am stad a chleachdadh, feumaidh tu an in-mhalairt seo a chuir ris
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


Lùban

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


Injection luchd-cleachdaidh brìgheil

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

Ramp suas

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)

Anns a 'bhad

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

Seicean agus Dearbhaidhean

Ann an Gatling, bidh sgrùdaidhean mar as trice air an cleachdadh gus sùil a thoirt airson buidhnean freagairt còdan inbhe, ach mar as trice bithear a ’cleachdadh dearbhaidhean gus dearbhadh a dhèanamh air amannan freagairtean.

Seicean

Inbhe sgrùdaidh agus dàta JSON:

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

A ’sàbhaladh dàta freagairt gu seisean 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}')

Dearbhaidhean

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


Biadhadh

Cleachdadh bunaiteach

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

Cleachdadh adhartach

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