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