除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

CloudSpace發表於2010-05-14

轉自 http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1005_yelin_widtest/

除錯 JEE 企業級應用的各種工具

當今 JEE 企業級應用開發的發展快速。需要對開發出來的企業級應用進行除錯, 這種需求促生出各種新興除錯工具。使用者需要根據除錯的模組的自身特性,選擇合適的工具,達到預期的效果。

在介紹各種小工具之前,先回憶一下 JEE 體系結構中包括的四個容器:Web 容器,EJB 容器,Applet 容器和 Application Client 容器。JEE 企業級應用所有的實現都執行其中。

相應的測試工具也就主要針對,1)普通執行於客戶端的 Java 程式碼, 2)GUI 介面程式碼除錯 3) 資料庫操作程式碼除錯, 4)伺服器上的 Servlet/JSP/EJB 程式碼除錯

除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

普通 Java 程式碼除錯

普通的執行於客戶端的 Java 程式碼的除錯可以選擇 JUnit。

JUnit 是最基本的,對 Java 程式進行白盒測試的工具。JUnit4 以前的版本,所有測試用例必須繼承 TestCase 類;而在 JUnit4 以後,利用了 JDK5 的 annotation 機制,只要在方法體前面使用 @test 表明該方法是測試方法。這使得測試程式碼的編寫更加簡單。

JUnit 和 Ant 相結合,整合到開發的構建過程中。先根據軟體功能編寫測試用例,然後將測試用例的執行整合到 Ant 構建檔案中。這樣 Ant 在構建企業級應用的時候同時自動執行測試用例並生成測試報告。

專案地址 http://www.junit.org

GUI 介面程式碼

Web 介面是 JEE 企業級應用的門戶,對介面程式的除錯可以採用 FireBug。

Firebug 是 Firefox 下的一個外掛 , 能夠除錯所有網站語言 , 如 HTML,CSS, JavaScript。在各種瀏覽器下都能使用 (IE,Firefox,Opera, Safari)。

專案地址 http://getfirebug.com/releases/

大量圖形使用者介面的測試,可以使用 RFT(Rational Functional Tester)

RFT 是 IBM 的自動化整合測試工具,它能捕獲編輯圖形介面元素,錄製定製回放測試場景,生成驗證點。它的功能當然遠不止於此。不在本文討論範圍之內。

專案地址 http://download.boulder.ibm.com/ibmdl/pub/software/rationalsdp/rft/61/

資料庫操作程式碼除錯

資料庫是 JEE 企業級應用中不可或缺的一部分,所以對資料庫操作的程式碼除錯也很重要。資料庫操作程式碼的測試,可以選擇 DbUnit。

DbUnit 是針對資料庫操作的單元測試開源框架,是對 JUnit 的一個擴充套件。它主要是幫助開發人員將資料庫保持在一個穩定的狀態,確保測試用例的正確執行。測試用例都繼續 DbUnit 提供的 DatabaseTestCase 類。

 Public class CommonDB extends DatabaseTestCase{ 
 // 獲取資料庫連線
 Protected IDatabaseConnection getConnection(){} 
 // 測試前設定資料庫狀態
 Protected DatabaseOperation getSetUpOperation(){} 
 // 測試後設定資料庫狀態
 Protected DatabaseOperation getTearDownOperation(){} 
 } 

專案地址 http://dbunit.sourceforge.net

伺服器上的 Servlet/JSP/EJB 程式碼除錯

伺服器內的元件(包括 Servlet, JSP, EJB)的測試。一般有兩種策略。一種是 in-Containner,直接在伺服器容器內進行測試,另外一種是 mock object,模擬物件測試。

如果需要 in-Containner,可以使用 Cactus。

Cactus 也是對 JUnit 的擴充套件。專門針對伺服器內不同元件容器,分別提供了三種型別用例 ServletTestCase, JspTestCase 和 FilterTestCase。 Cactus 的指令碼可以直接執行在伺服器上。

