對 Spring Web Flow 進行負載測試

工程 | Rossen Stoyanchev | 2007年6月22日 | ...

對 Web Flow 應用程式進行負載測試,與對其他 Web 應用程式進行負載測試類似 – 我們將使用負載測試工具來模擬不斷增加的並行用戶端存取,以捕捉重要的效能統計資料。

對於 Web Flow,負載測試將有幾個重要的考量因素

  1. 負載測試必須維護獨立的「Cookie 儲存區域」,以便每個用戶端請求都可以攜帶獨立的 HTTP 會話。
  2. 我們需要一種機制,從初始回應中提取唯一的流程執行金鑰,並使用它來客製化同一流程會話中的後續請求。

Apache JMeter 是一個開源效能測試工具,可以滿足這兩個考量因素。

對於 1),我們在每個執行 Web Flow 功能的測試群組的根目錄中新增一個 HTTP Cookie 管理器元素。 Cookie 管理器確保每個模擬的客戶端請求都可以擁有自己的 Cookie,而與其他客戶端請求無關,從而允許 servlet 容器透過 jsessionid Cookie 追蹤獨立的 HTTP 會話。

對於 2),我們在啟動流程的 HTTP 請求元素之後立即新增一個正規表示式提取器。提取器的目的是解析 HTTP 回應,使用我們提供的正規表示式尋找一些文字,並使該文字可用作後續 HTTP 請求元素使用的變數。以下是一個正規表示式提取器配置範例

參考名稱:flowExecutionKey 正規表示式:name="_flowExecutionKey" value="(.*)" 樣板:$1$ 比對編號:0

使用上述配置,我們現在可以在屬於同一個流程會話的後續 HTTP 請求元素中嵌入變數 ${flowExecutionKey}。

現在讓我們使用它來對 Web Flow 進行負載測試。為了適當地執行具有代表性的 Web Flow 功能,我建立了一個範例 Web Flow 應用程式,以模仿一個 6 步驟的購物車流程,收集用戶輸入的運送地址、運送選項、信用卡、帳單地址、訂單確認以及最後的訂單摘要。此流程中的個別步驟包括資料繫結和驗證、檢視狀態、動作狀態、決策狀態和子流程狀態 – 這些都是我們期望在典型的 Web Flow 應用程式中找到的。但是,該應用程式使用存根而不是實際的資料庫存取程式碼,以避免將這些數字包含在整體統計資料中。我們希望在此測試中僅關注 Web Flow。

在建置應用程式並建立 JMeter 指令碼後,我新增了一個彙總報告元素,以記錄不同負載層級測試的效能統計資料。

使用我的 Lenovo T60 雙核心筆記型電腦(執行 Ubuntu 和 Apache Tomcat 5.5 版,配置為最多 150 個並行連線)作為 servlet 容器,我觀察到以下結果

使用者 90% 最大 請求/秒 KB/秒 總請求數
20 102 596 351 380 18000
60 372 5942 338 366 18000
80 463 10287 336 364 18000
100 550 11144 315 342 18000
150 687 20691 306 332 18000

實際的負載測試應在真實的硬體上進行,並基於真實的使用案例。沒有任何東西可以替代它。但是,我們可以從上面的數字中得出某些結論。

上述數字表明,即使並行使用者數量顯著增加,在執行核心 Web Flow 功能時,輸送量仍保持穩定。 90% 用戶的回應時間保持在 1 秒以內。隨著負載的增加,最差的回應時間會增加,但考慮到用於測試的硬體不足,這並不奇怪。

使用上述技術,您可以對自己的 Web Flow 應用程式進行負載測試。

jmeter-snapshot.JPG

swf-shoppingcart-regexp.txt

取得 Spring 電子報

隨時關注 Spring 電子報

訂閱

取得領先

VMware 提供培訓和認證,以加速您的進展。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

了解更多

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

查看所有