如何在jmeter中每次执行时只在CSV文件中写入一次头

svujldwt  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(195)

我正在准备一个BeanShell后处理器脚本,以将数据写入Jmeter中的CSV文件。
这是我的代码

try {
    File file = new File("samplefile.csv");
    FileWriter outputfile = new FileWriter(file, true);
    CSVWriter writer = new CSVWriter(outputfile);
    BufferedReader csvReader = new BufferedReader(new FileReader(file));

     List list = new ArrayList();
     String[] header={"no"};
     String[] id = {"${myNo}"};
     list.add(header);
     list.add(id);
     writer.writeAll(list);                             
     writer.close();
}
catch (IOException e) {
    e.printStackTrace();

}
在这里,我只想在csv文件的第一行中写入一次header。但是每次执行脚本时,都会为每个示例用户输入header。在这里,我使用openCSV jar来读/写数据
我也尝试了apache commons csv jar,但我无法执行代码,我得到了一个错误,这里是apache common csv的代码

try (
        BufferedWriter writer = Files.newBufferedWriter(Paths.get("sample.csv"));

        CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT
                .withHeader("NO");
    ) {
        csvPrinter.printRecord("${myNo}");
        csvPrinter.flush();            
    }

错误o.a.j.u. BeanShell解释器:调用bsh方法时出错:eval In文件:内联评估:“导入java.io.*;导入java实用程序 ; o.文件导入java.ni.文件; import java.ni . . .''在第8行第10列遇到“(“。
警告o.a.j.e. BeanShell后处理器:BeanShell脚本中的问题:org.apache.jorphan.util.JMeterException:调用bsh方法时出错:eval In文件:内联评估:“导入java.io.
;导入java实用程序 ; o.文件导入java.ni.文件; import java.ni . . .''在第8行第10列遇到“(“。
错误o.a.j.u. BeanShell解释器:调用bsh方法时出错:eval In文件:内联评估:“导入java.io.
;导入java实用程序 ; o.文件导入java.ni.文件; import java.ni . . .''在第8行第10列遇到“(“。
警告o.a.j.e. BeanShell后处理器:BeanShell脚本中的问题:org.apache.jorphan.util.JMeterException:调用bsh方法时出错:eval In文件:内联评估:“导入java.io.
;导入java实用程序 *; o.文件导入java.ni.文件; import java.ni . . .''在第8行第10列遇到“(“。
我将感激任何帮助或建议。
谢谢

093gszye

093gszye1#

1.“您的”代码将无法工作,因为它没有正确的try block语法,正确的语法如下:

try {
    BufferedWriter writer = Files.newBufferedWriter(Paths.get("sample.csv"));

    CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT
            .withHeader("NO"));
    csvPrinter.printRecord("${myNo}");
    csvPrinter.flush();
}
catch (Exception ex) {
    log.error("Failure in script: ", ex)
}

1.如果你想只写一次头文件,可以这样做:

if (ctx.getThreadNum() == 0) {
    list.add(header);
}

或者更好的方法是在setUp Thread Group中的某个地方编写头文件,因为我不知道您有多少用户,以及加速设置是什么
1.从JMeter 3.1开始,建议使用JSR223测试元素和Groovy语言编写脚本,因此考虑迁移是一个好主意。
1.在并发用户的情况下,您的方法将停止工作,由于race conditions多个用户将在同一时间写入同一个文件,导致数据损坏或丢失,最好使用Flexbile File Writer

相关问题