在敏捷世界中使用 Rational 工具執行自動化的功能測試
在本教程中,將學習如何自動化一個大型、多組件系統的功能測試和系統回歸測試。本教程還將了解一些為了向測試工具增添自動化功能而創建的自定義工件。
企業需要隨著瞬息萬變的世界而進行調整,他們的 IT 系統也必須針對不斷變化的需求和技術進行調整。大型 IT 系統可能有許多組件,每個部件可能由不同的團隊開發。這些團隊擁有不斷變化的需求、時間表和優先級。
在任何不斷演變的大型系統中,新功能和對現有功能的更改都會導致難以確保現有功能仍然有效且保持不受影響。一種標準做法是在部署新版本時對已有功能執行回歸測試。敏捷開發要求代碼也必須通過每輪沖刺結束時的回歸測試,即使沒有計劃性的正式生產發布。在某些情況下,功能測試的早期階段通過了測試條件,但在測試階段快結束重新運行它們的時候可能出現失敗。出現這種情況的一些原因是,對相關功能的錯誤修復引入了不必要的問題,或者在開發周期的后期發布了影響現有功能的新功能。
回歸測試非常重要。您執行回歸測試是為了:
- 確認來自以前版本的現有功能的有效性。
- 確保當前版本中引入的所有功能是完整的。
在您擁有累積了數百個測試案例的復雜系統時,每次都手動重新運行舊測試案例不但不切實際,也不經濟。另外,隨著測試團隊成員不斷變化,新團隊成員可能無法充分理解給定測試案例的深入細節,每次運行測試時需要手動驗證結果或分析問題。
系統描述
在本教程中,將了解我們為 IBM 數字營銷部門創建和測試的一個系統。它是一個針對聯系人和企業的記錄系統。如圖 1 所示,IBM InfoSphere? Master Data Management (MDM) 的一個實例存儲數據。數據通過 IBM 信息總線(企業服務總線)或 IBM InfoSphere DataStage? ETL 作業傳入系統中,這些作業直接從源系統數據庫讀取數據或處理平面文件。
功能和系統測試在 IBM Rational? Performance Tester 中運行。Rational Quality Manager 將會編排 Rational Performance Tester 測試。自動化的功能和系統回歸測試可以驗證所有現有組件和功能都能工作正常,而且它們能夠協同工作。自動化回歸測試,可以讓測試團隊將精力集中在新功能和組件的測試上。
IBM 信息總線
IBM 信息總線(也稱為企業服務總線或 ESB)是一個直通式中間件應用程序,提供了一種可靠的集成機制,在不同來源和目標系統間路由和轉換消息協議和格式。ESB 提供了實時和批量數據傳輸模式,能在接口間保持數據完整性。
- 源系統發送由系統處理的 MQ 請求。響應返回給源系統。請求/響應消息格式和消息傳輸協議對所有用戶都相同。
- ESB 為 InfoSphere MDM 提供轉換和集成服務。ESB 將傳入的通用代碼值(比如國家名稱和語言)轉換為 MDM 需要的代碼,然后將 MDM 響應代碼轉換為通用代碼值。轉換過程中還會插入特定于 MDM 的元素,并針對某種模式來驗證結果消息。
InfoSphere DataStage
InfoSphere DataStage 從異構的來源提取數據,獲取數據并轉換它們,并采用可被 MDM 使用的格式向 MDM 提供 XML 數據。IBM InfoSphere DataStage 使用一個 IBM PureData?(Netezza 設備)將數據臨時存儲在一個暫存區中,以便執行 ETL 處理和創建 XML。
DataStage 執行系統中的多個不同功能:
- 數據清理 — 系統中的一些數據直接來自任意格式的最終用戶輸入,可能很荒謬 (name = ‘Mickey Mouse')、粗俗或晦澀難懂 (name = ‘Mike123@#$')。DataStage 中實現的一個清理服務運行一系列清理規則來識別不良數據。清理服務可在系統消息流中的多個位置實現,以確保所有數據都得到清理。
- 源系統提取 — 不是所有源數據都通過 MQ 請求進入系統。DataStage 會直接檢查源系統數據庫中的更改,生成 XML 并通過 MQ 或平面文件將該 XML 發送到 MDM。
- 平面文件處理 — 一些源系統通過平面文件發送數據。DataStage 會處理這些文件,生成 XML,并將該 XML 放入 MQ 隊列,XML 會在隊列中被轉換并發送給 MDM 供處理。
InfoSphere MDM
InfoSphere MDM 是該項目解決方案的核心組件。MDM 從多個來源接收新聯系人記錄,并對現有聯系人中的記錄進行更新,然后使用具有特定于項目的擴展的 MDM 將數據持久保存到 DB2? 數據庫中。概率匹配引擎執行可疑副本處理,以便將一個聯系人的多個副本(或許來自不同來源)折疊到一條金級記錄中。MDM 擁有以下子組件:
- MDM Server Advanced Edition — MDM Server Advanced Edition 組件充當一個主聯系人數據存儲,提供并管理要用于企業中不同應用程序的聯系人記錄的可用副本。它獲取經過 DataStage 轉換和 QualityStage? 標準化的源數據,向其他需要直接與 MDM 服務器交互的應用程序提供數據服務。MDM Server 提供行業標準的接口,包括基于 Java 的遠程方法調用 (RMI)、JMS 消息服務和基于 SOAP 的 Web 服務。這些接口為各種應用程序在未來直接與 MDM Server 交互提供了基礎。MDM Server 使用概率匹配引擎 (PME)。
- MDM 批處理器 — MDM Server 的一個用于初始負載和增量負載的組件。存在的一些 DataStage 作業專門用于以平面文件格式準備批量 MDM 請求,已通過批處理器處理。
- MDM 數據庫 — 用于存儲數據的 MDM 服務器的 DB2 數據庫。
- MDM DSUI — 這是用于例行數據維護的數據管理用戶界面。
回歸測試自動化
IBM Rational 測試工具套件幫助您解決與功能和系統回歸測試相關的挑戰。這些工具還有利于減少回歸測試階段的總執行時間。減少的這些時間使測試團隊能夠根據需要重新運行回歸測試案例,而不會影響測試周期中投入的成本或時間。
本節將介紹一些用于為多個版本構建穩健且高效的功能和系統回歸測試桶的技術。還將探索我們團隊在嘗試全面自動化這些測試案例時面臨的一些挑戰,以及我們如何解決這些問題。
測試環境包含以下工具:
- Rational Service Tester
- Rational Performance Tester
- Rational Quality Manager
- Rational Team Concert?
Rational Service Tester 和 Rational Performance Tester
Rational Service Tester 允許通過 HTTP、JMS 和 MQ 協議對后端服務執行自動化測試。它通常用于應用程序的功能驗證測試 (FVT)。它還包含對服務執行負載測試和執行計劃測試的功能。Rational Performance Tester 提供了性能和負載測試功能,而且借助對這些功能的自然擴展,提供了與 Rational Service Tester 類似的自動化服務測試支持。
盡管 Rational Service Tester 和 Rational Performance Tester 有不同的功能,但它們都是基于 Eclipse 的工具。出于我們的目的,二者可以交替使用,所以本教程中將混合稱呼它們。Rational Service Tester 和 Rational Performance Tester 允許向被測試系統發送一系列消息,并驗證響應。一些測試只能在 Rational Service Tester 或 Rational Performance Tester 上運行,但這些區別不屬于我們的介紹范疇。
Rational Quality Manager
Rational Quality Manager 基于 Open Source Jazz? 項目,是一個基于 Web 的協作式質量管理解決方案。它全面支持測試規劃、手動測試、報告、狀態跟蹤,還支持不同職位上的測試團隊成員,包括測試架構師、測試主管、測試人員等。這是通過它與其他 IBM Rational 測試工具(比如 Rational Service Tester 和 Rational Performance Tester)交互的能力來實現的。
Rational Team Concert
Rational Team Concert 是一個變更配置管理工具,能夠執行迭代規劃、流程定義、變更管理、缺陷跟蹤、來源控制、報告等。該項目中的所有 Rational Service Tester 和 Rational Performance Tester 測試案例都使用 Rational Team Concert 進行維護。
創建回歸測試桶
在 Rational Quality Manager 中,可以為測試創建兩種主要的實體。第一種是單個測試案例的定義,最終指向 Rational Service Tester 或 Rational Performance Tester 中定義的可執行的測試案例。在 Rational Quality Manager 中執行此測試案例會觸發運行 Rational Service Tester 的遠程機器上的 Rational Service Tester 中定義的鏈接測試案例。第二種實體是一個測試套件的定義,測試套件是 Rational Quality Manager 中已定義的測試案例的松散耦合集合。
回歸測試桶被定義為 Rational Quality Manager 測試套件,在該套件中,可按功能將一組已有的 Rational Quality Manager 測試案例松散耦合在一起并執行。組成一個測試套件的測試案例沒有排他性,這意味著基于某個給定的 Rational Quality Manager 測試案例涵蓋的功能范圍和它在給定回歸測試桶中的相關性,它可以包含在多個測試套件中。下面展示了此概念。
我們創建了不同的 Rational Quality Manager 測試套件來測試 MDM 中的重要功能部分。還有一些針對 MQ 和 ETL 功能的不同測試套件。如果某個特定的版本僅包含 MDM 功能或一項 ETL 更改,可以選擇運行一個測試套件子集。
Rational Quality Manager — Rational Service Tester 連接
定義一個測試套件后,Rational Quality Manager 服務器可在任何安裝了帶 Rational Quality Manager 適配器的 Rational Service Tester 的機器上運行該測試套件。您可以在多個不同的機器上啟用一個適配器。Rational Quality Manager 拆分測試套件中的測試案例,并在所有適配器上并行運行它們。在每臺機器上,會從 Rational Team Concert 提取測試案例的最新版本。在我們的設置中,一個專門的 Linux 云映像運行用于回歸測試 Rational Performance Tester。有時會使用各個測試人員筆記本電腦上的適配器,以便并行運行測試案例。因為一臺機器上僅能運行一個 Rational Performance Tester 實例,所以如果使用測試人員筆記本電腦執行回歸測試,那么在該回歸測試運行期間,測試人員無法運行其他 Rational Performance Tester 測試案例。
此過程包含兩步。首先,在 Rational Service Tester 內配置一個 Rational Quality Manager 適配器。在 Rational Service Tester 中,選擇 Windows > Preference > Quality Manager Adapter 。
如果來自多個 Rational Service Tester 安裝的適配器被附加到您的項目區域,請確保適配器名稱在環境中是唯一的。在 Rational Quality Manager 中運行一個測試案例時,適配器名稱有助于確保測試案例在想要的 Rational Service Tester 實例上執行。
可通過兩種方式啟動適配器。要從 Rational Performance Tester 啟動適配器,請打開 Rational Quality Manager 適配器視圖( Window > Show View > Other ,然后搜索 Quality Manager)并單擊 Connect to Rational Quality Manager 圖標。在 Rational Quality Manager 運行測試案例時,此視圖中將顯示日志消息。Rational Performance Tester 也會在測試案例運行時打開視圖。
運行適配器的第二種方式是無頭模式,其中 Rational Performance Tester GUI 未運行。適配器在后臺靜默地運行。要啟動適配器,請在該適配器所在的目錄中(SDPShared 目錄下)打開一個 DOS 窗口(或 Linux 終端)。在我們的測試機器上,適配器位于 C:\RationalPerformanceTester85\RationalPerformanceTester-RationalService Tester_RationalQualityManagerAdapter 目錄中。更新 config\adapter.config 中的配置文件。要啟動或停止適配器,可輸入 cd 轉到 bin 目錄,并使用命令 Rational Quality ManagerAdapter.bat [START | STOP | STATUS] 。
我們擁有觀察證據表明,適配器在無頭模式下的運行效率比在 Rational Performance Tester 或 Rational Service Tester 中運行時要高,尤其是在運行大量測試案例時。我們的理論是,Rational Performance Tester/Rational Service Tester 適配器需要打開更多的窗口,因而需要使用更多的資源,最終會導致適配器掛起。
運行測試套件
要在 Rational Quality Manager 中執行測試套件:
- 打開您想要在 Rational Quality Manager Web 客戶端上運行的測試套件。
- 單擊頁面頂部的 Run Test Suite 圖標(圖 4 中帶圓圈的圖標)。
- 在打開的窗口中,選擇套件中要運行的測試案例或全部案例,選擇一個活動的 Rational Quality Manager 適配器來運行該測試套件。可以選擇對一個 Rational Service Tester 安裝或多個 Rational Service Tester 安裝運行套件中的所有測試案例。
- 您可以計劃 Rational Quality Manager 中的測試套件執行時間。在正常工作時段執行其他測試活動、代碼部署、維護等,在下班時間運行回歸測試案例,這樣做很有幫助。
- 選擇是否允許將之前的測試的執行變量傳遞給后續步驟。也可以選擇在任何一個測試案例發生故障時停止運行測試套件,或者繼續執行整個測試套件。對于典型的測試套件,首選方法是運行所有選定的測試案例是首選,即使某個測試案例失敗。
測試結果和故障排除
在測試套件執行過程中,Rational Quality Manager 會顯示測試套件中各個測試案例的進度。如果有必要,可以在執行中期中斷該過程。在執行結束時,會看到每個測試案例的狀態(Pass 或 Fail)(假設它被配置為運行所有測試案例,即使部分測試案例失敗)。
回歸測試環境配置
現在您已經了解了準備和設置 Rational Quality Manager 測試套件、測試案例、Rational Service Tester 和 Rational Performance Tester 測試案例的步驟,可以繼續對回歸測試環境進行物理配置,如圖 6 所示。要說明的一些細節:
- 一位測試團隊成員連接到公司網絡,并通過 Web 接口訪問 Rational Quality Manager。
- Rational Quality Manager 服務器可在網絡中的任何地方運行。
- 包含 Rational Service Tester 和 Rational Performance Tester 測試案例的 Rational Team Concert 存儲庫可在網絡中的任何地方運行。
- Rational Service Tester 或 Rational Performance 配置了 Rational Quality Manager 適配器來連接到 Rational Quality Manager 服務器實例。
- 運行該系統的應用程序測試服務器在同一個網絡中測試。
自定義 Rational Service Tester 和 Rational Performance Tester
Rational Service Tester 的功能能滿足許多種類的測試需求。但是,沒有任何軟件產品敢聲稱不擴展它就能解決所有問題。我們需要能夠執行以下操作來全面自動化測試:
- 調用 RMI 服務
- 從 JMS 來源讀取消息
- 運行 SQL 命令
幸運的是,Rational Service Tester 提供了一種擴展其現成功能的途徑,以幫助我們解決這些挑戰。盡管這些問題可以使用測試案例中的手動步驟進行解決,但這會阻礙我們實現功能和系統回歸測試工作的全面自動化。
RMI Test Harness
Rational Service Tester 支持使用 HTTP、JMS/WebSphere? MQ 和 Microsoft .NET 協議來調用測試的應用程序。但是,我們的應用程序的 MDM 部署是僅針對 RMI 接口而配置和設置的,盡管 MDM 支持服務和 JMS 接口。此做法基于之前根據系統的需求和為了降低復雜性而制定的架構決策。
為了使 Rational Service Tester 能夠測試基于 RMI 的應用程序,我們開發了一個 RMI Test Harness servlet Web 應用程序。該應用程序充當著一個直通應用程序,在 Rational Service Tester 與 MDM 之間交換請求和響應消息。每個 Rational Service Tester/Rational Performance Tester 測試步驟都在 Transport 選項卡上有一個參數,表示指向接收測試服務器的 HTTP URL。為了使用 RMI Test Harness,Rational Service Tester 測試步驟使用了 Transport 選項卡中的測試工具的 URL。RMI Test Harness 處理 JNDI 查找,設置與 MDM 的 RMI 連接,并添加 MDM 需要的安全性,然后才將 XML 請求發送到 MDM。RMI Test Harness 通過 MDM 應用程序以 WAR 文件的形式部署在 WAS 服務器上。
JMS 通知工具
我們有一種獨特的情形,其中的一個被測試的服務有一個用于發送請求和響應的 RMI 接口,但它也在某些情況下生成 JMS 通知。作為自動化測試案例的一部分,我們需要讀取并驗證這些 JMS 消息。Rational Service Tester 支持使用 JMS 發送請求/響應,但是沒有封裝讀取 JMS 消息的功能。為了測試此功能,開發了一個基于 servlet 的 Web 應用程序來讀取和解析 IBM WebSphere MQ 消息。我們使用了 Rational Service Tester 的內置功能來對消息本身執行自動化驗證,然后通過 MDM 將 JMS Test Harness 以 WAR 文件形式部署在 WAS 服務器上。
要在 Rational Service Tester 中測試 JMS 消息,需要使用 Transport 選項卡中輸入的 JMS Test Harness URL 來執行一個自定義的 Rational Service Tester 步驟。向 Rational Service Tester 步驟提供一個消息標識符在隊列中搜索特定消息。JMS Test Harness 與相應的 MQ 隊列建立連接,并在隊列中的消息的 XML 有效負載中搜索該消息標識符。如果隊列中的一條消息包含該標識符,則會將它返回給 Rational Service Tester 測試進行驗證。該工具可計算包含該消息標識符的隊列中的消息數量(可選)。
SQL 調用
測試案例中的一個步驟是創建一個需要測試的數據條件。這會創建一種需要修改應用程序數據庫的情形。該過程是使用 Rational Service Tester 的 Java 擴展來實現的。
該 Java 擴展程序建立一條從運行 Rational Service Tester 的機器到 DB2 的連接。它將 SQL 語句發送到 DB2 來運行,然后抓取結果集。測試案例需要提供 SQL 語句并調用這個 Java 擴展程序。
結束語
本教程演示了使用 Rational 套件來自動化動態敏捷世界中的復雜業務應用程序的回歸和系統測試的方法。通過集成 Rational 產品并擴展它包含的功能,能夠靈活地自動化現有功能的 SVT 測試,使您能集中精力創建新功能。
來自:http://www.ibm.com/developerworks/cn/devops/d-auto-func-testing-agile-trs/index.html?ca=drs-