2013-11-22 87 views
0

我在JMeter問題上很新。BeanShell預處理器更新用戶定義變量

在測試腳本中,我有一個BeanShell PreProcessor元素,用於更新以前在「用戶定義的變量」元素中定義的一些變量。

後者這些變量在「Http Requests」中使用。但是,http請求中使用的值是默認值。

腳本似乎正在工作,由於一些調試打印();

我的問題是,如果有必要延遲腳本以確保BeanShell完成?

非常感謝您的關注

回答

2

沒有必要,因爲它是被之前要求執行把任何延遲BeanShell的預處理器。我建議您檢查jmeter.log文件以查看是否存在任何腳本問題,因爲Beanshell預處理器不會在任何位置報告錯誤,包括查看結果樹偵聽器。

至少有2種方式,以確保一切都很好,你的BeanShell腳本:

  1. 把你的調試打印代碼變量替換邏輯,看它是否觸發
  2. 使用JMeter的__Beahshell功能在你的HTTP請求中。如果沒關係 - 查看結果樹將顯示beanshell生成的值。否則 - 該字段將爲空白,並且相關錯誤將顯示在日誌中。

例測試用例:

鑑於以下測試計劃結構:

  • 線程組與1個用戶和1環
  • HTTP GET請求到google.com與路徑/和參數q

如果在beanshell函數後面提供參數「q」:

${__BeanShell(System.currentTimeMillis())} 

,並期待爲查看結果樹「請求」選項卡中,你應該看到:

GET http://www.google.com/?q=1385206045832 

,如果更改功能,像一些不正確的:

${__BeanShell(Something.incorrect())} 

你會看到一個空白的請求。

改變現有的變量(或創建新的變量,如果不存在)的正確方法看起來像

vars.put("variablename", "variablevalue"); 

* 重要提示:* JMeter的變量是Java中的字符串,如果你想設置其他東西(日期,整數,無論​​)到JMeter變量你需要將其強制轉換爲字符串。

例子:

int i = 5; 
vars.put("int_i", String.valueOf(i)); 

希望這有助於。

-2

我也是jmeter的新手,但正如我所知,「用戶定義變量」中定義的變量是常量,因此您無法更改它們。我建議在預處理器或CSV數據集配置中使用「用戶參數」。

+1

這是不正確的。可以使用BeanShell預處理器覆蓋用戶定義的變量的值。 參見:隨時改變JMeter的變量(http://www.blazemeter.com/blog/queen-jmeters-built-componentshow-use-beanshell) 本質: 假設你有一個用戶自定義在While循環中某處使用的值爲「true」的變量名爲「continue」。您可以將它設置爲「false」,如下所示: 'vars.put(「counter」,「false」);' – theINtoy