Beanshell Script在从终端运行时抛出错误,但它在JMETER中以GUI模式运行完美

时间:2016-08-09 08:51:34

标签: jmeter beanshell

我尝试运行以下脚本:

import org.apache.commons.io.FileUtils; // necessary import
int lines = FileUtils.readLines(new File("${testPlanFileDir}/csv/test_smtp_save.csv")).size() - 1; // get lines count
vars.put("lines", String.valueOf(lines)); // store the count into "lines" variable

要获取我的csv中的行数,以便我可以根据CSV文件中的行数执行循环。

如果我从GUI模式运行,上面的脚本运行得很好,但是当我从终端运行时,它会抛出跟随错误。

ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval
Sourced file: inline evaluation of:
``import org.apache.commons.io.FileUtils; // necessary import int lines = FileUtil . . . ''
: Typed variable declaration : Method Invocation FileUtils.readLines 

3 个答案:

答案 0 :(得分:0)

如何获得此${testPlanFileDir}变量值?除此之外,代码看起来不错。

如果您想了解更多相关的错误消息,可以尝试将代码放入try block

import org.apache.commons.io.FileUtils;

try {
    int lines = FileUtils.readLines(new File("${testPlanFileDir}/csv/test_smtp_save.csv")).size() - 1;
    vars.put("lines", String.valueOf(lines));
}
catch (Throwable ex) {
    log.error("Error in Beanshell", ex);
    throw ex;
}

查看 jmeter.log 文件 - 它将包含“通常”的堆栈跟踪。

或者,您可以将debug()命令添加到Beanshell脚本的最开头 - 它会将调试输出切换为stdout

有关更多与Beanshell相关的提示和技巧,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component

答案 1 :(得分:0)

将$ {testPlanFileDir}替换为:

  

vars.get(" testPlanFileDir&#34)

你应该避免使用Beanshell来支持嵌入在JMeter 3.0中的JSR223 + Groovy + Cache,参见:

答案 2 :(得分:0)

我用它来获取.jmx文件的当前目录。 声明可变的TestPlanFileDir为;

${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}