天天看點

【轉】利用 Apache JMeter 測試 WebSphere 性能

如果您預算緊張并且時間緊迫 —— 或者即使您不是這樣 —— 那麼,您可能希望考慮使用 JMeter 來對 Web 和其他應用程式進行壓力測試。IBM 的 Greg Herringer 較長的描述他使用這個純 Java 應用程式來測試 WebSphere 中間件解決方案的經曆。

        本文描述如何部署 Apache 開放源代碼工具 JMeter,以基于 IBM WebSphere Application Server 和 WebSphere Branch Transformation Toolkit(BTT)來測試中間件解決方案的響應性。通過設計性能測試,可以模拟變化的并發使用者負載,這些使用者負載使用多種互動式金融交換(Interactive Financial eXchange,IFX)請求消息。如果您項目的性能測試預算有限,并且您的解決方案使用 XML 消息,那麼在本文結尾所得出的經驗可以幫助您計劃自己的性能測試政策。

針對高可見性項目的性能測試挑戰

        一個金融機構的近期項目需要傳遞一個中間件基礎設施,用于支援增長的應用程式清單,這些應用程式需要通路企業的核心金融系統。該體系結構的方向是要求所有的核心金融系統請求都經由該中間件解決方案,該方案使用基于 XML 的 IFX 消息标準。圖 1 顯示了與第一個應用程式有關的中間件基礎設施(以粗體顯示),以及未來的應用程式和後端系統(以灰色顯示)。

圖 1. 待測試的解決方案

【轉】利用 Apache JMeter 測試 WebSphere 性能

        要使得該高可見性項目獲得認可,必須示範在各種負載之下的最佳性能。這對于響應時間敏感的客戶來說尤為重要,例如聯絡中心的 CRM 應用程式。另一個需要考慮的問題是,當新的應用程式出現在中間件的“前面”和“後面”時(圖 1 中顯示了一個位于中間件“後面”的企業和消費者信用卡服務系統的未來實作),需要重用已選擇的性能測試方法。

無使用者接口

        指定使用中間件基礎設施的第一個應用程式是存款處理應用程式,它預定在中間件項目完成之後實作。這意味着測試團隊不得不在沒有使用者接口可以準備和送出中間件請求的情況下模拟生産負載。

有限預算

        金融機構并沒有合适的工具集來支援中間件性能測試。是以,這裡的挑戰是确信地報告已觀察到的中間件性能特性,同時将用于工具和準備工作的預算保持最小。

使用 JMeter 救急

        通過研究各種可用的開放源代碼測試工具,發現 Apache JMeter 可以支援中間件性能測試需求。 JMeter 提供一個基于 GUI 的應用程式,用于設計和執行多種可重用的測試計劃。JMeter 還支援以 XML 格式捕捉測試結果,用于測試後的統計分析。這兩個特性幫助測試團隊開發和文檔化可重複的測試結果,進而滿足“高可見性”的挑戰。

        許多開放源代碼的測試工具是設計用于測試 Web 站點的,并期望測試能夠模拟使用者與一個或者多個頁面或表單的互動。因為在測試中間件解決方案時,應用程式的 Web 接口并不可用,是以已選擇的工具必須在沒有浏覽器互動的情況下支援基于 XML 的消息。JMeter 的 SOAP/XML 請求元件滿足該要求。

        最後,由于 JMeter 是 Apache 軟體基金會的産品,這個事實意味着該項目并不要求支付商業測試工具的許可證費用,進而滿足“有限預算”的條件。

設計測試腳本

        性能測試的目标是,在各種并發負載條件下送出随機選擇的、預先定義的、IFX 編碼的請求消息,并記錄接收到 IFX 編碼的響應的耗用時間(elapsed time)。下面五個 JMeter 測試計劃元件用于準備性能測試腳本。

測試計劃

        這是用于測試的主要元件。在這裡,測試名是根據項目的命名約定指定的。同時,選擇 FunctionalTest Mode,以便在由 View Results Tree 管理的測試結果中捕獲完整的 IFX 編碼的響應。

圖 2. JMeter 測試計劃

【轉】利用 Apache JMeter 測試 WebSphere 性能

HTTP Header Manager

        該元件用于指定中間件所需要的 HTTP 頭的值。發送到中間件的每個 IFX 編碼的請求都将包括這些 HTTP 頭的值。

圖 3. JMeter HTTP Header Manager

【轉】利用 Apache JMeter 測試 WebSphere 性能

Thread Group

        該元件按照測試計劃的要求進行重複,以模拟一個特定數目的并發使用者。例如,模拟 5 個并發使用者,需要指定 5 個 Thread Group 。

圖 4. JMeter Thread Group

【轉】利用 Apache JMeter 測試 WebSphere 性能

注意, Thread Group 元件具有一個标簽為 Number of Threads 的域,用于控制與一個 Thread Group 相關聯的線程數目。由于每個 Thread Group 具有一個惟一的随機選擇的 IFX 編碼的請求集合(請參閱下面的 SOAP/XML-RPC Request),是以決定将每個 Thread Group 限制為一個線程。如果對于一個或者多個 Thread Group 指定多個線程,那麼相同的消息集合将會被發送多次,這将違背随機選取準則的目标。

