Gatling - Як адправіць запыт на паведамленне ў StringBody () з выпадковымі дадзенымі

У гэтым уроку Gatling мы паказваем, як адпраўляць запыты на паведамленні, якія ўтрымліваюць выпадковыя дадзеныя ў StringBody().

У большасці сцэнарыяў тэсціравання прадукцыйнасці вы хочаце рандомизировать дадзеныя, якія адпраўляюцца ў выглядзе запыту на пост, для імітацыі розных сеансаў. Для гэтага мы можам скарыстацца фідэрамі, якія счытваюць дадзеныя з файлаў CSV альбо звычайнага тэксту.

Калі вы яшчэ не ўсталявалі Gatling на сваёй машыне, вы можаце прачытаць паведамленне, якое тлумачыць як наладзіць Gatling як праект Maven.


Генератар выпадковых радкоў Scala

Па-першае, нам патрэбны метад, які генеруе выпадковую радок у Scala:

object randomStringGenerator { def randomString(length: Int) = scala.util.Random.alphanumeric.filter(_.isLetter).take(length).mkString
}

Запыт XML у якасці асноўнага паведамлення

У гэтым прыкладзе мы адпраўляем запыт на паведамленне XML. Гэта ўтрымлівае параметр log_session_id, які павінен адрознівацца ў кожным запыце:


val req = ' ' + ' ' +
'3 ' +
'MY_APP ' +
'0000000000 ' +
'b02edd23,ClientIP=10.211.55.3 ' +
'ACTIVATION ' + ''

Мы павінны мець спосаб адпраўкі згаданага XML-запыту ў якасці паведамлення ў StringBody() у Gatling, але ў кожным запыце log_session_id значэнне павінна быць выпадковым радком.



Для гэтага нам трэба выкарыстоўваць кармушкі.

Кармушка ў StringBody ()

var randomSession = Iterator.continually(Map('randsession' -> ( req.replace('0000000000', randomStringGenerator.randomString(10))))) val scn = scenario('Activate')
.feed(randomSession)
.exec(http('activate request')
.post('/login/activate')
.body(StringBody('''${randsession}'''))

Поўны сцэнар для адпраўкі выпадковага запыту на паведамленне ў StringBody() у Гатлінгу:

import io.gatling.core.Predef._ import io.gatling.http.Predef._ import io.gatling.http.config.HttpProtocolBuilder.toHttpProtocol import io.gatling.http.request.builder.HttpRequestBuilder.toActionBuilder class Activate extends Simulation { object randomStringGenerator {
def randomString(length: Int) = scala.util.Random.alphanumeric.filter(_.isLetter).take(length).mkString } val req = ' ' +
' ' +
'3 ' +
'MY_APP ' +
'0000000000 ' +
'b02edd23,ClientIP=10.211.55.3 ' +
'ACTIVATION ' +
'' var randomSession = Iterator.continually(Map('randsession' -> ( req.replace('0000000000', randomStringGenerator.randomString(10))))) val httpConf = http
.baseURL('http://localhost:5000')
.acceptHeader('text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
.userAgentHeader('Mozilla/4.0(compatible;IE;GACv10. 0. 0. 1)') val scn = scenario('Activate')
.feed(randomSession)
.exec(http('activate request')
.post('/login/activate')
.body(StringBody('''${randsession}'''))
.check(status.is(200)))
.pause(5) setUp(
scn.inject(atOnceUsers(5)) ).protocols(httpConf) }