如何使用 Gatling 顯示完整的 HTTP 響應主體
一、概述
Gatling 是一種流行的負載測試工具,用 Scala 編寫,可以幫助我們在本地和雲機器上創建高性能、壓力和負載測試。此外,它還廣泛用於測試 HTTP 服務器。默認情況下,Gatling 專注於捕獲和分析響應時間、錯誤率等性能指標,而不會顯示完整的 HTTP 響應主體。
在本教程中,我們將學習如何使用 Gatling 顯示完整的 HTTP 響應主體。這對於理解和調試負載測試期間的服務器響應很有用。
2.項目設置
在本教程中,我們將使用 Gatling Maven 插件來運行 Gatling 腳本。為此,我們需要將插件添加到pom.xml
中:
<plugin>
<groupId>io.gatling</groupId>
<artifactId>gatling-maven-plugin</artifactId>
<version>4.3.0</version>
<configuration>
<includes>
<include>org.baeldung.gatling.http.FetchSinglePostSimulation</include>
<include>org.baeldung.gatling.http.FetchSinglePostSimulationLog</include>
</includes>
<runMultipleSimulations>true</runMultipleSimulations>
</configuration>
</plugin>
我們將插件配置為運行多個模擬。此外,我們還需要Gatling 應用程序和Gatling highcharts依賴項:
<dependency>
<groupId>io.gatling</groupId>
<artifactId>gatling-app</artifactId>
<version>3.9.5</version>
</dependency>
我們的目標是在控制台和日誌文件中顯示從示例 API 端點https://jsonplaceholder.typicode.com/posts/1
獲得的 HTTP 響應主體。
3. 使用 Gatling 顯示完整的 HTTP 響應主體
讓我們編寫一個簡單的 Gatling 模擬類,它向https://jsonplaceholder.typicode.com/posts/1
發出 HTTP 請求:
public class FetchSinglePostSimulation extends Simulation {
public FetchSinglePostSimulation() {
HttpProtocolBuilder httpProtocolBuilder = http.baseUrl("https://jsonplaceholder.typicode.com");
ScenarioBuilder scn = scenario("Display Full HTTP Response Body")
.exec(http("GET Request")
.get("/posts/1")
.check(status().is(200))
.check(bodyString().saveAs("responseBody")))
.exec(session -> {
System.out.println("Response Body:");
System.out.println(session.getString("responseBody"));
return session;
});
setUp(scn.injectOpen(atOnceUsers(1))).protocols(httpProtocolBuilder);
}
}
在上面的代碼中,我們定義了一個名為FetchSinglePostSimulation,
它擴展了 Gatling 庫中的Simulation
類。
接下來,我們創建一個HttpProtocolBuilder
對象並將 HTTP 請求的基本 URL 設置為https://jsonplaceholder.typicode.com/
。
然後,我們定義一個ScenarioBuilder
對象。該對像有助於定義一系列模擬場景。首先,我們使用exec()
方法啟動 HTTP 請求。接下來,我們指定該請求是對/posts/1
端點的 GET 請求。
此外,我們檢查響應的 HTTP 狀態代碼是否為200
。最後,我們使用check()
方法將響應主體作為字符串保存在會話變量responseBody
中。
此外,我們啟動一個將Session
對像作為輸入的自定義操作。然後,我們將responseBody
的值打印到控制台。最後,我們返回會話對象。
此外,模擬是通過一次將一個用戶注入場景並使用我們之前創建的httpProtocolBuilder
對象配置 HTTP 協議來設置的。
要運行模擬,讓我們打開終端並切換到項目的根目錄。然後,讓我們運行 Gatling test
命令:
mvn gatling:test
該命令生成模擬報告,並將響應正文輸出到控制台。這是測試的響應主體:
上圖顯示了模擬報告的響應。
讓我們更進一步,將響應記錄在文件中而不是將其輸出到控制台。首先,讓我們編寫一個方法來處理文件創建:
void writeFile(String fileName, String content) throws IOException {
try(BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true))){
writer.write(content);
writer.newLine();
}
}
在上面的方法中,我們創建了BufferedWriter
和FileWriter
的新實例,以將 HTTP 響應主體寫入文本文件。
最後,讓我們修改自定義操作,將響應主體寫入文件,而不是輸出到控制台:
public class FetchSinglePostSimulationLog extends Simulation {
public FetchSinglePostSimulationLog() {
HttpProtocolBuilder httpProtocolBuilder = http.baseUrl("https://jsonplaceholder.typicode.com");
ScenarioBuilder scn = scenario("Display Full HTTP Response Body")
.exec(http("GET Request")
.get("/posts/1")
.check(status().is(200))
.check(bodyString().saveAs("responseBody")))
.exec(session -> {
String responseBody = session.getString("responseBody");
try {
writeFile("response_body.log", responseBody);
} catch (IOException e) {
System.err.println("error writing file");
}
return session;
});
setUp(scn.injectOpen(atOnceUsers(1))).protocols(httpProtocolBuilder);
}
}
我們通過調用writeFile()
方法並添加文件名response_body.log
和 HTTP 響應正文作為參數來修改自定義操作。 writeFile()
方法執行將響應記錄到文件的操作。
4。結論
在本文中,我們學習瞭如何使用 Gatling 在控制台上顯示完整的 HTTP 響應主體。此外,我們還了解瞭如何將響應記錄到文件而不是將其輸出到控制台。
與往常一樣,示例的完整源代碼可在 GitHub 上獲得。