2016-08-08 44 views
1

Ich habe die folgenden zwei Methoden:Wie man JSon in Gatling dynamisch erzeugt?

val activity = repeat(10, "i") { 
     exec(http("POST activity post") 
     .post("/activity/") 
     .header("Content-Type", "application/json; charset=ISO-8859-1") 
     .header("accept", "*/*") 
     .body(StringBody(
      s""" 
      |{ 
      | "id": "activityId", 
      | "type": "run", 
      | "start_epoch_ms": "${randomStartMethod()}", 
      | "end_epoch_ms": "${randomStop()}", 
      | "metrics": [ 
      |  { 
      |   "type": "distance", 
      |   "unit": "KM", 
      |   "source": "nike.running.ios", 
      |   "values": [ 
      |    { 
      |     "start_epoch_ms": "${randomStartMethod()}", 
      |     "end_epoch_ms": "${randomStopMethod()}", 
      |     "value": 2.0 
      |    } 
      | 
      |   ] 
      |  } 
      | ] 
      |} 
      """.stripMargin)). 
     asJSON 
     .check(status.is(202)) 
     .check(
      jsonPath(
      "$.activityId").saveAs("message") 
     ) 
     .check(bodyString. 
      transform(_.split("\"" 
     )(3)).saveAs(
      "changeToken")) 

    ).exec(
     session => { 
      val maybeId = 
      session.get(
       "message").asOption[String] 
      println(maybeId) 
      session 
     } 
    ) 
    } 
    } 

Aber hier werden die Werte nicht dynamisch erzeugt wird, wenn ich mit Futter verwenden:

def randomStartMethod() : Long = { 
    var range = 1000L 
    var r = ThreadLocalRandom.current().nextLong(10L*range) 
    var randomStart = 1396024675000L + r 
    return randomStart 
} 

def randomStopMethod() : Long = { 
    var range = 1000L 
    val r = ThreadLocalRandom.current().nextLong(10L*range) 
    val randomStop = 1396024675000L + r*2L 
    return randomStop 
} 

Dann habe ich es auf die Anfrage Körper wie folgt hinzufügen. Kann jemand vorschlagen, die Zufallszahlen jedes Mal während des Laufs zu generieren?

Antwort

3

Erinnern Sie sich: Wenn Sie möchten, dass Code nicht nur einmal beim Start ausgewertet wird, wenn Gatling das Szenario erstellt, sondern jedes Mal, wenn ein virtueller Benutzer eine Aktion ausführt, müssen Sie dynamischen Inhalt übergeben: entweder Gatling EL based String oder a Funktion.

Hier haben Sie die letztere zu tun, wie:

.body(StringBody(session => //THIS IS A FUNCTION 
      s""" 
      |{ 
      | "id": "activityId", 
      | "type": "run", 
      | "start_epoch_ms": "${randomStartMethod()}", 
      | "end_epoch_ms": "${randomStop()}", 
      | "metrics": [ 
      |  { 
      |   "type": "distance", 
      |   "unit": "KM", 
      |   "source": "nike.running.ios", 
      |   "values": [ 
      |    { 
      |     "start_epoch_ms": "${randomStartMethod()}", 
      |     "end_epoch_ms": "${randomStopMethod()}", 
      |     "value": 2.0 
      |    } 
      | 
      |   ] 
      |  } 
      | ] 
      |} 
      """.stripMargin)) 
+0

Dank Steph. Hier treffen wir uns wieder. Kannst du mir bitte ein Beispiel geben? Ich konnte das nicht herausfinden. Muss ich einen Zubringer verwenden? Versuchte das, aber konnte es nicht zur Arbeit bringen. Ich versuchte, etwas wie dieses zu tun: http://stackoverflow.com/questions/35843371/how-to-add-random-value-in-json-body-in-gatling –

+0

Wenn möglich, können Sie sich bitte diesem Raum anschließen? http://chat.stackoverflow.com/rooms/120459/gatling –