【问题标题】:JMeter/BeanShell: Typed variable declaration : Error in array initializer: nullJMeter/BeanShell:类型化变量声明:数组初始值设定项中的错误:null
【发布时间】:2018-02-01 12:25:49
【问题描述】:

我对这里的代码有疑问 https://www.blazemeter.com/blog/saving-data-to-csv-files-with-java-through-jmeter 我尝试将数据写入 csv。我使用所有代码 - 我只更改第 47 行 String[] 参数 = {${context1}, ${context2}};

当我执行测试时,我在采样器结果中收到这样的消息

响应码:500

响应消息:org.apache.jorphan.util.JMeterException:调用 bsh 方法时出错:eval 源文件:内联评估:'import java.io.FileWriter; import java.util.Arrays; import java.io.Writer; impor . . . ':类型变量声明:数组初始值设定项错误:null 在日志文件中

2018/02/01 12:32:52 错误 - jmeter.util.BeanShellInterpreter:调用 bsh 方法时出错:eval 源文件:内联评估:'import java.io.FileWriter; import java.util.Arrays; import java.io.Writer; impor . . . ':类型变量声明:数组初始值设定项错误:null

2018/02/01 12:32:52 警告 - jmeter.protocol.java.sampler.BeanShellSampler:org.apache.jorphan.util.JMeterException:错误调用 bsh 方法:eval 源文件:内联评估:@987654324 @:类型化变量声明:数组初始值设定项中的错误:null

有什么帮助吗? :)

    import java.io.FileWriter;
import java.util.Arrays;
import java.io.Writer;
import java.util.List;

//Default separator
char SEPARATOR = ',';

//function write line in csv
public void writeLine(FileWriter writer, String[] params, char separator)
{
   boolean firstParam = true;

   StringBuilder stringBuilder = new StringBuilder();
   String param = "";

   for (int i = 0; i < params.length; i++)
   {
      //get param
      param = params[i];
      log.info(param);

         //if the first param in the line, separator is not needed
       if (!firstParam) 
       {
           stringBuilder.append(separator);
       }

         //Add param to line
       stringBuilder.append(param);

       firstParam = false;
   }

   //prepare file to next line
   stringBuilder.append("\n");

   //add to file the line
   log.info(stringBuilder.toString());
   writer.append(stringBuilder.toString());

}

//get path of csv file (creates new one if its not exists)
String csvFile = "/JMeter/dane.csv"; // for example '/User/Downloads/blabla.csv'

String[] params = {${context1}, ${context2}};

FileWriter fileWriter = new FileWriter(csvFile, true);
writeLine(fileWriter, params, SEPARATOR);

//proper close to file
fileWriter.flush();
fileWriter.close();

【问题讨论】:

  • 你能展示一下这个组件中的代码吗?谢谢

标签: java jmeter beanshell


【解决方案1】:
  1. 使用Debug SamplerView Results Tree 侦听器组合仔细检查您的context1context2 变量值
  2. 将第 47 行修改为:

    String[] params = {"${context1}", "${context2}"};
    
  3. 如果您仍然遇到问题,请尝试将您的代码放在 try block 中,例如:

    try {
        //your code here
    }
    catch (Throwable ex) {
       log.info("Error in Beanshell", ex);
       throw ex;
    }
    

    这样您将在 jmeter.log 文件中获得“人类可读”的堆栈跟踪。

有关 JMeter 中的 Beanshell 脚本的更多信息,请参阅 How to Use BeanShell: JMeter's Favorite Built-in Component 文章。

【讨论】:

  • String[] 参数 = {"${context1}", "${context2}"};解决了我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
相关资源
最近更新 更多