2014-03-24 69 views
3

我正在寫一個jmeter腳本,它會一直加載數據,直到表達到指定的大小。我有一個while循環,其中有一個HTTP採樣器加載數據,然後是另一個帶有XPath後處理器的HTTP採樣器來檢查表大小(它們稱爲兩個不同的API)。 XPath Post Processor的引用變量是currentSize,我有一個用戶定義的變量maxSize,但是使用$ {currentSize} < $ {maxSize}作爲while循環的條件創建了一個無限循環。Jmeter雖然控制器似乎沒有評估變量作爲數字

思考也許問題是,XPath的輸出是一個字符串,我試過在beanshell中將各種東西強制爲一個數字,但我是一個beanshell noob,所以我一直沒有成功那也是。任何人都可以指導我如何讓jmeter將變量識別爲數字嗎? (最好是一個小數,但如果我必須舍入到一個int,我可以忍受這一點)。

謝謝!

回答

3

我認爲使用__javascript(parseInt())應該足以讓您檢查條件。

例如

$ {__使用Javascript(parseInt函數($ {} time_elapsed_string)< parseInt函數($ {}持續時間))}

+0

這正是我想要的,一個好辦法。我意識到變量$ {currentSize}直到在循環內部的XPath後處理器之後才被定義,因此它不作爲循環定義的一部分工作。一旦我將currentSize設置爲0作爲用戶定義的變量,它就像一個魅力! '$ {__ javaScript(parseInt($ {currentSize})

2

假設你有以下變量:

  • currentSize
  • MAXSIZE
  • 繼續

其中continue通過User Defined Variables設置並具有true

可以將該值使用以下Beanshell檢查代碼,如果當前的大小等於或大於最大尺寸:

import java.math.BigDecimal; 

String currentSize = vars.get("currentSize"); 
String maxSize = vars.get("maxSize"); 

BigDecimal currentSizeNumber = new BigDecimal(currentSize); 
BigDecimal maxSizeNumber = new BigDecimal(maxSize); 

if (currentSizeNumber.compareTo(maxSizeNumber) > -1){ 
    vars.put("continue", "false"); 
} 

確保滿足下列條件:

  1. 你雖然控制器具有${continue}作爲條件
  2. BeanShell的採樣,預/後處理器或聲明與上面的代碼一起添加爲While控制器的子項

請參閱How to use BeanShell指南f或更多細節和種類的Beanshell食譜。

一切都應該這樣工作。

希望這會有所幫助。

相關問題