如何在gatling中的两个场景之间传递价值?

时间:2017-03-27 15:07:23

标签: scala gatling

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

错误说:

  

未定义名为“CreateId”的属性

     

jsonPath($。id).find(0).exists,什么都没找到

情景 - 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)      

1 个答案:

答案 0 :(得分:4)

尝试使用以下代码并且有效。希望它能帮助他人。

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)