2016-02-17 97 views
0

我想執行兩個應該一個接一個執行的方案,第一個方案「生成」的數據應該用作第二個方案的基礎。如何使用前一場景中的數據執行場景?

因此,一個案例可能是例如清算信用卡。第一個場景是有授權卡上一定量的/儲量:

val auths = scenario("auths").during(durationInMinutes minutes) { 
    feed(credentials) 
     .feed(firstNames) 
     .feed(lastNames) 
     .feed(cards) 
     .feed(amounts) 
     .exec(http("send auth requests") 
      .post(...) 
      .check(...))} 

第二個是有捕捉/從信用卡取量:

val caps = scenario("caps").during(durationInMinutes minutes) { 
    feed(credentials) 
     .feed(RESPONSE_IDS_FROM_PREVIOUS_SCENARIO) 
     .exec(http("send auth requests") 
      .post(...) 
      .check(...))}  

我最初以爲關於在檢查時使用saveAs(...)選項,但我發現保存的字段只對給定的會話有效。

所以基本上我想保留我從auths場景中獲得的ID,並在帽場景中使用它們。

我不能在一個場景中執行這兩個步驟,但(saveAs會爲此工作),因爲我對這兩種場景有不同的要求。

回答

0

引用文檔:「目前我們的模擬是一個巨大的單片場景,因此首先讓我們將它分解爲可組合的業務流程,類似於Selenium的PageObject模式,這樣,您可以輕鬆地重用某些部件並在不犧牲維護的情況下構建複雜的行爲。「在gatling.io/Advanced Tutorial

因此,您沒有用於場景之間通信的內置機制(AFAIK)。建議您以這種方式構建您的代碼,以便隨後將您的調用與URI結合起來。在你的情況(除了實施細則),你應該有這樣的事情:

val auths = feed(credentials) 
    .feed(firstNames) 
    .feed(lastNames) 
    .feed(cards) 
    .feed(amounts) 
    .exec(http("send auth requests") 
     .post(...) 
     .check(...) // extract and store RESPONSE_ID to session 
    ) 

val caps = exec(http("send auth requests") 
     .post(...) // use of RESPONSE_ID from session 
     .check(...)) 

那麼你的情況可能是這個樣子:

val scn = scenario("auth with caps").exec(auths, caps) // rest omitted 

甚至更​​好的方式來組織你的代碼是使用對象。看到提到的教程鏈接。

更多說明性的例子(其中編譯,但同時域名foo.com我沒有運行它):

import io.gatling.core.Predef._ 
import io.gatling.http.Predef._ 

class ExampleSimulation extends Simulation { 

    import scala.util.Random 
    import scala.concurrent.duration._ 

    val httpConf = http.baseURL(s"http://foo.com") 

    val emails = Iterator.continually(Map("email" -> (Random.alphanumeric.take(20).mkString + "@foo.com"))) 
    val names = Iterator.continually(Map("name" -> Random.alphanumeric.take(20).mkString)) 

    val getIdByEmail = feed(emails) 
    .exec(
     http("Get By Email") 
     .get("/email/$email") 
     .check(
      jsonPath("userId").saveAs("anId") 
     ) 
    ) 

    val getIdByName = feed(names) 
    .exec(
     http("Get By Name") 
     .get("/name/$name") 
     .check(
      jsonPath("userId").is(session => 
      session("anId").as[String] 
     ) 
     ) 
    ) 

    val scn = scenario("Get and check user id").exec(getIdByEmail, getIdByName).inject(constantUsersPerSec(5) during (5.minutes)) 

    setUp(scn).protocols(httpConf) 
} 

希望這是你在找什麼。

+0

不完全。要求是將這兩種情況完全分開,以查看「授權」的性能與「上限」的性能。使用建議的解決方案,它將基於它進行一次認證和一次上限,所以兩者都結合在一起。 我當然可以將第一個場景中的ID存儲到某個文件中,並根據該文件爲第二個場景定義一個送料器,但這並不好,我想知道是否可以通過現有的加熱機制實現它。 – u6f6o

相關問題