使用JMeter將提取的數據寫入文件

    1.概述

    在本教程中,讓我們探索兩種從Apache JMeter提取數據並將其寫入外部文件的方法。

    2.設置基本的JMeter腳本

    現在讓我們開始創建一個基本的JMeter腳本。讓我們Thread Group (這是創建Thread Group時的默認設置):

    使用JMeter將提取的數據寫入文件

    現在,在該Thread Group ,創建一個HTTP Sampler

    JMeter創建Http採樣器

    讓我們設置HTTP Sampler來調用在localhost.我們可以通過使用簡單的REST控制器定義API開始:

    @RestController
    
     public class RetrieveUuidController {
    
    
    
     @GetMapping("/api/uuid")
    
     public Response uuid() {
    
     return new Response(format("Test message... %s.", UUID.randomUUID()));
    
     }
    
     }

    另外,我們還定義Response實例,如上所引用:

    public class Response {
    
     private Instant timestamp;
    
     private UUID uuid;
    
     private String message;
    
    
    
     // getters, setters, and constructor omitted
    
     }

    現在讓我們使用它來測試我們的JMeter腳本。默認情況下,它將在端口8080上運行。如果我們無法使用端口8080,則需要相應地更新HTTP Sampler Port Number字段.

    HTTP Sampler請求應如下所示:

    JMeter

    3.使用偵聽器編寫提取的輸出

    接下來,讓我們使用類型Save Responses to a file的偵聽器將所需的數據提取到文件中:

    JMeter寫監聽器

    使用此偵聽器很方便,但是在提取文件時並沒有太大的靈活性。對於我們的情況,這將生成一個JSON文件,該文件保存到JMeter當前正在運行的位置(儘管可以在“ Filename Prefix字段中配置路徑)。

    PostProcessor編寫提取的輸出

    我們可以將數據提取到文件中的另一種方法是通過創建BeanShell PostProcessorBeanShell是一種非常靈活的腳本處理器,它使我們可以使用Java代碼編寫腳本,也可以使用JMeter提供的一些內置變量

    BeanShell可以用於各種不同的用例。在這種情況下,讓我們創建一個BeanShell後處理器,並添加一個腳本來幫助我們將一些數據提取到文件中:

    JMeter

    現在,將以下腳本添加到“ Script部分:

    FileWriter fWriter = new FileWriter("/<path>/result.txt", true);
    
     BufferedWriter buff = new BufferedWriter(fWriter);
    
    
    
     buff.write("data");
    
    
    
     buff.close();
    
     fWriter.close();

    現在,我們有了一個簡單的腳本,該腳本會將字符串data輸出到名為result的文件中。這裡要注意的重要一點是FileWriter構造函數的第二個參數。必須將其設置為true以便我們的BeanShell將追加到文件中而不是覆蓋它。**在JMeter中使用多個線程時,這非常重要。**

    接下來,我們想提取一些對我們的用例更有意義的東西。讓我們利用JMeter提供**[ctx](https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html)**這將使我們能夠訪問由運行HTTP請求的單線程持有的上下文。

    ctx ,讓我們獲取響應代碼,響應標頭和響應正文,並將它們提取到我們的文件中:

    buff.write("Response Code : " + ctx.getPreviousResult().getResponseCode());
    
     buff.write(System.getProperty("line.separator"));
    
     buff.write("Response Headers : " + ctx.getPreviousResult().getResponseHeaders());
    
     buff.write(System.getProperty("line.separator"));
    
     buff.write("Response Body : " + new String(ctx.getPreviousResult().getResponseData()));

    如果我們要收集特定的字段數據並將其寫入文件,則可以使用[**vars**](https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html)變量。這是我們可以在PostProcessors使用的地圖,用於存儲和檢索字符串數據。

    對於這個更複雜的示例,讓我們在文件提取器之前PostProcessor這將搜索來自HTTP請求的JSON響應:

    JMeter

    該提取器將創建一個名為message的變量。剩下要做的就是在文件提取器中引用此變量以將其輸出到我們的文件中:

    buff.write("More complex extraction : " + vars.get("message"));

    注意:我們可以將此方法與其他後處理程序(例如“正則表達式提取器”)結合使用,以更定制的方式收集信息。

    5.結論

    在本教程中,我們介紹瞭如何使用BeanShell後處理器和寫偵聽器將數據從JMeter提取到外部文件。