我在下面的BeanShell中声明了一个用户定义的变量为'projectHome',该变量返回jmx文件的绝对路径。${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}
在Windows上,它返回:projectHome = C:\ Users \ dd \ Desktop \ API_Testing
在MacOS上,它返回:
projectHome = /用户/ dd /桌面/ API_Testing
在MacOS上的以下BeanShell Sampler中,变量值可以正常工作:
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 = "${projectHome}/tenant_details.csv";
String[] params = {"${Email}"};
FileWriter fileWriter = new FileWriter(csvFile, true);
writeLine(fileWriter, params, SEPARATOR);
//proper close to file
fileWriter.flush();
fileWriter.close();
当我在Windows计算机上运行脚本时,由于路径带有反斜杠,导致脚本失败。
如何在同一个BeanShell Sampler中将反斜杠转换为正斜杠,以便它可以在Windows和MacOS上运行?
最佳答案
您无需将斜杠/
替换为反斜杠\
,斜杠也将在Windows平台上起作用,您可以执行以下操作:
new File("c:/Windows/system32/cmd.exe")
它通常会解决。
不要在脚本中引用像
${projectHome}
和/或${Email}
这样的变量,请改用vars
速记。它代表JMeterVariables类实例,并提供对范围内所有JMeter变量的读/写访问。所以你应该使用String csvFile = vars.get("projectHome") + "/tenant_details.csv";
和
String[] params = {vars.get("Email")};
由于JMeter 3.1 it is recommended to use JSR223 Test Elements and Groovy language for scripting,因此考虑到下一个可用机会迁移到Groovy,因为Beanshell(并且将)在高负载时成为性能瓶颈。有关更多信息,请参见Apache Groovy - Why and How You Should Use It文章。