本系列文章適用于需要為測試團隊尋找測試過程管理解決方案的測試設(shè)計、測試管理人員。目前,開源理念在國內(nèi)外越來越深入人心,開源軟件大大推動了軟件研發(fā)行業(yè)的快速發(fā)展。TestLink 作為軟件測試管理類開源軟件中的佼佼者,在中小型的軟件測試項目組中得到了普遍應(yīng)用,項目組的測試效率得到了很大的提升。本文作為使用 TestLink 管理軟件測試過程系列文章的第二部分,主要介紹如何使用該工具管理軟件自動化測試過程。首先探討設(shè)計自動化測試框架時需要考慮的幾個關(guān)鍵點,接著介紹基于 TestLink 的自動化測試解決方案。后,詳細介紹了基于 TestLink 的自動化測試解決方案的核心實現(xiàn)技術(shù),即如何通過編程的方式自動化的從測試計劃中獲取測試用例信息、如何上傳、下載、執(zhí)行測試用例腳本文件和如何回傳測試結(jié)果信息到 TestLink 等。本系列文章的第一部分已對如何使用 TestLink 管理軟件功能測試過程進行介紹。
首先,探討一下設(shè)計自動化測試框架時,需要慎重考慮的幾個關(guān)鍵設(shè)計點。
設(shè)計自動化測試框架的關(guān)鍵點
在設(shè)計自動化測試框架時,測試架構(gòu)設(shè)計師需要考慮很多關(guān)鍵設(shè)計點,這些關(guān)鍵點決定著測試框架的成敗。本文中,我們主要關(guān)注以下三點:如何維護測試用例腳本文件、如何匯總展示測試結(jié)果統(tǒng)計報表和自動化測試框架如何與其他研發(fā)管理平臺的集成。
如何維護自動化測試腳本文件是需要考慮的重要關(guān)鍵點之一。從實際自動化測試項目來看,維護自動化測試用例腳本文件的方式主要有以下兩種:
文件系統(tǒng)
使用自動化測試工具錄制、編寫完畢自動化測試腳本,自動化測試工具會把腳本文件維護在本地文件夾。為了在測試團隊之間共享,會進一步把腳本文件維護在服務(wù)器共享文件系統(tǒng)上,甚至?xí)S護在 FTP 服務(wù)器。在執(zhí)行那些腳本文件之前,需要預(yù)先復(fù)制那些腳本文件到執(zhí)行環(huán)境。比如:自動化腳本存儲在服務(wù)器 A,如果計劃在服務(wù)器 B 和服務(wù)器 C 上分別運行不同的腳本。一般的做法是:先將相應(yīng)的腳本文件手工從服務(wù)器 A 分別復(fù)制到服務(wù)器 B 和服務(wù)器 C,然后再在服務(wù)器 B 和服務(wù)器 C 上分別運行自動化測試。如果還有更多的服務(wù)器需要運行腳本,采用類似的方法復(fù)制,運行即可。除了手工干預(yù),編寫 DOS 批處理腳本、Shell 腳本或者編程等自動完成復(fù)制,會更加有效率。
版本配置管理軟件 SVN 等
使用版本配置管理軟件 SVN 管理自動化測試腳本文件,比使用服務(wù)器文件系統(tǒng)管理更加靈活?梢猿浞掷 SVN 的版本控制特性,維護腳本文件的多個版本;還可以利用 SVN 的權(quán)限設(shè)置特性,為測試套件設(shè)置訪問權(quán)限。需要執(zhí)行自動化測試的時候,手工檢出腳本,或者編寫腳本自動化檢出。
上面所描述的維護自動化測試腳本文件的兩種方式有很多局限,比如,測試用例文檔和測試用例腳本文件分隔開來,無法實現(xiàn)一一對應(yīng)。查看腳本文件時,需要去別處查找測試用例文檔。再比如,使用上述兩種方式維護自動化測試用例腳本文件,需要花費很多精力去設(shè)計腳本維護模塊與自動化測試框架其他功能模塊單元的集成。本文會分享一種使用 TestLink 維護自動化測試腳本文件的解決方案,通過 Web 方式在線訪問存取測試用例腳本文件,而且測試用例和測試腳本很容易一一對應(yīng),在同一個頁面實現(xiàn)對兩者的訪問。TestLink 的豐富功能模塊,版本管理、權(quán)限設(shè)置、結(jié)果報表等功能模塊都可以為自動化測試框架所復(fù)用。
一個用戶體驗良好的測試框架必須擁有一個良好的匯總展示測試結(jié)果統(tǒng)計報表的設(shè)計與實現(xiàn)。目前流行的自動化測試工具通常會把測試執(zhí)行結(jié)果保存在測試工具所運行的服務(wù)器上。如果多臺機器同時運行,會產(chǎn)生不同的分散結(jié)果,這會遇到結(jié)果查詢與匯總的問題。如果腳本執(zhí)行結(jié)果分散在不同的機器上,需要復(fù)制到同一個服務(wù)器上進行匯總;由于不同的測試框架所產(chǎn)生的測試結(jié)果數(shù)據(jù)格式不統(tǒng)一,需要進行提取與分析;結(jié)果數(shù)據(jù)解析匯總后又會遇到統(tǒng)一管理維護與展示問題;測試結(jié)果也無法實時更新,不能滿足用戶實時查詢等問題。為了解決這些問題,在設(shè)計自動化測試框架時,不得不花費時間與精力額外設(shè)計與開發(fā)測試結(jié)果匯總解析與展示模塊,用于向測試管理人員與執(zhí)行人員展示測試結(jié)果報表數(shù)據(jù)。
設(shè)計的測試框架時,還不得不考慮自動化測試框架如何與其他研發(fā)管理平臺的集成。目前大多數(shù)測試團隊的自動化測試框架,很難與其他研發(fā)測試管理平臺進行數(shù)據(jù)共享與同步,比如:自動化測試執(zhí)行完成后,其自動化腳本所覆蓋的測試用例的執(zhí)行結(jié)果信息,仍然需要在測試用例管理平臺上通過手工標記 Pass、Failed、NotRun 等進行變更;同樣對缺陷管理平臺也是如此,有 Failed 的測試用例,仍然需要手工在缺陷管理平臺中填入缺陷信息,而不能自動同步到缺陷管理平臺中去。本文提出的基于 TestLink 的自動化測試解決方案可以自動回傳自動化執(zhí)行結(jié)果到 TestLink 服務(wù)器,并能與第三方開源缺陷管理平臺進行良好的集成。
接下來,讓我們一起探討一下把測試框架與 TestLink 進行集成的解決方案。該方案的顯著特征為:使用 TestLink 的測試用例附件功能模塊來維護自動化測試腳本文件,利用 TestLink 的測試結(jié)果報表功能模塊來匯總展示自動化測試執(zhí)行結(jié)果。通過擴展,自動化實現(xiàn) TestLink 與第三方開源缺陷平臺的進行集成。
基于 Testlink 的自動化測試解決方案
針對上文提到的測試框架設(shè)計關(guān)鍵點,在開發(fā)自動化測試框架時,基于 TestLink 進行二次開發(fā)是個很的解決方案,它具有如下優(yōu)勢:
測試過程管理平臺的統(tǒng)一,功能測試和自動化測試使用統(tǒng)一的平臺
使用統(tǒng)一的平臺,可以避免測試工作復(fù)雜化。對于現(xiàn)有的在 TestLink 中維護的功能測試用例,如果需要執(zhí)行自動化測試,很容易將其轉(zhuǎn)化為自動化測試用例。在測試規(guī)約 Test Specification 頁面,選擇測試用例,編輯其執(zhí)行類型 Execution Type, 由手工類型 Manual 改成自動化執(zhí)行類型 Automated,并上傳該用例的自動化測試腳本文件作為附件即可。
可以充分利用 TestLink 的現(xiàn)有特性對自動化測試用例進行管理
比如,可以使用 TestLink 的版本管理特性,維護自動化測試用例的不同版本;可以使用 TestLink 的結(jié)果報表特性來展示自動化測試執(zhí)行的結(jié)果報表。還通過擴展,借助 SOAP、REST、XML-RPC 接口,可以與第三方開源缺陷管理工具、項目管理工具進行集成,比如 Bugzilla、MantisBT、JIRA 等等。
圖 1 是使用 TestLink 管理自動化測試過程的流程圖,它包括自動化用例維護和自動化用例執(zhí)行兩部分。自動化測試用例維護部分的流程圖包括:
對 TestLink 上的功能測試用例做規(guī)劃,決定哪些應(yīng)該被自動化執(zhí)行。編輯其執(zhí)行類型,改為自動化測試用例。
編寫自動化測試用例的腳本。腳本文件的編寫依賴于自動化測試工具,在本文中,自動化測試用例腳本文件是業(yè)界流行的基于 XML 格式的文件,該腳本文件可以被基于 Selenium 開發(fā)的自動化測試框架識別,關(guān)于該框架請參考 IBM DeveloperWorks 文章《使用 XML 維護 Selenium 自動化測試腳本》。
自動化測試用例腳本上傳。上傳自動化測試用例腳本文件到測試用例的附件部分,可以使用 TestLink 來維護自動化測試用例的腳本文件。
完成全部的自動化用例腳本的編寫,并把腳本文件上傳到 TestLink 自動化測試用例的附件部分。
創(chuàng)建測試計劃,把自動化用例添加到測試計劃中,完成測試用例的維護。TestLink 也提供了為測試用例設(shè)置執(zhí)行順序的特性,讀者們可以根據(jù)自己項目組的實際情況進行設(shè)置。
自動化用例執(zhí)行部分的流程包括:
選取測試計劃、維護構(gòu)建信息,獲取要執(zhí)行的測試用例信息。
在 TestLink 中,測試用例的執(zhí)行是為測試用例標記測試結(jié)果信息,包括是否執(zhí)行通過,額外的描述信息等。在執(zhí)行之前,需要設(shè)置執(zhí)行依賴的版本構(gòu)建信息。在 TestLink 管理自動化測試時,需要首先通過 TestLink 的測試計劃信息,自動化的獲取該測試計劃包含的測試用例信息,進而獲取測試用例的腳本文件信息。
下載測試用例的腳本文件到本地。
正如上文所述,在 TestLink 中,測試用例的執(zhí)行僅僅是標記測試結(jié)果信息。測試腳本文件的具體執(zhí)行需要依賴第三方自動化測試工具。需要預(yù)先把測試用例的測試腳本文件下載到本地以供自動化測試工具自動調(diào)用執(zhí)行。
執(zhí)行下載到本地的測試用例腳本文件。
把下載到本地的測試用例腳本文件位置作為參數(shù)傳遞給第三方自動化測試工具,完成自動化測試用例的具體執(zhí)行任務(wù)。執(zhí)行完畢,生成測試結(jié)果信息。根據(jù)項目組使用的不同第三方自動化測試工具,靈活處理該部分,本文不再贅述。
完成測試計劃下包含的全部自動化用例腳本的下載與執(zhí)行,生成測試結(jié)果信息。
向 TestLink 回傳測試用例的執(zhí)行結(jié)果。通過編程,自動化地完成標記測試用例的結(jié)果。完成該部分,可以利用 TestLink 的結(jié)果報表模塊查詢分析測試結(jié)果。
圖 1. 與 TestLink 集成的自動化測試流程圖
接下來,展開討論基于 TestLink 的自動化測試解決方案的核心技術(shù)實現(xiàn)。為讀者們講述如何通過編程調(diào)用 TestLink 提供的 XML-RPC 接口,實現(xiàn)自動化從測試計劃中獲取測試用例信息,測試用例腳本文件的上次與下載,回傳用例的執(zhí)行結(jié)果等。
從測試計劃中獲取測試用例信息
測試計劃 TestPlan 是使用 TestLink 管理自動化測試過程的切入點,通過指定測試計劃的名稱作為參數(shù),編寫代碼自動化獲取測試用例的信息,進而獲取測試用例的腳本文件信息并完成腳本文件的執(zhí)行。本部分介紹如何通過編程從測試計劃中獲取測試用例信息。本文使用第三方 Java 程序 TestLink Java API 請參考本系列的第一部分。
在調(diào)用 TestLink Java API 之前,需要先實例化 TestLinkAPI 實例對象,代碼清單如下。關(guān)于如何獲取個人訪問密鑰 devKey ,請參考本系列文章的第一部分。
清單 1. 獲取 TestLinkAPI 實例
public class APIObject {
private static Logger logger = Logger.getLogger(APIObject.class);
private static TestLinkAPI api = null;
public static TestLinkAPI getAPI() {
if (null == api) {
String url = "http://localhost/testlink/lib/api/xmlrpc.php";
String devKey = "92b9cc5fc38e1ebde8813ff219ce5a07";
logger.debug("URL=" + url);
logger.debug("devKey=" + devKey);
try {
api = new TestLinkAPI(new URL(url), devKey);
} catch (TestLinkAPIException te) {
logger.error(te.getMessage(), te);
} catch (MalformedURLException mue) {
logger.error(mue.getMessage(), mue);
}
}
return api;
}
}
借助上述實例化 api 對象,接著可以獲取測試計劃中的測試用例信息。使用測試計劃獲取測試用例信息的代碼清單如下。需要指定的參數(shù)為測試項目的名稱和測試計劃的名稱,返回的是測試用例數(shù)組。。在調(diào)用 getTestCasesForTestPlan() 方法時,只使用了執(zhí)行類型 ExecutionType.AUTOMATED 對返回的測試用例數(shù)組進行過濾,可以根據(jù)項目組情況,添加更多的過濾條件。
清單 2. 獲取測試用例信息
String planName="kenneth 測試計劃 ";
String projectName= " 測試演示 ";
TestLinkAPI api = APIObject.getAPI();
TestPlan tl = api.getTestPlanByName(planName,projectName);
TestCase[] tcs=api.getTestCasesForTestPlan(tl.getId(), null, null,null,null,null,
null,null,ExecutionType.AUTOMATED,null,null);
for(TestCase tc:tcs){
logger.debug(tc.toString());
}
測試腳本上傳
使用 TestLink 管理自動化測試腳本的優(yōu)勢之一是,很容易復(fù)用維護在 TestLink 上的功能自動化測試用例。自動化測試團隊負責(zé)對現(xiàn)有的測試用例進行分析,劃定需要作為自動化測試執(zhí)行的用例部分。編寫自動化測試用例腳本,并上傳到相應(yīng)的測試用例的附件部分。這樣自動化測試與其相應(yīng)的自動化測試腳本文件可以一一對應(yīng)起來。編寫完畢自動化測試腳本后,訪問 Testlink 站點,點擊主頁的 Test Specification 鏈接,導(dǎo)航到相應(yīng)的測試用例節(jié)點上,雙擊定位到的用例,可以進入用例編輯頁面。手工上傳附件非常簡單,如圖 2 所示。上傳之后,顯示附件的標題,附件的文件名稱,文件大小,文件的 MIME 類型和附件的上傳日期等。點擊附件標題超鏈接可以下載附件到本地。
圖 2. 手工上傳附件到測試用例
除了手工上傳測試用例腳本文件外,還可以通過類似下面的編程代碼來實現(xiàn)同樣的功能。示例代碼如清單 1 所示。需要提供的參數(shù)為測試用例對象 TestCase tc,上傳文件的本地文件路徑 file,上傳附件的標題 title,上傳附件的描述信息 desc,附件的文件名字 fileName 和上傳附件的文件 MIME 類型。對于 XML 文件,文件的類型為 text/xml。調(diào)用清單 3 中的方法即可完成附件的上傳,代碼實現(xiàn)也非常簡單。首先,讀取本地腳本文件轉(zhuǎn)換為字節(jié)數(shù)組 byteArray,然后對該字節(jié)數(shù)組進行 Base64 編碼并轉(zhuǎn)換為字符串類型的 fileContent。后,調(diào)用 TestLinkAPI 的 uploadTestCaseAttachment() 方法完成附件的上傳。代碼中使用到了 Commons IO 開源類庫文件中的 FileUitls 類。