Gatling - Comment envoyer une demande de publication dans StringBody () avec des données aléatoires

Dans ce tutoriel Gatling, nous montrons comment envoyer des demandes de publication contenant des données aléatoires dans le StringBody().

Dans la plupart des scénarios de test de performances, vous souhaitez randomiser les données envoyées en tant que demande de publication pour simuler différentes sessions. Pour cela, nous pouvons utiliser des feeders qui lisent des données à partir de fichiers CSV ou de texte brut.

Si vous n'avez pas encore configuré Gatling sur votre machine, vous pouvez lire l'article qui explique comment configurer Gatling en tant que projet Maven.


Générateur de chaînes aléatoires Scala

Tout d'abord, nous avons besoin d'une méthode qui génère une chaîne aléatoire dans Scala:

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

Requête XML comme corps de message

Dans cet exemple, nous envoyons une demande de publication XML. Celui-ci contient un paramètre log_session_id qui doit être différent dans chaque requête:


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

Nous devons avoir un moyen d'envoyer la requête XML ci-dessus sous forme de message dans le StringBody() à Gatling, mais dans chaque requête, le log_session_id la valeur doit être une chaîne aléatoire.

Pour cela, nous devons utiliser des mangeoires.

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

Le script complet pour envoyer une demande de publication aléatoire dans StringBody() à Gatling:

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