2016-02-03 104 views
1

嘗試使用StringFromFile函數從數據文件中讀取新行。 以下是我的代碼和數據文件。使用JMeter中的StringFromFile函數從csv文件中讀取多行

int numOfTransactions = Integer.parseInt(vars.get("POS_TRANSACTION_NUM")); 
    for(int i=0; i<numOfTransactions;i++){ 
     addOneMessage(${_StringFromFile(data//external_50k.txt)}); 
     log.info("${_StringFromFile(data//external_50k.txt,,,)}"); 
    } 

external_50k.txt:

10000 
10001 
10002 
10003 
10004 
10005 
.. 
50000 

而且numOfTransactions = 3

因此for循環將循環3次,我想讀取並傳遞10000,10001和10002在addOneMessage函數中,並且下次讀取10004,10005和10006 ...直到具有50000行的文件耗盡。

但是,目前的StringFromFile不會讀取新行。 10000傳遞給addOneMessage 3倍

因此,它是象下面這樣:

10000 
10000 
10000 
10001 
10001 
10002 
10003 

回答

2

一般不是非常好的做法聯函數調用到腳本,Groovy語言它會阻止編制和事業性能下降。也許有辦法做到,你需要使用While Controller什麼,但畫面不清晰,所以我會建議修改你的方法代替:

鑑於你已經在使用一些代碼,我會建議在修改如下:

import org.apache.commons.io.FileUtils; 

int position; 

if (vars.getObject("position") != null) { 
    position = vars.getObject("position"); 
} 
else { 
    position = 0; 
} 

int numOfTransactions = Integer.parseInt(vars.get("POS_TRANSACTION_NUM")); 

for (int i = 0; i < numOfTransactions; i++) { 
    log.info(FileUtils.readLines(new File("data/external_50k.txt")).get(position)); 
    position++; 
} 

vars.putObject("position", position); 

參考文獻:

1

爲什麼不使用CSV數據集配置而不是使用腳本?你描述

場景可以用3 CSV數據集的配置元素可以輕鬆實現:

enter image description here

這個測試場景不正是你所描述的相同。每個CSV數據集配置讀取定義文件的下一個條目(選項卡被視爲記錄之間的分隔符)並將值寫入變量(在我的情況下爲link1)。接下來的兩個條目閱讀下兩個條目,並將它們放入link2和link3。然後,例如,我可以通過我的HTTP請求正文中的$ {link1},$ {link2}和$ {link3}輕鬆訪問所有三個值。你不需要使用While控制器,只需要多次循環你的線程。每一個接下來的線程迭代都會重複這些步驟:從您的文件中讀取3個值。