JMeter BeanShell向文件中寫入內容


項目背景

  1. 待壓測的業務依賴前置業務的response

  2. 前置業務不在壓測范圍內

  3. 前置業務的response格式大致如下:

    {"data": "[id1, id2, id3...]"}
    
  4. 待壓測業務每次請求消耗一個id,同時希望能把每次用到的id記錄下來

實現方案

  1. 既然前置業務能一次性返回所需的id,那在setUp線程組中完成准備測試數據即可

  2. 使用BeanShell實現寫入文件的操作,考慮一下3點:
    ① 寫入到文件中的格式要能參數化給待測業務用
    ② id不可重復使用,那就要求文件中的內容每次都是新的id,即舊文件要刪除
    ③ 雖然前置業務返回的是JSON,但考慮到Java處理JSON要依賴第3方jar包,腳本移植不方便,就直接操作字符串吧

具體細節

  1. 在setUp線程組中新建前置業務的Sampler和JSON Extractor

  2. 在Sampler下繼續添加后置處理器BeanShell

    import java.io.*;
    
    var idFile = "data/id.csv";  // 定義存放id的文件路徑
    
    try{
        File f = new File(idFile);
        f.delete();     // 刪除舊的idFile文件
    }catch(Exception e){
        e.printStackTrace();
    }
    
    var idStr = vars.get("data");    // 獲取JSON Extractor中提取的data
    idStr = idStr.replace("[","");     // 去掉 "[id1, id2, id3...]" 首尾的中括號
    idStr = idStr.replace("]","");
    String[] temp = idStr.split(",");   // 以"," 分割字符串 "id1, id2, id3...",保存成String類型的數組
    
    FileWriter fstream = new FileWriter(idFile);   //FileWriter("file01.txt",true) 追加模式
    BufferedWriter out = new BufferedWriter(fstream);
    
    for (int i = 0; i < temp.length; i++){
        out.write(temp[i]);
        out.write(System.getProperty("line.separator"));  // 換行
    }
    
    out.close();
    fstream.close();
    
  3. 接下來就可以在待測業務的線程組中新建【CSV數據文件設置】

    • 注意這里有個坑,就是JMeter腳本在執行時,會先檢查csv文件是否存在,不存在會報錯,所以需要先手動創建一個“id.csv”在data目錄下,有無內容無所謂,主要為了檢查通過


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM