Scala-如何在多行字符串文字中使用变量

Pet*_*ter 3 java scala string-interpolation gatling

我想调用“ myActionID ”变量的值。我怎么做?如果我将诸如“ actionId”:1368201之类的静态值传递给myActionID,则它可以工作,但是如果我使用“ actionId”:$ {actionIdd},它将给出错误。

以下是相关代码:

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)
Run Code Online (Sandbox Code Playgroud)

如果我将值13682002351代替myActionID,则一切正常。先谢谢了。在Gatling中执行此脚本时,出现此错误

错误ighttp.action.HttpRequestAction-'httpRequest-3'执行失败:未定义名为'myActionID'的属性

Tza*_*har 7

Scala具有用于字符串插值的各种机制(请参阅docs),可用于将变量嵌入字符串中。所有这些都可以与"""用于创建多行字符串的三引号一起使用。

在这种情况下,您可以使用:

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}\"}]}]}"
              }"""
Run Code Online (Sandbox Code Playgroud)

请注意,s字符串文字前带有前缀,变量名称前带有美元符号。


Abh*_*pta 6

使用S 插值字符串,我们可以轻松做到这一点:

 s"""Hello Word , Welcome Back!
      How are you doing ${userName}"""
Run Code Online (Sandbox Code Playgroud)