敏捷開發(fā)和測試中重現(xiàn)缺陷和驗證缺陷的解決方案(3)
簡介:在作為系列的最后一篇覆蓋的部分是缺陷生命周期的最后一個環(huán)節(jié),缺陷的驗證。本文主要描述了如何通過 Rational Team Concert(RTC)、Rational Quality Manager(RQM)及 IBM Workload Deployer(IWD)實現(xiàn)缺陷驗證的自動化,而且筆者通過一個 RTC web 插件來展現(xiàn)自動化頁面。
背景
系列前兩篇中我們描述了如何用 IBM 產(chǎn)品幫助開發(fā)人員快速重現(xiàn)缺陷問題,下面本文主要描述一下我們是如何使用 IBM 產(chǎn)品加速缺陷驗證過程的。
在缺陷驗證的過程中,測試人員需要完成一下幾個任務(wù):
● 定位可驗證的缺陷 (Verifiable Defect)
▲ 可驗證的缺陷是指缺陷對應(yīng)的產(chǎn)品代碼變動已經(jīng)被開發(fā)人員提交并包含在產(chǎn)品最新版本中。
▲ 定位的范圍一般包括
→ 測試人員自己提交的缺陷(Created by)
→ 由其他人員提交的,需要測試人員關(guān)注的缺陷(Subscribed by)
▲ 測試人員一般需要針對每個關(guān)注的缺陷查看是否相應(yīng)的代碼變更已經(jīng)包括在最新產(chǎn)品版本中。
● 快速部署缺陷驗證的測試環(huán)境
▲ 環(huán)境準備一直是比較耗時的部分,不過這里我們可以借助在第一篇中我們創(chuàng)建的重現(xiàn)缺陷用的 IWD 中的虛擬系統(tǒng)模式 (Virtual System Pattern)。
● 調(diào)用對應(yīng)的測試用例執(zhí)行
▲ 測試人員需要找到對應(yīng)的測試用例,在最新產(chǎn)品版本中重現(xiàn)執(zhí)行。
● 更新缺陷狀態(tài)和信息
▲ 根據(jù)最新的測試執(zhí)行結(jié)果,可以判斷缺陷是否還存在,從而更新缺陷狀態(tài)和信息記錄。
本文主要解決的問題
● 如何快速定位可驗證的缺陷
● 把缺陷驗證環(huán)節(jié)自動化,自動化內(nèi)容包括:
▲ 準備測試環(huán)境
▲ 執(zhí)行測試用例
▲ 更新缺陷狀態(tài)和信息
● 更好的用戶體驗
▲ 現(xiàn)在每個團隊都會在不同程度上通過自動化工具來解決上述問題。由于上述工作涉及存儲不同信息的軟件系統(tǒng),測試人員就需要登陸不同的系統(tǒng)采取相應(yīng)的操作,例如:
→ 缺陷管理系統(tǒng):開發(fā)和測試人員在這里可以更改缺陷的內(nèi)容和狀態(tài)。
→ 產(chǎn)品 build 管理系統(tǒng):每個產(chǎn)品在正式發(fā)布前,內(nèi)部的研發(fā)解決都會采用某個軟件或系統(tǒng)對產(chǎn)品代碼進行管理并且對內(nèi)部發(fā)布產(chǎn)品非正式版本 (Build) 用于開發(fā)和測試。產(chǎn)品 Build 管理系統(tǒng)會記錄每個 Build 所包含的代碼變動,也會同時記錄這一代碼變動是由哪個缺陷引起的。
→ IT 環(huán)境管理系統(tǒng):這一系統(tǒng)通常會為開發(fā)測試人員提供可用的環(huán)境。在某些團隊中會通過不同的軟件來調(diào)用 IT 環(huán)境管理系統(tǒng)來實現(xiàn)不同程度的自動化環(huán)境部署。
→ 測試管理系統(tǒng):存儲測試用例,測試結(jié)果和測試計劃等內(nèi)容。
▲ 所以開發(fā)和測試人員在完成缺陷驗證工作的過程中,需要登錄各種不同的軟件系統(tǒng),而沒有統(tǒng)一入口的使用方式會帶來不好的用戶體驗。
實現(xiàn)框架
圖 1. 實現(xiàn)框架
3、測試執(zhí)行:根據(jù)搜索部分提供測試用例,調(diào)用對應(yīng)的自動化測試用例腳本進行驗證。
4、狀態(tài)更新:根據(jù)測試執(zhí)行的結(jié)果自動更新缺陷的狀態(tài)和內(nèi)容。
框架中提到的不同軟件系統(tǒng),每個團隊可以針對自己的實例完成實現(xiàn)。
在 RTC 中我們的實現(xiàn)是開始于 RTC 中的一個缺陷查詢 (Query),用戶可以自己定義一個缺陷查詢包括那些狀態(tài)時 Resolved 的缺陷。
● 產(chǎn)品– 由于 RTC 同一個項目中可能會涉及多個產(chǎn)品的缺陷記錄,而一個用戶又有可能會對多個產(chǎn)品的缺陷負責(zé),所以產(chǎn)品作為第一個篩選條件。
● 產(chǎn)品版本– 由于 RTC 同一個項目中可能會涉及同一個產(chǎn)品的不同版本的開發(fā)以及缺陷記錄,而一個用戶又有可能會工作于不同的產(chǎn)品版本。
● 環(huán)境 -- 在 RTC 中可以為不同的項目缺陷記錄定義不同的字段,這里可以定義環(huán)境的信息。(如圖3)
# # get all the vsystems associated with a pattern ###### try: fhandle = open(output, 'w') print 'Running ...' end_time = time.time()+(60*duration) |
清單 3. 部署制定的虛擬系統(tǒng)模式
import time, threading, Queue, csv ################################################################# # default parameters # select the performance pattern to deploy #start deploying print '############# test summary #######################' |
實現(xiàn)部分 3:測試執(zhí)行
測試執(zhí)行的時候我們需要調(diào)用 RQM 的命令行執(zhí)行工具 (Command Line Execution Tool),這個工具是跟著 RQM 同時發(fā)布在 Jazz.net 上的,具體下載請看參考資源中提供的鏈接。
RQM 命令行執(zhí)行工具是我們可以方便的執(zhí)行測試,通過 RQM RESTAPI 啟動測試執(zhí)行記錄 (Test Execution Record) 的運行。在運行測試執(zhí)行時需要提供以下信息:
● RQM url – https://hostname:9443/qm
● 用戶名和密碼 -- 使用這個用戶名允許運行相應(yīng)的測試執(zhí)行記錄
● 項目– 測試用例所在的 RQM 中的測試項目
● 測試執(zhí)行記錄的 id
● 測試執(zhí)行記錄關(guān)聯(lián)的腳本的 id
● 執(zhí)行適配器 (Adapter) 的 id
▲ 執(zhí)行適配器是 RQM 提供的用以連接并操作具體測試腳本的功能,常用的適配器包括 Rational Functional Tester、Rational Performance Tester、Rational Build Forge 以及其他更多第三方廠商和開源工具的適配器。用戶也可以自己編寫適配器。
● 執(zhí)行時需要的參數(shù)
通過命令行調(diào)用后執(zhí)行結(jié)果是會輸出到命令行的,也可以直接輸出到文件,用于后續(xù)操作。
實現(xiàn)部分 4:自動化中注意事項
要把整個流程自動化需要用到流程工具,可以用開源的 ant 或者使用 IBM Rational Build Forge。
這里主要介紹幾個重點:
1、測試用例相關(guān)信息獲得
a)缺陷可以通過 RTC 與 RQM 之間的 OSLC 關(guān)聯(lián)關(guān)系連接 RQM 中的測試執(zhí)行結(jié)果 (Test Execution Result),測試執(zhí)行結(jié)果是測試執(zhí)行記錄 (Test Execution Record) 的執(zhí)行結(jié)果。
b)然后我們可以從缺陷中獲得測試執(zhí)行結(jié)果的 url,經(jīng)過分析我們可以獲得 RQM 項目名稱,測試執(zhí)行結(jié)果 id 等信息,用于調(diào)用 RQM 命令行執(zhí)行工具。
2、缺陷驗證環(huán)境信息的傳遞
a)缺陷驗證環(huán)境是我們通過部署虛擬系統(tǒng)模式生成的新的虛擬機,所以 ip、hostname、用戶名和密碼都是新的。而在驗證系列第二篇中提到的 WAS 賣花網(wǎng)站中遇到的缺陷,我們需要傳送新的 url 地址給 RFT 腳本。
b)在調(diào)用 RQM 命令行執(zhí)行工具的時候就需要傳輸參數(shù)
清單 4. RQM 命令行調(diào)用附參數(shù)
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 中接受參數(shù)的腳本如下
清單 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) { //接收參數(shù)的定義 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 命令行執(zhí)行工具也提供了 ant 任務(wù)調(diào)用,方便把執(zhí)行測試這部分集成到自動化的流程中。
實現(xiàn)部分 5:Jazz 插件的開發(fā)
Jazz 插件的開發(fā)與 Eclipse 插件開發(fā)模式是一致的,Jazz 平臺定義了豐富而功能強大的擴展點,用戶可以利用這些擴展點,定義和實現(xiàn)各種定制功能。
首先要搭建擴展開發(fā)環(huán)境,Jazz.net 網(wǎng)站提供了詳細的下載 SDK 鏈接,以及參考文檔。
RTC Server 端服務(wù)的擴展,有關(guān) Jazz Component 開發(fā)詳細資料請查看參考資源中提供的鏈接。Jazz Component 開發(fā)擴展擴展點"com.ibm.team.repository.common.components",定義服務(wù)類接口,類型是 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> |