Spring Web Flow 的負載測試

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

Web Flow 應用程式的負載測試與其他 Web 應用程式的負載測試類似——我們將使用負載測試工具來模擬不斷增加的併發客戶端訪問,以便捕獲重要的效能統計資訊。

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

  1. 負載測試必須維護獨立的“cookie 儲存區域”,以便每個客戶端請求都可以攜帶獨立的 HTTP 會話。
  2. 我們需要一種機制,從初始響應中提取唯一的流執行鍵,並使用它來自定義同一流會話中的後續請求。

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

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

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

引用名稱:flowExecutionKey 正則表示式:name="_flowExecutionKey" value="(.*)" 模板:$1$ 匹配編號:0

透過上述配置,我們現在可以將變數 ${flowExecutionKey} 嵌入到作為同一流會話一部分的後續 HTTP 請求元素中。

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

在構建應用程式並建立 JMeter 指令碼後,我添加了一個聚合報告元素來記錄不同負載級別的測試的效能統計資訊。

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

使用者 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% 的使用者的響應時間仍然小於一秒。 最差的響應時間隨著負載的增加而增加,但這並不奇怪,因為用於測試的硬體不足。

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

jmeter-snapshot.JPG

swf-shoppingcart-regexp.txt

獲取 Spring 新聞資訊

與 Spring 新聞資訊保持聯絡

訂閱

取得領先

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

瞭解更多

獲取支援

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

瞭解更多

即將舉行的活動

檢視 Spring 社群中所有即將舉行的活動。

檢視全部