2016-02-03 64 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个值。