在 JMeter 中使用 Beanshell Sampler 将变量写入 txt/csv 文件
Writing Variables using Beanshell Sampler in JMeter into a txt/csv file
我的要求是使用在不同步骤中使用的 2 个 Beanshell 采样器在一行中写入两个值,并用逗号分隔
但是第二个变量写在一个新行
我在不同的步骤有两个不同的 Beanshell 采样器。
第一个捕获变量 1 并将其写入文件
第二个捕获变量 2 并将其写入文件
第一个代码:
String path= FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt";
SubmissionNum= vars.get("CP_SubmissionNumber");
EMailID= vars.get("P_emailID");
f = new FileOutputStream(path, true);
p = new PrintStream(f);
this.interpreter.setOut(p);
p.println(EMailID+","+SubmissionNum);
f.close();
第二个代码:
String path= FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt";
Policynumber= vars.get("CP_Policynumber");
f = new FileOutputStream(path, true);
p = new PrintStream(f);
this.interpreter.setOut(p);
p.println(","+Policynumber);
f.close();
预期结果:
abc@email.com,12345601,12345602
实际结果:
abc@email.com,12345601
,12345602
String path= FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt";
SubmissionNum= vars.get("CP_SubmissionNumber");
EMailID= vars.get("P_emailID");
Policynumber= vars.get("CP_Policynumber");
f = new FileOutputStream(path, true);
p = new PrintStream(f);
this.interpreter.setOut(p);
p.println(EMailID+","+SubmissionNum+","+Policynumber);
f.close();
试试上面的方法。
而不是添加新行的 println
使用 print
p.print(EMailID+","+SubmissionNum);
首先,你知道Sample Variables property and Flexible File Writer? If you run your script with multiple virtual users most probably you will suffer from a form of a race condition什么时候多个线程会同时写入同一个文件导致垃圾数据吗
Since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language 对于任何脚本任务,原因在:
- Groovy 与现代 Java 版本兼容,而使用 Beanshell 时你会停留在 Java 5 语言级别
- Groovy 比 Beanshell
性能好很多
- Groovy 有很多 enhancements 让您的生活更轻松
例如您的代码可以缩短为:
第一个:
def file = new File(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt")
file << vars.get("P_emailID") << "," << vars.get("CP_SubmissionNumber") << ","
第二个:
def file = new File(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt")
file << vars.get("CP_Policynumber") << System.getProperty("line.separator")
我的要求是使用在不同步骤中使用的 2 个 Beanshell 采样器在一行中写入两个值,并用逗号分隔 但是第二个变量写在一个新行
我在不同的步骤有两个不同的 Beanshell 采样器。 第一个捕获变量 1 并将其写入文件 第二个捕获变量 2 并将其写入文件
第一个代码:
String path= FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt";
SubmissionNum= vars.get("CP_SubmissionNumber");
EMailID= vars.get("P_emailID");
f = new FileOutputStream(path, true);
p = new PrintStream(f);
this.interpreter.setOut(p);
p.println(EMailID+","+SubmissionNum);
f.close();
第二个代码:
String path= FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt";
Policynumber= vars.get("CP_Policynumber");
f = new FileOutputStream(path, true);
p = new PrintStream(f);
this.interpreter.setOut(p);
p.println(","+Policynumber);
f.close();
预期结果:
abc@email.com,12345601,12345602
实际结果:
abc@email.com,12345601
,12345602
String path= FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt";
SubmissionNum= vars.get("CP_SubmissionNumber");
EMailID= vars.get("P_emailID");
Policynumber= vars.get("CP_Policynumber");
f = new FileOutputStream(path, true);
p = new PrintStream(f);
this.interpreter.setOut(p);
p.println(EMailID+","+SubmissionNum+","+Policynumber);
f.close();
试试上面的方法。
而不是添加新行的 println
使用 print
p.print(EMailID+","+SubmissionNum);
首先,你知道Sample Variables property and Flexible File Writer? If you run your script with multiple virtual users most probably you will suffer from a form of a race condition什么时候多个线程会同时写入同一个文件导致垃圾数据吗
Since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language 对于任何脚本任务,原因在:
- Groovy 与现代 Java 版本兼容,而使用 Beanshell 时你会停留在 Java 5 语言级别
- Groovy 比 Beanshell 性能好很多
- Groovy 有很多 enhancements 让您的生活更轻松
例如您的代码可以缩短为:
第一个:
def file = new File(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt") file << vars.get("P_emailID") << "," << vars.get("CP_SubmissionNumber") << ","
第二个:
def file = new File(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir() + "//P_IssuePolicy.txt") file << vars.get("CP_Policynumber") << System.getProperty("line.separator")