使用JMeter將提取的數據寫入文件
1.概述
在本教程中,讓我們探索兩種從Apache JMeter提取數據並將其寫入外部文件的方法。
2.設置基本的JMeter腳本
現在讓我們開始創建一個基本的JMeter腳本。讓我們Thread Group
(這是創建Thread Group
時的默認設置):
現在,在該Thread Group
,創建一個HTTP Sampler
:
讓我們設置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
請求應如下所示:
3.使用偵聽器編寫提取的輸出
接下來,讓我們使用類型Save Responses to a file
的偵聽器將所需的數據提取到文件中:
使用此偵聽器很方便,但是在提取文件時並沒有太大的靈活性。對於我們的情況,這將生成一個JSON文件,該文件保存到JMeter當前正在運行的位置(儘管可以在“ Filename Prefix
字段中配置路徑)。
PostProcessor
編寫提取的輸出
我們可以將數據提取到文件中的另一種方法是通過創建BeanShell
PostProcessor
。 BeanShell
是一種非常靈活的腳本處理器,它使我們可以使用Java代碼編寫腳本,也可以使用JMeter提供的一些內置變量。
BeanShell
可以用於各種不同的用例。在這種情況下,讓我們創建一個BeanShell
後處理器,並添加一個腳本來幫助我們將一些數據提取到文件中:
現在,將以下腳本添加到“ 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響應:
該提取器將創建一個名為message
的變量。剩下要做的就是在文件提取器中引用此變量以將其輸出到我們的文件中:
buff.write("More complex extraction : " + vars.get("message"));
注意:我們可以將此方法與其他後處理程序(例如“正則表達式提取器”)結合使用,以更定制的方式收集信息。
5.結論
在本教程中,我們介紹瞭如何使用BeanShell後處理器和寫偵聽器將數據從JMeter提取到外部文件。