2017-08-07 102 views
0

我正在使用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(); 
+0

你可以添加你的代码创建文件(beanshell) – user7294900

回答

0

基本上当你写文件,你可以通过使用布尔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(); 

测试计划变量: variable

+0

我试过使用新的FileWriter(file,false);但其只重写最后的结果。我有8个测试用例,它只覆盖了最后一个测试用例。其他测试用例结果未显示在文件中。 – Richa

+0

我已经加入我的代码在我的问题,我只用一个文件编写测试用例的所有结果 – Richa

+0

u能请您分享更多的细节如何使用BeanShell的采样数通话 – Richa

0

不要使用脚本将任何内容写入文件,JMeter可以将任何东西存储到它的.jtl结果文件中,因此我建议您将它配置为存储您需要的文件,而不是尝试在这种怪异文件中创建额外的结果文件方式如下:


所以我建议切换到Response AssertionJSR223 Assertion而不是PostProcessor。如果需要,你可以告诉JMeter的加入下一行user.properties文件来存储断言失败消息(位于安装Jmeter的“bin”文件夹,但我认为它在任何情况下,默认为true

jmeter.save.saveservice.assertion_results_failure_message=true 

查看Scripting JMeter Assertions in Groovy - A Tutorial了解更多详情。