2016-05-16 26 views
0

Ich möchte den Wert 'myActionID' Variable aufrufen. Wie mache ich das? Wenn ich statischen Wert wie "actionId": 1368201 an myActionID übergebe, dann funktioniert es, aber wenn ich "actionId" verwende: $ {actionIdd} gibt es einen Fehler.Scala - wie man Variablen in einem mehrzeiligen String-Literal verwendet

Hier ist der entsprechende Code:

class LaunchWorkflow_Act extends Simulation { 

    val scenarioRepeatCount = 1 
    val userCount = 1 
    val myActionID = "13682002351" 

    val scn = scenario("LaunchMyFile") 
     .repeat (scenarioRepeatCount) { 
      exec(session => session.set("counter", (globalVar.getAndIncrement+" "+timeStamp.toString()))) 
      .exec(http("LaunchRequest") 
      .post("""/api/test""") 
      .headers(headers_0) 
      .body(StringBody(
       """{ "actionId": ${myActionID} , 
       "jConfig": "{\"wflow\":[{\"Wflow\":{\"id\": \"13500145349\"},\"inherit-variables\": true,\"workflow-context-variable\": [{\"variable-name\": \"externalFilePath\",\"variable-value\": \"/var/nem/nem/media/mount/assets/Test.mp4\"},{\"variable-name\": \"Name\",\"variable-value\": \"${counter}\"}]}]}" 
       }"""))) 

      .pause(pause) 

     } 
    } 

setUp(scn.inject(atOnceUsers(userCount))).protocols(httpProtocol) 

Alles funktioniert gut, wenn ich Wert legen 13682002351 statt myActionID. Danke im Voraus. Während der Ausführung dieses Skripts in Gatling ich diesen Fehler

ERROR ighttp.action.HttpRequestAction bin immer - 'httprequest-3' fehlgeschlagen ausführen: Kein Attribut mit dem Namen 'myActionID' definiert ist

+1

Versuchen: '" actionId ": $ {myActionID}' – antikantian

+0

@antikantian: Versucht mit Ihrem Kommentar aber Fehler zeigt "Kein Attribut namens 'myActionID' ist definiert" – Peter

Antwort

2

Scala verfügt über verschiedene Mechanismen zur String-Interpolation (siehe docs), mit denen Variablen in Strings eingebettet werden können. Sie können alle in Verbindung mit den dreifachen Anführungszeichen """ verwendet werden, die zum Erstellen von mehrzeiligen Strings verwendet werden.

val counter = 12 
val myActionID = "13682002351" 
val str = s"""{  
       "actionId": $myActionID , 
       "jConfig": "{\"wflow\":[{\"Wflow\":{\"id\": \"13500145349\"},\"inherit-variables\": true,\"workflow-context-variable\": [{\"variable-name\": \"externalFilePath\",\"variable-value\": \"/var/nem/nem/media/mount/assets/Test.mp4\"},{\"variable-name\": \"Name\",\"variable-value\": \"${counter}\"}]}]}" 
       }""" 

Beachten Sie die auf den Variablennamen vorangestellt, auf die Stringliteral und dem Dollarzeichen vorangestellt s:

In diesem Fall können Sie verwenden.

+0

Ich bin nicht in der Lage, den Code nach dem Hinzufügen der Zeile Sie kompilieren erwähnt val str = s "" "...." "" – Peter

+0

Funktioniert nicht, es gibt Fehler status.find.in (200,304,201,202,203,204,205,206,207,208,209), b 1 (100,0%) ut tatsächlich gefunden 400. Auf jede andere Weise ?? habe mit fast allen Kombinationen, "actionId": $ actionIdD, "actionId": $ {actionIdD}, "actionId: $ actionIdD", "actionId": + actionIdD, s "actionId: $ actionIdD", s "actionId ": $ actionIdD aber gibt den gleichen Fehler – Peter

+0

Versuchen Sie, die String-Erstellung getrennt von der Gatling-Anfrage zu testen - Sie könnten an der falschen Stelle suchen. Der Code, den ich eingefügt habe, wird in Scala REPL erfolgreich ausgeführt und fügt den Wert von 'myActionID' ein - ich kann für nichts anderes bürgen (Korrektheit von json, irgendeinem anderen Code), da nicht genug Kontext vorhanden ist und Ihr Fehler von dort kommt. .. –