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