2017-03-27 109 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