2016-03-07 100 views
10

我需要每次創建一個隨機正整數並將其發送給Gatling中的Json主體。如何在Gatling的Json Body中添加隨機值?

我用下面的代碼來創建一個隨機的正ineger:

val r = new scala.util.Random; 
val OrderRef = r.nextInt(Integer.MAX_VALUE); 

但是,我怎樣才能喂隨機生成值到JSON體?

我想:

.exec(http("OrderCreation") 
.post("/abc/orders") 
.body(StringBody("""{ "orderReference": "${OrderRef}"}""").asJson) 

但是,這似乎並沒有工作。請任何線索。

謝謝!

回答

20

所有你想要每次產生隨機數的第一,從而OrderRef必須是一個方法,如:

def orderRef() = Random.nextInt(Integer.MAX_VALUE) 

方意見:由斯卡拉約定:名稱駝峯,(),而它會產生新的價值,最終沒有;

要使用準備的方法,您不能使用Gatling EL字符串。語法非常有限,基本上"${OrderRef}"在Gatling會話中搜索名稱爲OrderRef的變量。

正確的方法是使用表達功能爲:

.exec(
    http("OrderCreation") 
    .post("/abc/orders") 
    .body(StringBody(session => s"""{ "orderReference": "${orderRef()}" }""")).asJSON 
) 

在這裏,你創建匿名函數取加特林Session和返回String的身體。字符串由標準Scala字符串插值機制組成,並在使用之前使用函數orderRef()。使用Scala的時候

.body(StringBody(session => "{ \"orderReference\": " + orderRef() +" }")).asJSON 

這是不是很首選的樣式:

當然你也可以爲省略斯卡拉串插。

在Gatling文檔中查看更多詳細信息到Request Body並閱讀更多關於Galting EL syntax

的另一種方式是定義一個饋線:

// Define an infinite feeder which calculates random numbers 
val orderRefs = Iterator.continually(
    // Random number will be accessible in session under variable "OrderRef" 
    Map("OrderRef" -> Random.nextInt(Integer.MAX_VALUE)) 
) 

val scn = scenario("RandomJsonBody") 
    .feed(orderRefs) // attaching feeder to session 
    .exec(
    http("OrderCreation") 
    .post("/abc/orders") 
    // Accessing variable "OrderRef" from session 
    .body(StringBody("""{ "orderReference": "${OrderRef}" }""")).asJSON 
) 

在此不同的是,首先我們定義饋線的情況,那麼,我們將其附加到會話,然後經由格林EL使用其在請求體值字符串。這適用於每個虛擬用戶在連接到會話之前通過Gatling從饋線獲取饋線的值。查看更多關於飼養者here

建議:如果您的場景很簡單,請從第一個解決方案開始。如果需要更復雜的思考饋線。

享受

+0

非常感謝你...你節省了我很多時間:) –

+0

不客氣:) – Teliatko

+1

第一個「正確」的方式做到這一點並不適合我。另一種方式確實奏效。謝謝。 –