2016-03-07 12 views
10

Ich muss jedes Mal eine zufällige positive Ganzzahl erstellen und es an Json Körper in Gatling senden.Wie man zufälligen Wert in Json-Körper in Gatling hinzufügt?

verwenden ich den folgenden Code, um einen zufälligen positiven ineger zu erstellen:

val r = new scala.util.Random; 
val OrderRef = r.nextInt(Integer.MAX_VALUE); 

aber, Wie kann ich den zufällig generierten Wert in den json Körper ernähren?

Ich habe versucht:

.exec(http("OrderCreation") 
.post("/abc/orders") 
.body(StringBody("""{ "orderReference": "${OrderRef}"}""").asJson) 

Aber dies scheint nicht zu funktionieren. Irgendwelche Hinweise bitte.

Danke!

Antwort

20

allererst Sie Zufallszahl jedes Mal erzeugt werden soll, so hat OrderRef ein Verfahren sein, wie:

def orderRef() = Random.nextInt(Integer.MAX_VALUE) 

Side Kommentar: von Scala Konvention: Name camelcase(), während sie neue Werte erzeugt , ohne ; am Ende.

Zur Verwendung der vorbereiteten Methode können Sie die Gatling EL-Zeichenfolge nicht verwenden. Syntax ist sehr begrenzt und grundsätzlich "${OrderRef}" sucht nach Variable mit Namen OrderRef in Gatling Session.

richtige Weg ist Expression Funktion wie zu verwenden:

.exec(
    http("OrderCreation") 
    .post("/abc/orders") 
    .body(StringBody(session => s"""{ "orderReference": "${orderRef()}" }""")).asJSON 
) 

Hier Sie erstellen anonyme Funktion unter Gatling Session und Rückkehr String als Körper. Die Zeichenfolge wird über den Standard-Scala-String-Interpolationsmechanismus erstellt und verwendet die zuvor erstellte Funktion orderRef().

Natürlich können Sie Scala String Interpolation auslassen wie:

.body(StringBody(session => "{ \"orderReference\": " + orderRef() +" }")).asJSON 

, die nicht sehr bevorzugten Stil, wenn Scala mit.

Weitere Details finden Sie unter Gatling Dokumentation zu Request Body und lesen Sie mehr über Galting EL syntax.

Eine alternative Möglichkeit ist es, eine Zuführung zu definieren:

// Define an infinite feeder which calculates random numbers 
val orderRefs = Iterator.continually(
    // Random number will be accessible in session under variable "OrderRef" 
    Map("OrderRef" -> Random.nextInt(Integer.MAX_VALUE)) 
) 

val scn = scenario("RandomJsonBody") 
    .feed(orderRefs) // attaching feeder to session 
    .exec(
    http("OrderCreation") 
    .post("/abc/orders") 
    // Accessing variable "OrderRef" from session 
    .body(StringBody("""{ "orderReference": "${OrderRef}" }""")).asJSON 
) 

Hier ist die Situation anders, zuerst wir den Einzug definieren, dann wir es auf Sitzung anhängen und dann seinen Wert in Anforderungstext über Gatling EL verwenden Zeichenfolge. Dies funktioniert, während der Feeder-Wert von Feeder von Gatling vor einem an die Sitzung angehängten virtuellen Benutzer genommen wird. Sehen Sie mehr über Feeder here.

Empfehlung: Wenn Sie ein einfaches Szenario haben, beginnen Sie mit der ersten Lösung. Wenn es komplexer ist, denken Sie über Feeder nach.

Genießen Sie

+0

Vielen Dank ...Du hast mir viel Zeit gespart :) –

+0

Gern geschehen :) – Teliatko

+1

Der erste "richtige" Weg, es zu tun, hat bei mir nicht funktioniert. Der alternative Weg hat funktioniert. Vielen Dank. –