專案地址 http://jakarta.apache.org/cactus

如果只需要模擬物件,可以選擇 EasyMock, 它提供對介面和類的模擬。

專案地址 http://www.easymock.org

其他

如果 JEE 企業級應用是基於 Struts 框架的,那麼可以使用 StrutsTestSuite 進行測試。StrutsTestSuite 顧名思義,提供了豐富的基於 Struts 框架的測試類。

如果是 Client/Server 框架的 JEE 企業級應用的系統測試,可以使用 JMeter。

JMeter 是純 Java 桌面應用。功能比較強大,還能測試基於靜態和動態資源應用的效能。

專案地址 http://prdownloads.sourceforge.net/JMeter

上面介紹的各種工具可以相互結合著使用,達到各種需要的效果。

WID 整合除錯客戶端 TestClient

WID (WebSphere Integration Developer) 是 WebSphere 系列產品 JEE 開發的 IDE (Integrated Development Enviroment)。

JEE 企業級應用如果在 WID 平臺上開發,那麼天然便利的,可以選擇 WID 自帶的 TestClient 工具包進行除錯。選擇第三方自動化測試工具,例如 RFT,雖然也可以組織測試用例的效果,但是應用程式碼和除錯程式碼執行在兩套不同的平臺上,開發人員需要在兩種語境中切換以定位問題,影響工作效率。

WID 符合 SOA( 面向服務的軟體架構 ) 概念,強調 WebService 元件自描述、模組化和元件拼裝。因為當今的企業級應用不是一個一個獨立的應用系統,而是多個彼此連線,相互通過不同整合層次進行互動的應用系統,同時這些應用系統又和其他企業的相關應用系統連線,從而構成一個結構負責的釋出式企業應用系統。其中,連線企業內部各種應用系統的技術稱為 EAI, 即企業技術整合。連線企業間各種應用系統的技術稱為 B2BI。

構成企業級應用的各個模組,有些是由第三方開發的,只能得到介面資訊,無法獲取原始碼,無法真正為這些模組建立執行環境。所以相對於前面所述的各種企業級應用除錯小工具,WID TestClient 工具包主要側重於模擬元件,用來測試元件。WID TestClient 還能記錄執行過程,重用歷史資料。此外 WID TestClient 擴充套件自 JUnit, 能對測試用例進行有粒度的打包封裝,批量執行。WID TestClient 強調的是模擬企業級應用各個元件,強調對測試用例的組織維護和重用。具體到對資料庫應用程式碼或者對 web 頁面程式碼的調測 debug,還需要結合前面所述的其他除錯工具,例如 DBUnit 等開展。

簡單例項 , 調測 HelloWorld

WID 產品自帶有企業級應用示例 HelloWorld。下面介紹如何使用 WID TestClient 來調測 HelloWorld。

HelloWorld 獲取:

WID 介面選單 Windows > Samples and Tutorials > IBM WebSphere Integrarion Developer

選擇點選 Hello World Part 2 > Import > complete artifacts

環境要求:

需要事先安裝 WID 以及它的整合測試環境 UTE

使用模擬器 emulator 進行模擬

模擬器是 WID TestClient 實現對 SOA 元件進行模擬的一個工具。

開發人員在 JEE 企業級應用的除錯過程中有三個理由要使用到 emulator:

首先在協同開發階段,各個相互依賴的模組開發進度不同。不能等待所有模組都完成才開始測試。

其次構成企業級應用的各個模組,有些是由第三方開發的,只能得到介面資訊,無法獲取原始碼,無法真正為這些模組建立執行環境

最後即便所有的模組都開發完成,並且開放訪問,emulate 也是必要的。它更加快捷,提供良好的互動。

在 HelloWorld 示例中, HelloWorldMediation Module 呼叫了 HelloService Module。假設 HelloService Module 沒有開發完成,需要被模擬。

