我在下面的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文章。

07-28 01:21
查看更多