Gatling Quick Reference - Ümumi Gatling Funksiyaları

Bu yazı performans testi üçün Gatling aləti üçün qısa bir məlumat üçün xidmət edir.

Əvvəllər necə edəcəyini gördük Gatling layihənizi təşkil edin məntiqi və asan başa düşülən bir quruluşda.

Bu yazıda, performans testi skriptləri yaratarkən bəzi ümumi Gatling funksiyalarının bəzi nümunələrinə və istifadəsinə baxırıq.


Bu yazıda əks olunan misal çəkən nümunələr bunlardır:



Sadə simulyasiya

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


HTTP Proxy istifadə

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

Yuxarıdakı nümunədə proxy.company.net proxy URL və 8080 proxy portudur.




HTTP İstəkləri

İstək alın

Sorğu parametrləri ilə sadə bir GET istəyi

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

POST TƏLƏBİ

Forma parametrləri ilə nümunə POST istəyi, məs. bir forma təqdim:

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

src/test/resources/bodies İçində olmalıdır bir fayl yükü ilə nümunə POST istəyi

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


Ssenari

Dayanır

Qeyd: Fasilədən istifadə etmək üçün bu idxalı əlavə etməlisiniz
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


Döngələr

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


Virtual istifadəçilərə enjeksiyon

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

Ramp up

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)

Dərhal

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

Çeklər və təsdiqlər

Gatling-də çeklər ümumiyyətlə status kodları cavab orqanlarını yoxlamaq üçün istifadə olunur, iddialar isə normal olaraq cavabların vaxtını təsdiqləmək üçün istifadə olunur.

Çeklər

Status və JSON məlumatlarının yoxlanılması:

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

Cavab məlumatlarının Gatling sessiyasına saxlanılması

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

İddialar

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


Qidalandırıcılar

Əsas istifadə

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

Qabaqcıl istifadə

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