SOAP/XML-RPC Request

        針對每個 Thread Group 所發送的期望數目的 IFX 編碼請求,重複該元件。實際的 IFX 編碼的請求是在該元件中指定的。

圖 5. JMeter SOAP/XML-RPC Request

【轉】利用 Apache JMeter 測試 WebSphere 性能

View Results Tree

        該元件服務于兩個目的。當測試執行時,該使用者接口顯示消息被發送和接收的測試過程。而且,該元件将測試結果寫入到一個檔案,用于測試後的分析。

圖 6. JMeter View Results Tree

【轉】利用 Apache JMeter 測試 WebSphere 性能

        JMeter 測試計劃被設計用于模拟多種并發使用者負載,從單一使用者到最大為 80 個并發使用者。對于所有的測試計劃,上面所描述的五個元件以一緻的方式進行部署,進而簡化了性能測試的執行。

建構測試腳本

        一旦已經确定所需的 JMeter 元件并且已經構思好一個通用的測試計劃設計,就必須建構測試腳本了。幸運的是,System Integration Test (請參閱 參考資料)中有超過 300 個 IFX 編碼的模型請求消息和相關的測試資料可以重用。相應的挑戰是準備測試腳本可以發送多達 8000 個(對于 80 個線程,每個線程 100 個)随機選擇的請求消息。這些消息是随機選擇的,進而更好地接近生産條件的穩定狀态,生産條件下沒有一個請求類型可能會比其他類型送出得更多。單獨使用 JMeter 使用者接口,将意味着手工剪切和粘貼消息到 8000 個 SOAP/XML-RPC Request 中。為了使得該任務進一步複雜化,根據金融機構的 IFX 規範,每個請求還要求惟一的 RQUID 。

自動建立測試腳本

        正如已經提到的,該項目的性能測試方法将針對未來的中間件版本進行重用。是以,測試團隊投入一些精力準備一個 Java 應用程式,用于根據指定的參數輸出 JMeter XML 編碼的測試腳本。該 Java 應用程式稱為 Scripter,它可以準備一個性能測試腳本,該腳本具有指定數目的線程并且每個線程具有指定數目的 IFX 編碼的消息,由應用程式随機選擇。IFX 編碼的消息來源于一個消息集合,該集合在 Scripter 的屬性檔案所指定的目錄中提供。

        從本文 參考資料 小節中的連結,您可以下載下傳 Scripter Java 應用程式的源代碼和用法說明。

執行測試

        JMeter 安裝在一個 雙通道的 IBM eServer™ xSeries® 360 伺服器上,該伺服器具有 2 GB RAM 并且運作 Windows® 2000。圖 7 顯示測試配置。

圖 7. JMeter 性能測試配置

【轉】利用 Apache JMeter 測試 WebSphere 性能

        當測試執行時,IFX 編碼的響應被記錄,進而可以分析包含在中間件響應中的捕獲到的 MQ Time 和 Total Time 度量。還可以分析 JMeter 觀察到的 JMeter Time,盡管該數字還包括在中間件和 JMeter 之間的網絡延遲。

        測試團隊執行三個性能測試周期,在前兩個周期之後通過修改和配置調整進而改進應用程式的性能。

分析結果

        測試團隊使用 Microsoft® Excel 電子資料表來導入測試結果,并且針對上面描述的耗用時間度量執行統計運算。然後,結果被圖形化,進而顯示該應用程式對于大多數測試條件提供的次秒級(sub-second)響應性。

獲得的經驗

        總的說來,JMeter 作為該項目的性能測試工具是一個極好的選擇。下面所獲得的經驗提供另外的細節。

JMeter 滿足我們的需要

        JMeter 易于安裝并且具有中等的認識複雜度(請參閱下一條經驗)。所選擇的 JMeter 元件針對所有的性能測試腳本提供了一個公共的結構。測試結果的 XML 編碼輸出對于測試後分析是一個友善的特性,因為該選項捕獲了包含在 IFX 編碼的應答消息中的性能統計。

JMeter 使用者應該具有技術能力

        為了正确地準備性能測試腳本,腳本開發人員必須很好地了解使用 HTTP 和 XML 協定的分布式應用程式。商業使用者可能發現難以使用各種 JMeter 元件的技術規範。

建立大的腳本可能需要額外的自動化處理

        我們的性能測試特性(随機的消息選取,并發性,以及包含在每個 IFX 編碼的請求中的惟一值)要求一個自動化的方法産生測試腳本。幸運的是,測試團隊具有足夠的 Java 技術能力使得該任務自動化。對于具有類似需要的人,本文的末尾提供了該應用程式。

        如果時間(和能力!)允許的話,團隊還可以開發一個新的符合該項目需要的 JMeter 元件,并且将該元件送出給 Apache 組織。

定制的性能度量可以幫助确定問題

        JMeter 應用程式可以測量在傳輸 IFX 編碼的請求和接收 IFX 編碼的應答之間的耗用時間。然而,該度量并不提供有關該分布式中間件解決方案所存在的潛在瓶頸的内部資訊。中間件開發團隊提供另外的性能度量,将用于主機通信、消息分析的耗用時間與用于事務處理的中間件耗用時間隔離開來。這些度量作為 XML 注解包含在 IFX 編碼的應答中。