敏捷開發和測試中重現缺陷和驗證缺陷的解決方案(3)
簡介:在作為系列的最后一篇覆蓋的部分是缺陷生命周期的最后一個環節,缺陷的驗證。本文主要描述了如何通過 Rational Team Concert(RTC)、Rational Quality Manager(RQM)及 IBM Workload Deployer(IWD)實現缺陷驗證的自動化,而且筆者通過一個 RTC web 插件來展現自動化頁面。
背景
系列前兩篇中我們描述了如何用 IBM 產品幫助開發人員快速重現缺陷問題,下面本文主要描述一下我們是如何使用 IBM 產品加速缺陷驗證過程的。
在缺陷驗證的過程中,測試人員需要完成一下幾個任務:
● 定位可驗證的缺陷 (Verifiable Defect)
▲ 可驗證的缺陷是指缺陷對應的產品代碼變動已經被開發人員提交并包含在產品最新版本中。
▲ 定位的范圍一般包括
→ 測試人員自己提交的缺陷(Created by)
→ 由其他人員提交的,需要測試人員關注的缺陷(Subscribed by)
▲ 測試人員一般需要針對每個關注的缺陷查看是否相應的代碼變更已經包括在最新產品版本中。
● 快速部署缺陷驗證的測試環境
▲ 環境準備一直是比較耗時的部分,不過這里我們可以借助在第一篇中我們創建的重現缺陷用的 IWD 中的虛擬系統模式 (Virtual System Pattern)。
● 調用對應的測試用例執行
▲ 測試人員需要找到對應的測試用例,在最新產品版本中重現執行。
● 更新缺陷狀態和信息
▲ 根據最新的測試執行結果,可以判斷缺陷是否還存在,從而更新缺陷狀態和信息記錄。
本文主要解決的問題
● 如何快速定位可驗證的缺陷
● 把缺陷驗證環節自動化,自動化內容包括:
▲ 準備測試環境
▲ 執行測試用例
▲ 更新缺陷狀態和信息
● 更好的用戶體驗
▲ 現在每個團隊都會在不同程度上通過自動化工具來解決上述問題。由于上述工作涉及存儲不同信息的軟件系統,測試人員就需要登陸不同的系統采取相應的操作,例如:
→ 缺陷管理系統:開發和測試人員在這里可以更改缺陷的內容和狀態。
→ 產品 build 管理系統:每個產品在正式發布前,內部的研發解決都會采用某個軟件或系統對產品代碼進行管理并且對內部發布產品非正式版本 (Build) 用于開發和測試。產品 Build 管理系統會記錄每個 Build 所包含的代碼變動,也會同時記錄這一代碼變動是由哪個缺陷引起的。
→ IT 環境管理系統:這一系統通常會為開發測試人員提供可用的環境。在某些團隊中會通過不同的軟件來調用 IT 環境管理系統來實現不同程度的自動化環境部署。
→ 測試管理系統:存儲測試用例,測試結果和測試計劃等內容。
▲ 所以開發和測試人員在完成缺陷驗證工作的過程中,需要登錄各種不同的軟件系統,而沒有統一入口的使用方式會帶來不好的用戶體驗。
實現框架
圖 1. 實現框架
1、搜索:這個部分負責跟缺陷管理系統和產品 Build 管理系統交互獲得跟用戶有關的可驗證缺陷信息、對應的產品 Build 信息和測試用例的信息。
3、測試執行:根據搜索部分提供測試用例,調用對應的自動化測試用例腳本進行驗證。
框架中提到的不同軟件系統,每個團隊可以針對自己的實例完成實現。
在 RTC 中我們的實現是開始于 RTC 中的一個缺陷查詢 (Query),用戶可以自己定義一個缺陷查詢包括那些狀態時 Resolved 的缺陷。
● 產品– 由于 RTC 同一個項目中可能會涉及多個產品的缺陷記錄,而一個用戶又有可能會對多個產品的缺陷負責,所以產品作為第一個篩選條件。
● 產品版本– 由于 RTC 同一個項目中可能會涉及同一個產品的不同版本的開發以及缺陷記錄,而一個用戶又有可能會工作于不同的產品版本。
● 環境 -- 在 RTC 中可以為不同的項目缺陷記錄定義不同的字段,這里可以定義環境的信息。(如圖3)
根據用戶自定義的缺陷查詢和選定的三個篩選條件,我們可以完成第一次篩選,得到待驗證的缺陷列表。下面就需要去版本控制系統中查找當前產品版本中包含哪些待驗證的缺陷。
# # get all the vsystems associated with a pattern ###### try: fhandle = open(output, 'w') print 'Running ...' end_time = time.time()+(60*duration) |
清單 3. 部署制定的虛擬系統模式
import time, threading, Queue, csv ################################################################# # default parameters # select the performance pattern to deploy #start deploying print '############# test summary #######################' |
實現部分 3:測試執行
測試執行的時候我們需要調用 RQM 的命令行執行工具 (Command Line Execution Tool),這個工具是跟著 RQM 同時發布在 Jazz.net 上的,具體下載請看參考資源中提供的鏈接。
RQM 命令行執行工具是我們可以方便的執行測試,通過 RQM RESTAPI 啟動測試執行記錄 (Test Execution Record) 的運行。在運行測試執行時需要提供以下信息:
● RQM url – https://hostname:9443/qm
● 用戶名和密碼 -- 使用這個用戶名允許運行相應的測試執行記錄
● 項目– 測試用例所在的 RQM 中的測試項目
● 測試執行記錄的 id
● 測試執行記錄關聯的腳本的 id
● 執行適配器 (Adapter) 的 id
▲ 執行適配器是 RQM 提供的用以連接并操作具體測試腳本的功能,常用的適配器包括 Rational Functional Tester、Rational Performance Tester、Rational Build Forge 以及其他更多第三方廠商和開源工具的適配器。用戶也可以自己編寫適配器。
● 執行時需要的參數
通過命令行調用后執行結果是會輸出到命令行的,也可以直接輸出到文件,用于后續操作。
實現部分 4:自動化中注意事項
要把整個流程自動化需要用到流程工具,可以用開源的 ant 或者使用 IBM Rational Build Forge。
這里主要介紹幾個重點:
1、測試用例相關信息獲得
a)缺陷可以通過 RTC 與 RQM 之間的 OSLC 關聯關系連接 RQM 中的測試執行結果 (Test Execution Result),測試執行結果是測試執行記錄 (Test Execution Record) 的執行結果。
b)然后我們可以從缺陷中獲得測試執行結果的 url,經過分析我們可以獲得 RQM 項目名稱,測試執行結果 id 等信息,用于調用 RQM 命令行執行工具。
2、缺陷驗證環境信息的傳遞
a)缺陷驗證環境是我們通過部署虛擬系統模式生成的新的虛擬機,所以 ip、hostname、用戶名和密碼都是新的。而在驗證系列第二篇中提到的 WAS 賣花網站中遇到的缺陷,我們需要傳送新的 url 地址給 RFT 腳本。
b)在調用 RQM 命令行執行工具的時候就需要傳輸參數
清單 4. RQM 命令行調用附參數
c:\IBM\java60\bin\java -jar RQMExecutionTool.jar -tcerId=1 -projectName=QM1 -publicURI=https://paul801beta:9443/qm -user=paul -password=passw0rd -exitOnComplete=true -variables=host:clmsvr-sjy.cn.ibm.com |
c)RFT 中接受參數的腳本如下
清單 5. RFT 腳本
import com.rational.test.ft.script.IParameter; import com.rational.test.ft.script.IVariablesManager; public class SampleScript extends SampleScriptHelper { /** * Script Name : <b>SampleScript</b> * Generated : <b>Dec 10, 2012 1:44:05 PM</b> * Description : Functional Test Script * Original Host : WinNT Version 5.1 Build 2600 (S) * * @since 2012/12/10 * @author Administrator */ public void testMain(Object[] args) { //接收參數的定義 IVariablesManager manager = getVariablesManager(); IParameter host = manager.getInputParameter("host"); startApp("http://" + host.getValue() + ":9081/PlantsByWebSphere/"); // HTML Browser // Document: Plants by WebSphere: // http://clmsvr-sjy.cn.ibm.com:9081/PlantsByWebSphere/ // Document: http://clmsvr-sjy.cn.ibm.com:9081/PlantsByWebSphere/promo.html image_bonsaiTree().click(); // Document: // http://clmsvr-sjy.cn.ibm.com:9081/PlantsByWebSphere/servlet/ShoppingServlet? // action=productdetail&itemID=T0003 browser_htmlBrowser(document_plantsByWebSphere(),DEFAULT_FLAGS).inputChars("abc"); button_addToCart().click(); } } |
這里提示一下 RQM 命令行執行工具也提供了 ant 任務調用,方便把執行測試這部分集成到自動化的流程中。
實現部分 5:Jazz 插件的開發
Jazz 插件的開發與 Eclipse 插件開發模式是一致的,Jazz 平臺定義了豐富而功能強大的擴展點,用戶可以利用這些擴展點,定義和實現各種定制功能。
首先要搭建擴展開發環境,Jazz.net 網站提供了詳細的下載 SDK 鏈接,以及參考文檔。
RTC Server 端服務的擴展,有關 Jazz Component 開發詳細資料請查看參考資源中提供的鏈接。Jazz Component 開發擴展擴展點"com.ibm.team.repository.common.components",定義服務類接口,類型是 Raw_HTTP。
清單 6
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.2"?> <plugin> <!-- This extension defines our component to Jazz. Note that the common plugin is included on both the client and server, so the component is known both places. --> <extension point="com.ibm.team.repository.common.components"> <component id="com.ibm.rational.svt.workitem.extensions" name="Workitem Validation Workflow"> <service kind="RAW_HTTP" name="Workitem Validation WorkFlow Rest Service" uri="com.ibm.rational.svt.workitem.extensions.common. IWorkitemValidationWorkflowRestService" version="1"> </service> </component> </extension> </plugin> |