我正在使用Jmeter进行API自动化,我在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();
答案 0 :(得分:0)
基本上,当您写入文件时,您可以使用布尔false
作为FileWriter构造函数的第二个参数来覆盖文件
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,其值为true
在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();
测试计划变量:
答案 1 :(得分:0)
不要使用脚本来向文件写入任何内容,JMeter能够将任何内容存储到其.jtl结果文件中,因此我建议将其配置为存储您需要的内容而不是尝试创建额外的结果文件这样一种奇怪的方式:
所以我建议切换到Response Assertion或JSR223 Assertion而不是PostProcessor。如果需要,您可以通过将下一行添加到 user.properties 文件(位于JMeter安装的“bin”文件夹中)告诉JMeter存储断言失败消息,但我认为它默认为{{1}无论如何)
true