下面分 7 個步驟演示如何調測 HelloWorldMediation,如何模擬 HelloService。

  • 部署 HelloWorldMediation
  • 指定被測元件和需要輸入的資料
  • 模擬 HelloService, 為它新建一個名叫 emulHelloServiceProg 的模擬器
  • 編碼實現模擬器 emulHelloServiceProg
  • 開啟模擬器,執行 HelloWorldMeidationExport 調測用例
  • 關閉模擬器,部署真實的 HelloService, 再次執行 HelloWorldMeidationExport 調測用例
  • 儲存歷史資料
  1. 部署 HelloWorldMediation

    執行 WID ,匯入 HelloWorld Sample 工程

    選單 Windows > Samples and Tutorials > IBM WebSphere Integration Developer

    選擇點選 Hello World Part 2 > Import > complete artifacts

    啟動 Server

    選單 Windows > Show View > Server > Servers

    在 Server View 中,點選 WebSphere Process Server,右鍵選擇 ‘ Start ’

    部署 HelloWorldMediation

    在 Server View 中,點選 WebSphere Process Server,右鍵選擇‘ Add and remove project.. ’

    只選擇部署 HelloWorldMediation。不部署 HelloService,因為假設 HelloService 沒有開發完成,需要被模擬。

  2. 指定具體被測元件和需要輸入的資料

    選擇 HelloWorldMediation Module, 右鍵選單 Test > Test Module

    在開啟的 HelloWorldMediation_test 介面中

    指定被測的 component 是 HelloWorldMediationExport



    圖 2. 指定被測元件
    除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端
  3. Module > Component > Interface > Operation
  4. WID 是這樣在使用者介面上能逐級粒度化指定被測功能的。
  5. 填入需要的資料
  6. 在 title 域填入 Mr
  7. 在 FirstName 域填入 Bill
  8. 在 LastName 域填入 Gates
  9. 此時如果直接點選介面上的 (continue) 按鈕執行該測試用例,會出異常。這是因為 HelloWorldMediationExport 使用到的 HelloService 沒有執行在 server 上,需要被模擬。
  10. 模擬 HelloService, 為它新建一個名叫 emulHelloServiceProg 的模擬器

    在開啟的 HelloWorldMediation_Test 頁面,點選 Configurations Tab。

    點選 Component and Reference Emulators,

    右鍵選擇 Add > Component and Reference Emulator, 新建一個模擬器



    圖 3. 建立新的模擬器
    除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

在彈出的’New Component and Reference Eulator’的對話方塊中, 選擇‘ Components ’radio button, 選擇‘ HelloServiceImport ’check box,點選‘ Finish ’。

這樣就指定了被模擬的物件是 HelloServiceImport 這個 Component。

WID 支援 Manual 和 Programmatic 兩種方式對 HelloService 進行模擬。如果選擇 Manual,測試用例執行過程中會停止在對 HelloService 的呼叫上,並彈出模擬介面等待使用者手工輸入模擬結果。但是下面我們示範的是 Programmatic 方式。



除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

選擇 ‘ Programmatic emulation ’項

點選’ New.. ’ ,在彈出的’ New Emulator ’對話方塊中輸入 emulHelloServiceProg 給這段模擬 HellowService 的程式起名為 emulHelloServiceProg

接受所有預設設定, ‘ Next ’ >.. ‘ Next ’ > ’ Finish ’。完成後可以看到左側的專案樹上,TestClientPrj > Emulators 下新生成了一個 emulHelloServiceProg 節點

