2013-01-04 42 views
4

我正在使用JMeter發送HTTP POST請求。有條件地發送帶有HTTP請求的jmeter變量

我的請求的身體是JSON,例如類似{"Var1": "${Var1}","Var2": ${Var2},"Var3":"${Var3}"}的東西。

這些參數在HTTP請求的參數中設置,沒有參數的名稱。這工作正常,我能夠使用我在beanshell預處理器中設置的變量發送請求(通過設置變量並使用vars.put())。

我的問題是如何以編程方式發送參數的預處理器部分?例如:

if(a){ 
send parameters `{"Var1": "${Var1}","Var2": ${Var2}` as my JSON 
} 
else { 
send parameters `{"Var3":"${Var3}"}` as my JSON 
} 

vars.remove()不爲我工作,因爲它消除從該變量的值,但仍然把它發送在請求(例如作爲​​)。

回答

0

替換由BeanShell的採樣器的預處理器,將計算一個布爾值一個並把它作爲一個變種:

vars.put("a", value) 

然後用2個If Controller S其中每一個將包含與所述不同參數的採樣器。

第一個條件是$ {a},因爲它將是$ {a}的否定。

+0

但條件'a'取決於beanshell預處理器內部的邏輯。換句話說,我想要這樣做:if(a.equals(「Something」)然後發送HTTP POST中的var1和var2,否則發送var3。所有3個變量已經存在於「用請求發送參數」中的鍵值對JMeter HTTP請求的區域... – Dionisis

+0

我更新了答案 –

0

只需使用「Body Data」選項卡即可。您可以有條件地創建JSON字符串,然後使用普通佔位符僅在正文數據中「打印」變量。

0

實現你想要做的最簡單和最快的方法是使用JMeter if控制器(Add - > Logic controller - > If controller)

您將一個if控制器添加到您正在處理的線程組,並將您的表達式返回布爾值條件(默認Javascript)。作爲if控制器的子節點,您放置HTTP請求採樣器,以便在if成功時觸發。

假設你要發送一個請求,如果存在要傳遞到JMeter的屬性:

${__P(media)}.length > 0 

的你一個,如果控制器加上在你只是另一個HTTP請求取樣檢查一個否定的條件。

你完成了。