2017-03-27 63 views
1

我的脚本中有两种情况。我想将“CreateId”的值传递给第二个场景。我在第一种情况下保存了“CreateId”。如何在gatling中的两个场景之间传递值?

错误说:

名为 '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)  

回答

2

试着用下面的代码和它的工作。希望它能帮助别人。

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)  
+0

你好@Peter,当你运行很多用户并发并且创建超过10秒时,这种方法如何工作?我也有类似的情况,但由于第一种情况对我来说可能需要很长时间,因此有时在第二种情景开始时并未设置变量。 – Gery

+0

嗨Gery,对我来说在上面的代码中,第二个场景很重要,我必须检查第二个调用的响应,以便在第一个场景得到响应之前持有该场景。根据您对响应时间的计算,您可以增加时间限制,例如(NothingFor(300秒))。 – Peter

相关问题