除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

    1. 編碼實現模擬器 emulHelloServiceProg
    2. emulHelloServiceProg 程式模擬 HelloService, 實現 HelloService interface, setHello operation. 輸入 name, 輸出 ‘ emulated ’ +name;
    3. 點選上圖右側的 string getHello() 超連結
    4. 選擇‘ Java snippet editor ’並點選 ‘ Define Emulation ’按鈕
    5. 在 Java Editor 中
    6. return null;
    1. 改為 return
      				 "emulated "+name;
      			

    1. Ctrl+s 儲存結果。
    2. 開啟模擬器,執行 HelloWorldMeidationExport 調測用例

      在 HelloWorldMediation- test 頁面, 點選 Events Tab, 點選介面上的綠色三角 continue按鈕開始執行。

      如果過程中彈出對話方塊,接受系統預設設定即可。

    3. 除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

    4. 執行完成後,在使用者介面直接可以看到執行結果輸出為:

      Emulated Mr Bill Gates

    5. 關閉模擬器 , 部署真正的 HelloService, 再次執行 HelloWorldMeidationExport

      在 HelloWorldMeidation_Test 頁面,點選 Configurations Tab。

      選擇左側結構樹上的 Componet and Reference Emulators > HelloServiceImport

      選擇右側的’ Disable ’ Radio button

      部署真正的 HelloService 應用

      在 Servers View, 點選 WebSphere Process Server, 右鍵選單選擇 ‘ Add and Remove Projects.. ’ 新增上 HelloServiceApp.

      確認 Server 上有兩個應用,一個是 HelloServieApp,另外一個是 HelloWorldMediationApp.

      在 HelloWorldMeidation_Test 頁面,點選 Events tab,重新執行 HelloWorldMediation_Test

      執行結束後,使用者介面上可以看到執行結果是

      Hello Mr Gill Gates.

    6. 儲存歷史資料

      如果在 WID 中專門為除錯建立一個名叫 testProject 的工程,( 我們將在下面的文章中講述如何建立 testProject),執行結果檔案,配置檔案和資料檔案都能被儲存在 testProject 中。儲存完成後專案樹上 testProject 新增三個節點:



      圖 7. 儲存歷史資料
      除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

    儲存 execution trace (*.wbiexetrace 檔案 )

    直接 Ctrl+s 把 HelloWorldMediation_Test 檔案儲存到預設目錄下。使用者可以在將來多次重複執行該 execution tracey 以期望得到同樣的結果,來驗證 JEE 企業級應用系統功能穩定沒有被修改破壞。

    儲存 configuration (*.testconfig 檔案)

    使用 programmatic emulator 來模擬 HelloService 是一種 configuration。不使用 emulator 又是另外一種 configuration。這些場景都被儲存在 *.testconfig 檔案中。

    使用者重新執行 execution trace 時,可以指定為它指派各種 configuration 進行配搭,比照執行結果。

    在 HelloWorldMediation_Test 頁面, 點選 Configurations Tab。

    點選 (save configuration)按鈕把目前的配置場景命名儲存為 configEmulHelloServiceProg 檔案。儲存 (save configuration) 按鈕旁邊就是匯入 (load configuration) 按鈕。

    儲存 data (*.objectpool 檔案或者 *.xml 檔案)

    使用者重新執行 execution trace 時,可以在 Data Pool 中挑選事先儲存好的資料,避免手工重新輸入資料,節省時間提高除錯效率。

  • 進一步使用 emulator

    emulator 深入使用

    Component Test Explorer 是 web 介面化的 TestClient 輔助工具。在 Server View 點選 WebSphere Process Server, 右鍵選單 Launch > Component Test Explorer 可以開啟這個工具。 使用 Component Test Explorer,能對 emulator 進行更加高階複雜的設定,例如新增觸發規則集 rule set 等。

    emulator 缺陷

    programmatic emulator 的侷限性是不支援複雜型別的輸出。如果 operation 有多個 output,就無法直接使用 programmatic emulator。使用者需要自程式設計封裝多個 output。

  • 使用 fine grain trace 逐級細化除錯

    前文介紹瞭如何利用 emulator 功能進行單個模組 HelloWorldMediation 的測試,這個章節我們將介紹利用 fine grain trace 功能對整個解決方案進行綜合除錯。

    fine grain trace 功能允許使用者對多個 component 中的呼叫路徑、內部變數進行追蹤,方便使用者定位問題和解決問題。

    還是以 Hello World Sample 為例闡述如何使用 fine grain trace 功能。如下圖所示,sample 中有這樣兩個 Module: HelloWorldProcess 和 HelloWorldMediation。我們在測試 HelloWorldProcess Module 中的流程 HelloWorldProcess 時,可以通過 fine grain trace 功能觀察 HelloWorldProcess 和 HelloWorldMediation 兩個 Module 中的所有呼叫路徑和相關變數值的變化。


    圖 8. HelloWorld 應用結構
    除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

    演示分 3 步進行

    • 選定 Trace 的範圍
    • 選定關注的變數
    • 執行測試
    1. 選定 Trace 的範圍

      在測試開始之前,首先需要選定需要關心的 trace 的範圍。以測試 HelloWorldProcess 為例,流程除了會呼叫同一 Module 內的模組,還會呼叫到 HelloWorldMediation Module 中的相關模組,所以我們需要將 HelloWorldMediation module 新增到測試配置中。

      首先,在 Project Tree 中選中 HelloWorldProcesss Module, 選擇右鍵選單 Test > Test Module

      並指定具體被測元件和需要輸入的資料 , 選擇的被測 component 是’ HelloWorldProcess ’

      輸入的資料是 : Gender: Male.

      然後點選 Configurations Tab, 選擇新增測試 Module.



      圖 9. 新增要配置的 Module
      除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端
    2. 接著 , 在新增新的測試 Module 的視窗中選擇 HelloWorldMediation 和 HelloWorldProcess Module, 點選 Finish 結束。

      我們會得到下圖所示的 Fine-Grained Traces 配置 , 存在於兩個不同 Module 中的兩個模組 (HelloWorldProcess 和 HelloWorldMediation) 的內部呼叫路徑及變數都可以在測試中得到觀察。

      新增完 Module 後,如果 Module 下 Fine-Grained Traces 是空的,我們可以通過右鍵選單新增 Fine-Grained Trace



      圖 10. Fine-Grain Traces 在配置樹中
      除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端
    3. 選定關注的變數

      在選擇好合適的 trace 範圍後,我們還可以配置該範圍中的模組在呼叫時,哪些變數會被觀察。

      選中 fine-grained traces 中配置的“HelloWorldProcess”模組後,視窗右邊會出現變數的選擇列表,點選“Select All”,選中所有的變數,從而在測試時觀察所有的變數的值的變化。



      圖 11. 選擇觀察變數
      除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端
    4. 執行測試

      同樣,切換回’ Event ’ Tab,點選介面上的 按鈕,啟動測試。

      然後登陸 BPC explorer, 執行 Human Task “HelloWorldTask”.

      輸入

      firstName: john

      lastName: green

      並提交.

      執行結束後,我們可以看到非常清晰的 trace 資訊 , 其中包含三個 fine-grained traces 部分 , 第一個是關於 HelloWorldProcess 內部的執行路徑資訊,通過點選內部元素可以觀察每個執行階段內部變數的相關值。如下圖,點選“AssignM”,可以從右邊視窗中觀察到流程執行到該節點時相關變數的值。



      圖 12. Fine-Grain Traces 執行結果
    5. 除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

    另外,後面兩個 fine-grained traces 部分展開後,能夠分別觀察到 HelloWorldMediation 模組在請求階段和返回階段的內部執行路徑。

    批量執行測試案例,重用歷史資料

    前文介紹了 WID TestClient 的 emulator 模擬器功能和 fine grain trace 功能。這些功能都是用以輔助單個測試用例的執行。

    最後我們在 WID 中新建立一個 testProject, 對所有測試用例進行有粒度的打包封裝,批量執行。

    演示分 3 步進行

    • 建立 Test Suite 和 Test case
    • 新建多個 Test Data Table
    • 批量執行測試用例,比較結果,儲存記錄
    1. 建立 Test Project, Test Suite 和 Test case

      執行 WID

      File > New > Others > Business Integration > Component Test Project

      輸入工程名 myTestProject, 點選‘ Finish ’

      右鍵選擇 myTestProject New > Component Test Suite,

      輸入 myTestSuite1, 點選 ‘ Finish ’

      在開啟的 myTestSuite1 編輯器頁面中 , 點選 Test Cases Tab, 點選 按鈕新增 Testcase



      圖 13. 在 TestSuite 中增加 TestCase
    2. 除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端
    3. 在彈出的 Select a test pattern 對話方塊中,選擇 Operation-level testing, 選擇‘ Next ’

      在彈出的 Select the Operations to be Tested 對話方塊中,

      選擇 HelloWorldMediation > HelloWorldMediation > HelloWorld > callHello 作為被測物件。 目前只指定一個被測物件 callHello,也可以批量指定被測物件。



      圖 14. 選擇目標測試操作
    4. 除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

      點選完成後可以看到 test_callHello 被新增到 myTestSuite 的 Test Cases 列表中了。

    5. 建立 Test Data Table

      在 Test Data Table 頁面中新增定製 myDataTable1

      選單 Window > Show View > Other > Test > Test Data Table

      在 Test Data Table View 中,點選右上方的 ‘ Add Variation ’

      在彈出的 Add a Test Variation 對話方塊中輸入自定義的資料表名稱 myDataTable1

      編輯 myDataTable1

      輸入如下 input 和 expected output.

      在 In 列, 輸入

      Mr ’

      ‘ Bill ’

      ‘ Gates ’

      在 Expected 列, 輸入:‘ Hello Mr Bill Gates ’

      Ctrl+s 儲存。

      儲存完成後,點選 test_callHello, 檢視其右側 Detailed Properties 域, 可以看到 myDataTable1 被新增到 Test vaiations 列表中了。



      圖 15. 新增測試資料表
      除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端
    6. 可以為 test case 編輯配置多個 data table.

    7. 執行測試用例,比較結果,儲存記錄

      在專案樹上點選 myTestProject > Test Suites > myTestSuite, 右鍵選擇 Run Test

      將會開啟‘ Run myTestSuite ’ 頁面

      點選介面上的 按鈕,啟動測試。

      需要指出的是 myTestProject 要部署在 Server 上執行。在彈出的 Deployment Location 對話方塊中點選 Finish,選擇預設安裝的 WID UTE 即 WebSphere Process Server.

      執行過程中使用了預定義的兩套資料, Default 和 myDataTable1。

      執行結束後,使用者介面顯示兩組成功執行。



      圖 16. 觀察 TestSuite 執行結果
    8. 除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

    Ctrl+S 儲存執行結果

    在彈出的’ Save Test Trace ’對話方塊中輸入名稱 myTestTrace_test_callHello

    把執行結果儲存為 myTestTrace_test_callHello

    儲存完成後專案樹上新增節點



    圖 17. TestSuite 執行 Trace 被儲存在專案樹上

    除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端

    1. 使用者可以在將來多次重複執行這個名為 myTestTrace_test_callHello 的 execution trace。以期望得到同樣的結果,驗證 JEE 企業級應用系統功能穩定沒有被修改破壞。
    2. 本文附件 WID_TestClient_Guide.zip 是文中所演示的步驟執行結果。
    3. 開啟 WID
    4. File > Import > Other > Project Intechange
    5. From zip file 指向附件工程 WID_TestClient_Guide.zip 即可。

    結束語

    本文演示瞭如何使用 WID( WebSphere Integration Developer) 整合測試客戶端 TestClient 除錯基於 SOA 架構的 JEE 企業級應用。主要講述了 模擬元件介面的 emulator,逐級細化除錯的 fine grain trace,和批量組織測試用例的 testProject。

    來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-662735/,如需轉載,請註明出處,否則將追究法律責任。

    相關文章