使用JMeter中的StringFromFile函数从csv文件中读取多行

时间:2016-02-03 20:24:24

标签: jmeter

尝试使用StringFromFile函数从数据文件中读取新行。 下面是我的代码和数据文件。

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

因此,循环将循环3次,我想读取并在addOneMessage函数中传递10000,10001和10002,下次读取10004,10005和10006 ......直到50000行的文件用完为止。

但是,目前StringFromFile不会读取新行。 10000次传递给addOneMessage 3次

所以,就像下面这样:

10000
10000
10000
10001
10001
10002
10003

2 个答案:

答案 0 :(得分: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 :(得分:1)

为什么不使用CSV数据集配置而不是使用脚本?

您描述的场景可以使用3个CSV数据集配置元素轻松实现:

enter image description here

此测试场景与您描述的完全相同。每个CSV数据集配置从定义的文件中读取下一个条目(选项卡被视为记录之间的分隔符)并将值写入变量(在我的情况下为link1)。接下来的两个条目读取下两个并将它们放入link2和link3。然后,我可以通过我的HTTP请求正文中的$ {link1},$ {link2}和$ {link3}轻松访问所有三个值。并且您不需要使用While控制器,只需根据需要循环您的线程。每次下一次线程迭代都将重复这些步骤:从文件中读取3个值。