2017-08-07 55 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瞭解更多詳情。

相關問題