2012-04-17 47 views
1

我在創造JMeter的測試場所,其瀏覽次數(2 - 10)網頁的隨機量的過程中,其URL被從CSV數據集獲取。我創建了CSV數據集和正常工作的採樣器,只是每個線程只從數據集中讀取一行,這不是我需要的 - 我希望在採樣器完成後讀取新行(或之前,我沒有受到傷害)。如何從JMeter的CSV數據集配置中讀取下一行?

我看到this question非常相似,該解決方案是使用Raw Data Source預處理器,它的工作,但需要在問題(加塊每行前大小)艱苦改建爲文件,這是一個有點當文件大約500行時,疼痛。

有沒有一種方法我可以設置CSV數據集,以推進到下一行上閱讀,或者使用一些後或前處理,如BeanShell中,爲了做到這一點?我看到有人說CSVRead可以做到這一點,但是這表明訪問是按線程進行的,這對我來說並不好。作爲一個說明 - 最終我要做的就是訪問傳遞給HTTP採樣器的文件中的一個隨機行,如果有更簡單或更好的方式來做到這一點,我願意提供建議。

+0

有合適的解決方案嗎? – 2012-05-10 16:11:47

回答

2

您可以使用從這個beanshell(= java)代碼執行BeanShell Sampler/BeanShell PostProcessor/BeanShell PreProcessor

下面的代碼將讀取你的文件中的所有行,然後選擇一個隨機:

import java.text.*; 
import java.io.*; 
import java.util.*; 

String [] params = Parameters.split(","); 
String csvTest = params[0]; 
String csvDir = params[0]; 

ArrayList strList = new ArrayList();  

try { 
    File file = new File(System.getProperty("user.dir") + File.separator + csvDir + File.separator + csvTest); 

    if (!file.exists()) { 
     throw new Exception ("ERROR: file " + csvTest + " not found in " + csvDir + " directory."); 
    } 

    BufferedReader bufRdr = new BufferedReader(new FileReader(file)); 
    String line = null; 

    while((line = bufRdr.readLine()) != null) { 
     strList.add(line); 
    } 

    bufRdr.close();    

    Random rnd = new java.util.Random(); 
    vars.put("csvUrl",strList.get(rnd.nextInt(strList.size()))); 
} 
catch (Exception ex) { 
    IsSuccess = false; 
    log.error(ex.getMessage()); 
    System.err.println(ex.getMessage()); 
} 
catch (Throwable thex) { 
    System.err.println(thex.getMessage()); 
} 

然後你就可以通過變量來訪問提取的URL($ {} csvUrl在這個例子中)。

我只懷疑在每次迭代時讀取完整文件(如果必須在循環中執行此操作)從性能的角度來看是很好的解決方案。

相關問題