Tixraaca Deg-degga ah ee Gatling - Hawlaha Wada-qabashada ee Wadaagga

Boostadani waxay u adeegtaa hage tixraac deg deg ah oo loogu talagalay qalabka Gatling ee tijaabinta waxqabadka.

Markii hore, waxaan aragnay sida loo sameeyo abaabul mashruucaaga Gatling qaab macquul ah oo si fudud loo fahmi karo.

Mashruucan, waxaan ku eegaynaa tusaalooyin iyo adeegsi qaar ka mid ah howlaha guud ee loo yaqaan 'Gatling' marka la abuurayo qoraallada tijaabada waxqabadka.


Tusaalooyinka laysku haysto ee ku xusan boostadan ayaa ah:



Jilid fudud

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


Adeegsiga Wakiilka HTTP

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

Tusaalaha kore, proxy.company.net waa wakiilka URL iyo 8080 waa dekedda wakiilka




Codsiyada HTTP

Hel Codsi

Codsi fudud oo GET ah oo leh xuduudaha weydiinta

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

Codsiga POST

Muunad POST codsi wata foomamka params gudbinta foom:

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

Codsi muunad ah 'POST' oo wata faylalka lacag bixinta oo ay tahay inuu ku jiro src/test/resources/bodies

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


Dhacdo

Hakadyada

Fiiro gaar ah: Si loo isticmaalo hakadka, waxaad u baahan tahay inaad ku darto soo dejintan
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'))
)


Cirbida dadka isticmaala dalwaddii

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

Sare u kac

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)

Mar qudha

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

Hubinta iyo Xaqiijinta

Gatling, jeegagga waxaa badanaa loo isticmaalaa in lagu hubiyo hay'adaha ka jawaabaya heerarka, halka sheegashooyinka sida caadiga ah loo isticmaalo in lagu caddeeyo waqtiga jawaabaha.

Hubinta

Hubinta xaaladda iyo xogta JSON:

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

Ku keydinta xogta jawaab celinta fadhiga 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}')

Xaqiijin

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


Quudinta

Adeegsiga aasaasiga ah

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

Isticmaalka sare

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