如何使用jmeter覆盖csv文件中的数据
问题描述:
我正在使用Jmeter进行API自动化,我正在写入结果通过或失败的CSV文件。如何使用jmeter覆盖csv文件中的数据
我无法覆盖旧的结果数据,每次运行测试用例时都会附加旧的结果数据。
我使用Beanshell Post处理器写入CSV文件。
import java.io.file;
import org.apache.jmeter.services.FileServer;
ActualResponseCode = prev.getResponseCode();
if (vars.get("ExpectedResponse").equals(vars.get("ActualResponse")))
{
if(vars.get("ExpectedResponseCode").equals(prev.getResponseCode()))
{
prev.setSuccessful(true);
Result = "Pass";
ErrorMessage = "No Error";
}
else
{
Result = "Fail";
ErrorMessage = "ResponseCode not matching";
}
}
else
{
prev.setSuccessful(false);
Result = "Fail";
ErrorMessage = "ResponseData is not matching";
}
f = new FileOutputStream("C://Users//a622821//Desktop//apache-jmeter-3.2//API_AUTOMATION//TestResult_Post.csv", true);
p = new PrintStream(f);
p.println(vars.get("TestCase") + "," + vars.get("API_Endpoint") + "," + vars.get("ExpectedResponseCode") + "," + ActualResponseCode + "," + Result + "," + ErrorMessage);
p.close();
f.close();
答
基本上当你写文件,你可以通过使用布尔false
作为第二个参数FileWriter的构造overrid文件
File file = ....
new FileWriter(file, false);
如果您有BeanShell的几个电话,我建议创建BeanShell的采样将被称为在测试开始时,将覆盖文件(创建空文件):
import java.io.file;
f = new FileOutputStream("C://Users//a622821//Desktop//apache-jmeter-3.2//API_AUTOMATION//TestResult_Post.csv", false);
p = new PrintStream(f);
p.close();
f.close();
如果必须使用相同的BeanShell,你需要一个变量标志,所以加可变firstTime值为真
在BeanShell中使用它通过firstTime变量设置标志:
import java.io.file;
import org.apache.jmeter.services.FileServer;
ActualResponseCode = prev.getResponseCode();
if (vars.get("ExpectedResponse").equals(vars.get("ActualResponse")))
{
if(vars.get("ExpectedResponseCode").equals(prev.getResponseCode()))
{
prev.setSuccessful(true);
Result = "Pass";
ErrorMessage = "No Error";
}
else
{
Result = "Fail";
ErrorMessage = "ResponseCode not matching";
}
}
else
{
prev.setSuccessful(false);
Result = "Fail";
ErrorMessage = "ResponseData is not matching";
}
firstTime = vars.get("firstTime");
flag = true;
if ("true".equals(firstTime)) {
flag = false;
vars.put("firstTime", "false");
}
f = new FileOutputStream("C://Users//a622821//Desktop//apache-jmeter-3.2//API_AUTOMATION//TestResult_Post.csv", flag);
p = new PrintStream(f);
p.println(vars.get("TestCase") + "," + vars.get("API_Endpoint") + "," + vars.get("ExpectedResponseCode") + "," + ActualResponseCode + "," + Result + "," + ErrorMessage);
p.close();
f.close();
测试计划变量:
答
不要使用脚本将任何内容写入文件,JMeter可以将任何东西存储到它的.jtl结果文件中,因此我建议您将它配置为存储您需要的文件,而不是尝试在这种怪异文件中创建额外的结果文件方式如下:
- BeanShell的是不是最好的脚本选项,如果你需要去的脚本可以考虑使用JSR223 Test Elements and Groovy language instead
- 如果你正在写的东西到一个文件确保你把上述JSR223元素下的Critical Section Controller
所以我建议切换到Response Assertion或JSR223 Assertion而不是PostProcessor。如果需要,你可以告诉JMeter的加入下一行user.properties文件来存储断言失败消息(位于安装Jmeter的“bin”文件夹,但我认为它在任何情况下,默认为true
)
jmeter.save.saveservice.assertion_results_failure_message=true
你可以添加你的代码创建文件(beanshell) – user7294900