除錯 JEE 企業級應用 - 使用 WebSphere Integration Developer 整合測試客戶端
轉自 http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1005_yelin_widtest/
當今 JEE 企業級應用開發的發展快速。需要對開發出來的企業級應用進行除錯, 這種需求促生出各種新興除錯工具。使用者需要根據除錯的模組的自身特性,選擇合適的工具,達到預期的效果。
在介紹各種小工具之前,先回憶一下 JEE 體系結構中包括的四個容器:Web 容器,EJB 容器,Applet 容器和 Application Client 容器。JEE 企業級應用所有的實現都執行其中。
相應的測試工具也就主要針對,1)普通執行於客戶端的 Java 程式碼, 2)GUI 介面程式碼除錯 3) 資料庫操作程式碼除錯, 4)伺服器上的 Servlet/JSP/EJB 程式碼除錯
普通的執行於客戶端的 Java 程式碼的除錯可以選擇 JUnit。
JUnit 是最基本的,對 Java 程式進行白盒測試的工具。JUnit4 以前的版本,所有測試用例必須繼承 TestCase 類;而在 JUnit4 以後,利用了 JDK5 的 annotation 機制,只要在方法體前面使用 @test 表明該方法是測試方法。這使得測試程式碼的編寫更加簡單。
JUnit 和 Ant 相結合,整合到開發的構建過程中。先根據軟體功能編寫測試用例,然後將測試用例的執行整合到 Ant 構建檔案中。這樣 Ant 在構建企業級應用的時候同時自動執行測試用例並生成測試報告。
專案地址 http://www.junit.org
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)的測試。一般有兩種策略。一種是 in-Containner,直接在伺服器容器內進行測試,另外一種是 mock object,模擬物件測試。
如果需要 in-Containner,可以使用 Cactus。
Cactus 也是對 JUnit 的擴充套件。專門針對伺服器內不同元件容器,分別提供了三種型別用例 ServletTestCase, JspTestCase 和 FilterTestCase。 Cactus 的指令碼可以直接執行在伺服器上。
專案地址 http://jakarta.apache.org/cactus
如果只需要模擬物件,可以選擇 EasyMock, 它提供對介面和類的模擬。
如果 JEE 企業級應用是基於 Struts 框架的,那麼可以使用 StrutsTestSuite 進行測試。StrutsTestSuite 顧名思義,提供了豐富的基於 Struts 框架的測試類。
如果是 Client/Server 框架的 JEE 企業級應用的系統測試,可以使用 JMeter。
JMeter 是純 Java 桌面應用。功能比較強大,還能測試基於靜態和動態資源應用的效能。
專案地址 http://prdownloads.sourceforge.net/JMeter
上面介紹的各種工具可以相互結合著使用,達到各種需要的效果。
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 等開展。
WID 產品自帶有企業級應用示例 HelloWorld。下面介紹如何使用 WID TestClient 來調測 HelloWorld。
HelloWorld 獲取:
WID 介面選單 Windows > Samples and Tutorials > IBM WebSphere Integrarion Developer
選擇點選 Hello World Part 2 > Import > complete artifacts
環境要求:
需要事先安裝 WID 以及它的整合測試環境 UTE
模擬器是 WID TestClient 實現對 SOA 元件進行模擬的一個工具。
開發人員在 JEE 企業級應用的除錯過程中有三個理由要使用到 emulator:
首先在協同開發階段,各個相互依賴的模組開發進度不同。不能等待所有模組都完成才開始測試。
其次構成企業級應用的各個模組,有些是由第三方開發的,只能得到介面資訊,無法獲取原始碼,無法真正為這些模組建立執行環境
最後即便所有的模組都開發完成,並且開放訪問,emulate 也是必要的。它更加快捷,提供良好的互動。
在 HelloWorld 示例中, HelloWorldMediation Module 呼叫了 HelloService Module。假設 HelloService Module 沒有開發完成,需要被模擬。
下面分 7 個步驟演示如何調測 HelloWorldMediation,如何模擬 HelloService。
- 部署 HelloWorldMediation
- 指定被測元件和需要輸入的資料
- 模擬 HelloService, 為它新建一個名叫 emulHelloServiceProg 的模擬器
- 編碼實現模擬器 emulHelloServiceProg
- 開啟模擬器,執行 HelloWorldMeidationExport 調測用例
- 關閉模擬器,部署真實的 HelloService, 再次執行 HelloWorldMeidationExport 調測用例
- 儲存歷史資料
- 部署 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 沒有開發完成,需要被模擬。
- 指定具體被測元件和需要輸入的資料
選擇 HelloWorldMediation Module, 右鍵選單 Test > Test Module
在開啟的 HelloWorldMediation_test 介面中
指定被測的 component 是 HelloWorldMediationExport
圖 2. 指定被測元件 - Module > Component > Interface > Operation
- WID 是這樣在使用者介面上能逐級粒度化指定被測功能的。
- 填入需要的資料
- 在 title 域填入 Mr
- 在 FirstName 域填入 Bill
- 在 LastName 域填入 Gates
- 此時如果直接點選介面上的 (continue) 按鈕執行該測試用例,會出異常。這是因為 HelloWorldMediationExport 使用到的 HelloService 沒有執行在 server 上,需要被模擬。
- 模擬 HelloService, 為它新建一個名叫 emulHelloServiceProg 的模擬器
在開啟的 HelloWorldMediation_Test 頁面,點選 Configurations Tab。
點選 Component and Reference Emulators,
右鍵選擇 Add > Component and Reference Emulator, 新建一個模擬器
圖 3. 建立新的模擬器
在彈出的’New Component and Reference Eulator’的對話方塊中, 選擇‘ Components ’radio button, 選擇‘ HelloServiceImport ’check box,點選‘ Finish ’。
這樣就指定了被模擬的物件是 HelloServiceImport 這個 Component。
WID 支援 Manual 和 Programmatic 兩種方式對 HelloService 進行模擬。如果選擇 Manual,測試用例執行過程中會停止在對 HelloService 的呼叫上,並彈出模擬介面等待使用者手工輸入模擬結果。但是下面我們示範的是 Programmatic 方式。
選擇 ‘ Programmatic emulation ’項
點選’ New.. ’ ,在彈出的’ New Emulator ’對話方塊中輸入 emulHelloServiceProg 給這段模擬 HellowService 的程式起名為 emulHelloServiceProg
接受所有預設設定, ‘ Next ’ >.. ‘ Next ’ > ’ Finish ’。完成後可以看到左側的專案樹上,TestClientPrj > Emulators 下新生成了一個 emulHelloServiceProg 節點
- 編碼實現模擬器 emulHelloServiceProg
- emulHelloServiceProg 程式模擬 HelloService, 實現 HelloService interface, setHello operation. 輸入 name, 輸出 ‘ emulated ’ +name;
- 點選上圖右側的 string getHello() 超連結
- 選擇‘ Java snippet editor ’並點選 ‘ Define Emulation ’按鈕
- 在 Java Editor 中
- 把 return null;
|
- Ctrl+s 儲存結果。
- 開啟模擬器,執行 HelloWorldMeidationExport 調測用例
在 HelloWorldMediation- test 頁面, 點選 Events Tab, 點選介面上的綠色三角 continue按鈕開始執行。
如果過程中彈出對話方塊,接受系統預設設定即可。
-
執行完成後,在使用者介面直接可以看到執行結果輸出為:
Emulated Mr Bill Gates
- 關閉模擬器 , 部署真正的 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.
- 儲存歷史資料
如果在 WID 中專門為除錯建立一個名叫 testProject 的工程,( 我們將在下面的文章中講述如何建立 testProject),執行結果檔案,配置檔案和資料檔案都能被儲存在 testProject 中。儲存完成後專案樹上 testProject 新增三個節點:
圖 7. 儲存歷史資料
儲存 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 深入使用
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。
前文介紹瞭如何利用 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 中的所有呼叫路徑和相關變數值的變化。
演示分 3 步進行
- 選定 Trace 的範圍
- 選定關注的變數
- 執行測試
- 選定 Trace 的範圍
在測試開始之前,首先需要選定需要關心的 trace 的範圍。以測試 HelloWorldProcess 為例,流程除了會呼叫同一 Module 內的模組,還會呼叫到 HelloWorldMediation Module 中的相關模組,所以我們需要將 HelloWorldMediation module 新增到測試配置中。
首先,在 Project Tree 中選中 HelloWorldProcesss Module, 選擇右鍵選單 Test > Test Module
並指定具體被測元件和需要輸入的資料 , 選擇的被測 component 是’ HelloWorldProcess ’
輸入的資料是 : Gender: Male.
然後點選 Configurations Tab, 選擇新增測試 Module.
圖 9. 新增要配置的 Module -
接著 , 在新增新的測試 Module 的視窗中選擇 HelloWorldMediation 和 HelloWorldProcess Module, 點選 Finish 結束。
我們會得到下圖所示的 Fine-Grained Traces 配置 , 存在於兩個不同 Module 中的兩個模組 (HelloWorldProcess 和 HelloWorldMediation) 的內部呼叫路徑及變數都可以在測試中得到觀察。
新增完 Module 後,如果 Module 下 Fine-Grained Traces 是空的,我們可以通過右鍵選單新增 Fine-Grained Trace
圖 10. Fine-Grain Traces 在配置樹中 - 選定關注的變數
在選擇好合適的 trace 範圍後,我們還可以配置該範圍中的模組在呼叫時,哪些變數會被觀察。
選中 fine-grained traces 中配置的“HelloWorldProcess”模組後,視窗右邊會出現變數的選擇列表,點選“Select All”,選中所有的變數,從而在測試時觀察所有的變數的值的變化。
圖 11. 選擇觀察變數 - 執行測試
同樣,切換回’ Event ’ Tab,點選介面上的 按鈕,啟動測試。
然後登陸 BPC explorer, 執行 Human Task “HelloWorldTask”.
輸入
firstName: john
lastName: green
並提交.
執行結束後,我們可以看到非常清晰的 trace 資訊 , 其中包含三個 fine-grained traces 部分 , 第一個是關於 HelloWorldProcess 內部的執行路徑資訊,通過點選內部元素可以觀察每個執行階段內部變數的相關值。如下圖,點選“AssignM”,可以從右邊視窗中觀察到流程執行到該節點時相關變數的值。
圖 12. Fine-Grain Traces 執行結果
另外,後面兩個 fine-grained traces 部分展開後,能夠分別觀察到 HelloWorldMediation 模組在請求階段和返回階段的內部執行路徑。
前文介紹了 WID TestClient 的 emulator 模擬器功能和 fine grain trace 功能。這些功能都是用以輔助單個測試用例的執行。
最後我們在 WID 中新建立一個 testProject, 對所有測試用例進行有粒度的打包封裝,批量執行。
演示分 3 步進行
- 建立 Test Suite 和 Test case
- 新建多個 Test Data Table
- 批量執行測試用例,比較結果,儲存記錄
- 建立 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 -
在彈出的 Select a test pattern 對話方塊中,選擇 Operation-level testing, 選擇‘ Next ’
在彈出的 Select the Operations to be Tested 對話方塊中,
選擇 HelloWorldMediation > HelloWorldMediation > HelloWorld > callHello 作為被測物件。 目前只指定一個被測物件 callHello,也可以批量指定被測物件。
圖 14. 選擇目標測試操作 -
點選完成後可以看到 test_callHello 被新增到 myTestSuite 的 Test Cases 列表中了。
- 建立 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. 新增測試資料表 -
可以為 test case 編輯配置多個 data table.
- 執行測試用例,比較結果,儲存記錄
在專案樹上點選 myTestProject > Test Suites > myTestSuite, 右鍵選擇 Run Test
將會開啟‘ Run myTestSuite ’ 頁面
點選介面上的 按鈕,啟動測試。
需要指出的是 myTestProject 要部署在 Server 上執行。在彈出的 Deployment Location 對話方塊中點選 Finish,選擇預設安裝的 WID UTE 即 WebSphere Process Server.
執行過程中使用了預定義的兩套資料, Default 和 myDataTable1。
執行結束後,使用者介面顯示兩組成功執行。
圖 16. 觀察 TestSuite 執行結果
Ctrl+S 儲存執行結果
在彈出的’ Save Test Trace ’對話方塊中輸入名稱 myTestTrace_test_callHello
把執行結果儲存為 myTestTrace_test_callHello
儲存完成後專案樹上新增節點
圖 17. TestSuite 執行 Trace 被儲存在專案樹上
- 使用者可以在將來多次重複執行這個名為 myTestTrace_test_callHello 的 execution trace。以期望得到同樣的結果,驗證 JEE 企業級應用系統功能穩定沒有被修改破壞。
- 本文附件 WID_TestClient_Guide.zip 是文中所演示的步驟執行結果。
- 開啟 WID
- File > Import > Other > Project Intechange
- 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WebSphere Integration Developer Version 7 中的新特性WebDeveloper
- 使用WebSphere Integration Developer和WebSphere Process Server的二進位制Jar檔案WebDeveloperServerJAR
- WebSphere Integration Developer V6.2 中的新增功能WebDeveloper
- 「Oracle」客戶端 PL/SQL DEVELOPER 安裝使用Oracle客戶端SQLDeveloper
- 使用測試客戶端「玩轉」MQTT 5.0客戶端MQQT
- JavaScript客戶端測試之旅JavaScript客戶端
- WebSphere Integration Developer V7 中的 XML 對映WebDeveloperXML
- 4.1.7.2.5 與快速應用程式通知整合的Oracle客戶端Oracle客戶端
- Websphere安裝、企業部署應用 【應用案例】Web
- WCF 關閉預設除錯客戶端除錯客戶端
- 使用Integration Developer中的Claim Check模式提高應用程式效率(一)DeveloperAI模式
- 使用Integration Developer中的Claim Check模式提高應用程式效率(二)DeveloperAI模式
- PC客戶端安全測試服務客戶端
- 客戶端釋出日誌測試客戶端
- [Redis 客戶端整合] Java 中常用Redis客戶端比較Redis客戶端Java
- [測試平臺] 全流程客戶端測試質量保障客戶端
- FJ集團企業級郵件伺服器—iRedMail客戶端配置伺服器AI客戶端
- oracle客戶端升級Oracle客戶端
- 企業應用整合之BizTalk
- 使用 Eclipse 遠端除錯 Java 應用程式Eclipse除錯Java
- Oracle 11g客戶端及PLSQL Developer配置Oracle客戶端SQLDeveloper
- 無線iphone客戶端測試白皮書(二)iPhone客戶端
- 無線iphone客戶端測試白皮書(三)iPhone客戶端
- 企業級雲原生應用交付及管理系列 - Helm 除錯及維護 (二)除錯
- 用whistle和proxifier抓包除錯任意客戶端的網路請求除錯客戶端
- 企業如何使用CRM客戶管理系統全面瞭解客戶
- 開源文件工具 showdoc 推出除錯介面的客戶端除錯客戶端
- 超完整的 Chrome 瀏覽器客戶端除錯大全Chrome瀏覽器客戶端除錯
- PL/SQL developer 遠端連線資料庫 客戶端配置SQLDeveloper資料庫客戶端
- WebSphere客戶端遷移的一般問題Web客戶端
- 大型專案裡Flutter測試應用例項整合測試深度使用Flutter
- 不安裝oracle客戶端部署PB應用Oracle客戶端
- 03. 實現客戶端應用程式客戶端
- SnailSVN 專業版:與訪達整合的 SVN 客戶端AI客戶端
- github客戶端使用Github客戶端
- 使用 Eclipse 遠端除錯 Java 應用程式(mark)Eclipse除錯Java
- 客戶端效能測試利器PerfDog嚐鮮體驗客戶端
- 測試平臺系列(80) 封裝Redis客戶端封裝Redis客戶端