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

6

我想调用'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)

如果我把值13682002351放在myActionID里,一切都运行良好。但在Gatling中执行此脚本时,我会收到以下错误信息:

ERROR i.g.http.action.HttpRequestAction -“httpRequest-3”执行失败:未定义名为“myActionID”的属性。


1
尝试:"actionId": ${myActionID} - antikantian
@antikantian:尝试使用您的评论,但出现错误“未定义名为'myActionID'的属性”。 - Peter
2个回答

16

Scala有多种字符串插值机制(参见文档),可用于将变量嵌入字符串中。它们都可以与三重引号"""一起使用,用于创建多行字符串。

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

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}\"}]}]}"
              }"""

注意在字符串文字前面加上s,以及在变量名前面加上美元符号。


在我添加了你提到的那一行代码 val str = s"""....""" 后,我无法编译代码。 - Peter
不起作用,它会给出错误状态。find.in(200,304,201,202,203,204,205,206,207,208,209),b 1 (100.0%),但实际上找到了400。还有其他方法吗?已经尝试了几乎所有的组合,"actionId": $actionIdD,"actionId": ${actionIdD},"actionId: $actionIdD","actionId": + actionIdD,s"actionId: $actionIdD",s"actionId": $actionIdD,但是仍然出现相同的错误。 - Peter
尝试将字符串创建与 Gatling 请求分开进行测试 - 你可能在错误的地方查看。我粘贴的代码在 Scala REPL 中成功执行并插入了 myActionID 的值 - 我不能保证其他任何内容(json 的正确性,任何其他代码)是否正确,因为没有足够的上下文,你的错误可能来自那里... - Tzach Zohar
我认为这不是服务器端或Json相关的问题,因为当我在.body中传递13682002351作为actionID时,它可以工作,而在使用变量名时会出错。 - Peter
我在回答中发布了代码,并列出了“我做了这个,val actionId =“1368225424501””的错误列表。你能帮忙检查一下吗?谢谢 :-) - Peter
显示剩余2条评论

6

使用S插值字符串,我们可以轻松地完成这个操作:

 s"""Hello Word , Welcome Back!
      How are you doing ${userName}"""

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接