簡體   English   中英

如何在 jmeter 每次執行時只在 CSV 文件中寫入一次 header

[英]How to write header only once in the CSV file per execution in jmeter

我正在准備一個 BeanShell 后處理器腳本,將數據寫入 Jmeter 中的 CSV 文件。

這是我的代碼

try {
    File file = new File("samplefile.csv");
    FileWriter outputfile = new FileWriter(file, true);
    CSVWriter writer = new CSVWriter(outputfile);
    BufferedReader csvReader = new BufferedReader(new FileReader(file));

     List list = new ArrayList();
     String[] header={"no"};
     String[] id = {"${myNo}"};
     list.add(header);
     list.add(id);
     writer.writeAll(list);                             
     writer.close();
}
catch (IOException e) {
    e.printStackTrace();

}

在這里,我只想在 csv 文件的頂行將 header 寫入文件一次。 但每次我執行腳本時,每個示例用戶都會輸入 header。 在這里,我使用 openCSV jars 來讀取/寫入數據

我也試過 apache commons csv jars,但我無法執行代碼,我在這里得到一個錯誤是 appache common csv 的代碼

 try (
        BufferedWriter writer = Files.newBufferedWriter(Paths.get("sample.csv"));

        CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT
                .withHeader("NO");
    ) {
        csvPrinter.printRecord("${myNo}");
        csvPrinter.flush();            
    }

錯誤 oajuBeanShellInterpreter:調用 bsh 方法時出錯:文件中的 eval:內聯評估:``導入 java.io。 ; 導入 java.util。 ; 導入 java.nio.file.Files; 導入 java.ni。 . . '' 在第 8 行第 10 列遇到“(”。

警告 oajeBeanShellPostProcessor:BeanShell 腳本中的問題:org.apache.jorphan.util.JMeterException:調用 bsh 方法時出錯:eval 在文件中:內聯評估:``導入 java.io。 ; 導入 java.util。 ; 導入 java.nio.file.Files; 導入 java.ni。 . . '' 在第 8 行第 10 列遇到“(”。

錯誤 oajuBeanShellInterpreter:調用 bsh 方法時出錯:文件中的 eval:內聯評估:``導入 java.io。 ; 導入 java.util。 ; 導入 java.nio.file.Files; 導入 java.ni。 . . '' 在第 8 行第 10 列遇到“(”。

警告 oajeBeanShellPostProcessor:BeanShell 腳本中的問題:org.apache.jorphan.util.JMeterException:調用 bsh 方法時出錯:eval 在文件中:內聯評估:``導入 java.io。 ; 導入 java.util。 ; 導入 java.nio.file.Files; 導入 java.ni。 . . '' 在第 8 行第 10 列遇到“(”。

我將不勝感激任何幫助或建議。

謝謝

  1. “你的”代碼將無法工作,因為它沒有正確的try 塊語法,正確的代碼應該是這樣的:

     try { BufferedWriter writer = Files.newBufferedWriter(Paths.get("sample.csv")); CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader("NO")); csvPrinter.printRecord("${myNo}"); csvPrinter.flush(); } catch (Exception ex) { log.error("Failure in script: ", ex) }
  2. 如果您希望 header 只寫入一次 - 要么執行以下操作:

     if (ctx.getThreadNum() == 0) { list.add(header); }

    或者甚至更好地在設置線程組的某個地方寫下 header,因為我不知道你有多少用戶以及啟動設置是什么

  3. 自 JMeter 3.1 起,建議使用 JSR223 測試元素和 Groovy 語言編寫腳本,因此考慮遷移是個好主意。

  4. 如果是並發用戶,您的方法將停止工作,由於競爭條件,多個用戶將同時寫入同一個文件,導致數據損壞或丟失,最好使用Flexbile File Writer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM