Scala 在gatling中,如何在两种场景之间传递值?

Scala 在gatling中,如何在两种场景之间传递值?,scala,gatling,Scala,Gatling,我的脚本中有两个场景。我想把“CreateId”的值传递给第二个场景。我在第一个场景中保存了“CreateId” 错误是: 未定义名为“CreateId”的属性 jsonPath($.id).find(0).存在,未找到任何内容 场景-1 val create = scenario("Create") .exec(http("post_request_create") .post("/api/asdf") .headers(headers_10)

我的脚本中有两个场景。我想把“CreateId”的值传递给第二个场景。我在第一个场景中保存了“CreateId”

错误是:

未定义名为“CreateId”的属性

jsonPath($.id).find(0).存在,未找到任何内容

场景-1

val create = scenario("Create")
        .exec(http("post_request_create")
        .post("/api/asdf")
        .headers(headers_10)
        .body(StringBody(session =>s"""{"name": "${randomName()}"}""")).asJSON
        .check(jsonPath("$.id")
        .saveAs("CreateId"))
        )
场景-2

val addTerm = scenario("Add Term")
        .repeat (repeatCount){
        exec(http("Add")

        // NOT WORKING
            //.post("""/api/asdfg/${CreateId}/terms""")

        // NOT WORKING
            .post(session => "/api/asdfg/" + session.get("CreateId").asOption[String] + "/terms")

            .headers(headers_10)
            .body(StringBody(session =>s"""{...somedata...}"""))
            )
        }
val scn = List(create.inject(atOnceUsers(1)),addTerm.inject(nothingFor(10 seconds), atOnceUsers(userCount)))
setUp(scn).protocols(httpProtocol)      

使用以下代码进行了尝试,效果良好。希望它能帮助他人。

var CreateId = ""

Scenario - 1

val create = scenario("Create")
        .exec(http("post_request_create")
        .post("/api/asdf")
        .headers(headers_10)
        .body(StringBody(session =>s"""{"name": "${randomName()}"}""")).asJSON
        .check(jsonPath("$.id")
        .saveAs("CreateId"))
        )

        .exec(session => {
            CreateId = session("CreateId").as[String].trim
            println("%%%%%%%%%%% ID =====>>>>>>>>>> " + CreateId)     
            session}       
        )


Scenario - 2

val addTerm = scenario("Add Term")
    .exec(_.set("CreateId", CreateId)) // Set it here
       .repeat (repeatCount){
        exec(http("Add")
       .post("""/api/asdfg/${CreateId}/terms""")
       .headers(headers_10)
       .body(StringBody(session =>s"""{...somedata...}"""))
            )
        }
val scn = List(create.inject(atOnceUsers(1)),addTerm.inject(nothingFor(10 seconds), atOnceUsers(userCount)))
setUp(scn).protocols(httpProtocol)    

Hello@Peter,当您同时运行多个用户时,如果创建时间超过10秒,这种方法是如何工作的?我有一个类似的情况,但由于第一个场景对我来说可能需要很长的时间,变量有时在第二个场景开始时没有设置。嗨,Gery,对我来说,在上面的代码中,第二个场景很重要,我必须检查第二个呼叫的响应,所以我保持该场景,直到收到第一个场景的响应。您可以根据响应时间的计算增加时间限制,即(300秒内为零)。