2012-12-17 20 views
3

我在加特林方案遇到下面的代碼流(修改爲簡潔/隱私):使用在加特林重複塊

val scn = scenario("X") 
    .repeat(numberOfLoops, "loopName") { 
     exec((session : Session) => { 
     val loopCounter = session.getTypedAttribute[Int]("loopName") 
     session.setAttribute("xmlInput", createXml(loopCounter)) 
     }) 
     .exec(
     http("X") 
     .post("/rest/url") 
     .headers(headers) 
     .body("${xmlInput}")) 
    ) 
    } 

它的命名在重複塊循環,讓說出來的會話並使用它來創建唯一的輸入XML。然後,將該XML粘貼回會話中,並在發佈時再次提取它。

我想取消命名循環迭代器和訪問會話的需要。 理想情況下,我想使用Stream來生成XML。

但加特林控制循環,我不能遞歸。我需要妥協嗎,還是可以以功能性方式使用Gatling(沒有變數或訪問會話)?

回答

2

正如我所看到的,numberOfLoops和createXml似乎都不依賴於會存儲在會話中的任何用戶相關內容,因此循環可以在構建時解決,而不是在運行時解決。

import com.excilys.ebi.gatling.core.structure.ChainBuilder 

def addXmlPost(chain: ChainBuilder, i: Int) = 
    chain.exec(
     http("X") 
      .post("/rest/url") 
      .headers(headers) 
      .body(createXml(i)) 
    ) 

def addXmlPostLoop(chain: ChainBuilder): ChainBuilder = 
    (0 until numberOfLoops).foldLeft(chain)(addXmlPost) 

乾杯,

斯特凡

PS:問一些關於加特林的首選方式是我們的谷歌集團:https://groups.google.com/forum/#!forum/gatling

+1

我認爲,出於各種理由,提出問題的堆棧溢出要幫助更多的人,而不是在加特林的谷歌集團上提問。 –

+0

您的觀點。不是我的,因爲我有一些答案被低估了,甚至一度被主持人取消,即使問題明確地針對加特林,我也是項目負責人。 –

+0

當然,這只是我的意見,但社區反饋(通常)仍然是有價值的,即使它是你的項目是正確的?這可能是正確的答案,但感覺「應該是更好的答案」仍然有幫助 - 特別是因爲它是你的項目。使用堆棧溢出仍然有很多很好的理由。例如,谷歌組織很不吸引人,很難找到有用的信息。堆棧溢出也可以更好地接觸到一小部分具有寶貴影響力的技術專家。再次,只是我的意見。 –