我正在使用 Jmeter v4.0 r1823414。根据这个答案 https://stackoverflow.com/questions/50820389/unable-to-set-incremental-variable-in-jmeter?noredirect=1#comment88652169_50822368,有一个使用 JSR223 PostProcessor 的建议,逐字:
建议考虑使用 Groovy 进行任何形式的脚本编写
迁移到 JSR223 后处理器
在这种方法之前,我尝试使用 BeanShell Sampler 将数据简单地写入 csv 文件。我从以下位置获取的代码示例火焰计教程 https://www.blazemeter.com/blog/saving-data-to-csv-files-with-java-through-jmeter页。但是,我收到了错误
Sourced file: inline evaluation of: ``import java.io.FileWriter; import java.util.Arrays; import java.io.Writer; impor . . . '' : Typed variable declaration : Attempt to access property on undefined variable or class name
好吧,既然有人建议搬到JSR223采样器(或者PostProcessor,不确定它们在功能方面有什么区别),我稍微修改了代码,使其更加基于Java,以便在JSR223采样器:
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.io.Writer;
import java.util.List;
public class Main {
//Default separator
private static char SEPARATOR = ',';
//get path of csv file (creates new one if its not exists)
private static String csvFile = "C:/TiredOfProgramming/Work/results.csv"; // for example '/User/Downloads/blabla.csv'
private static String[] params = {"hello", "world", "jmeter"};
//function write line in csv
private static void writeLine(FileWriter writer, String[] parameters, char separator) throws IOException
{
boolean firstParameter = true;
StringBuilder stringBuilder = new StringBuilder();
String parameter = " ";
for (int i = 0; i < parameters.length; i++)
{
//get param
parameter = parameters[i];
log.info(parameter);
//if the first param in the line, separator is not needed
if (!firstParameter)
{
stringBuilder.append(separator);
}
//Add param to line
stringBuilder.append(parameter);
firstParameter = false;
}
//prepare file to next line
stringBuilder.append("\n");
//add to file the line
log.info(stringBuilder.toString());
writer.append(stringBuilder.toString());
}
FileWriter fileWriter = new FileWriter(csvFile, true);
writeLine(fileWriter, params, SEPARATOR);
//proper close to file
fileWriter.flush();
fileWriter.close();
}
此特定脚本失败并显示以下消息:
Script8.groovy: 15: 意外标记:hello @ 第 15 行,第 39 列。
private static String[] params = {"hello", "world", "jmeter"};
如果我测试这个智能集成开发环境只需将 writeLine 方法包装到 main 方法中,一切正常
package com.tiredofprogramming;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.io.Writer;
import java.util.List;
public class Main {
//Default separator
private static char SEPARATOR = ',';
//get path of csv file (creates new one if its not exists)
private static String csvFile = "C:\\TiredOfProgramming\\Work\\results.csv"; // for example '/User/Downloads/blabla.csv'
private static String[] params = {"hello", "world", "jmeter"};
public static void main(String[] args) throws IOException {
FileWriter fileWriter = new FileWriter(csvFile, true);
writeLine(fileWriter, params, SEPARATOR);
//proper close to file
fileWriter.flush();
fileWriter.close();
}
//function write line in csv
private static void writeLine(FileWriter writer, String[] parameters, char separator) throws IOException
{
boolean firstParameter = true;
StringBuilder stringBuilder = new StringBuilder();
String parameter = " ";
for (int i = 0; i < parameters.length; i++)
{
//get param
parameter = parameters[i];
System.out.println(parameter);
//if the first param in the line, separator is not needed
if (!firstParameter)
{
stringBuilder.append(separator);
}
//Add param to line
stringBuilder.append(parameter);
firstParameter = false;
}
//prepare file to next line
stringBuilder.append("\n");
//add to file the line
System.out.println(stringBuilder.toString());
writer.append(stringBuilder.toString());
}
}
我的问题是:groovy 采样器是否理解 Java(在一篇 SO 帖子中我看到提到 Groovy 理解 99% 的 java 语法)。有人曾经成功使用 Jmeter 将数据写入 csv 文件吗?