如果有可用線程,啟動一個測試腳本并為它申請所需要的測試資源
申請測試資源成功,則開始執行測試步驟。否則,等待其他線程釋放資源,重復步驟 4 直至超時退出
最后,收集各個并行測試腳本的結果并形成最終的測試報告
完成
圖 3. 多任務執行流程
使用 STAF Respool 管理測試資源
測試資源的管理包括資源申請和資源的釋放,在本并行測試自動化方案中,我們使用 STAF 提供的 Respool 服務來實現。Respool Service:資源池服務,提供了對于資源池的管理和操作,如查看,創建和刪除操作。它允許用戶控制和管理對資源池中每個條目的獨占訪問。
圖 4. 測試資源管理
向 STAF 資源池申請資源的代碼例子:
public boolean getResource(String nodepool, boolean release){ if(stafhandle!=null){ if(release){ result = stafhandle.submit2( ServerIP, "respool", "request pool " + nodepool + " first timeout " + timeout+" garbagecollect yes"); }else{ result = stafhandle.submit2( ServerIP, "respool", "request pool " + nodepool + " first timeout " + timeout+" garbagecollect no"); } }else{ return false; } if (result.rc != 0) { if(result.rc == 37) { System.out.println( "Timeout ERROR: Cannot get the test node. RC: " + result.rc + ", Result: " + result.resultContext); return false; } }else{ resourcename = result.resultContext.toString(); poolname = nodepool; } return true; } |
向 STAF 資源池釋放資源的代碼例子:
public void releaseResource(){ result = stafhandle.submit2(ServerIP, "respool", "release pool " + poolname + " entry " + resourcename + " force"); try { stafhandle.unRegister(); } catch (STAFException e) { // TODO Auto-generated catch block e.printStackTrace(); } return; } |
監控 STAF ResPool 使用情況
我們也開發了相應的工具監測 STAF Respool 的使用情況,使用該工具用戶可以方便的添加和管理測試資源以及監測測試資源的使用情況。
下圖中顯示了一個正在運行的自動化測試對測試用戶賬號的申請和占用情況。
圖 5. 監控 STAF ResPool(查看大圖)
使用 Selenium 工具做為 test runner
因為 LotusLive iNotes 是基于 Web 的產品,所以我們選取現在流行的 Web 自動化測試工具 Selenium 來執行測試。Selenium 是一個健壯的工具集合,支持跨多平臺的基于 Web 的應用程序的自動化測試的敏捷開發,它是一個開源的輕量級的自動化工具,而且支持多種編程語言,例如 Java,Python 等等。在本自動化測試框架中,我們使用的是 Selenium Remote Control,
小節
該并行的自動化測試框架可以很方便的通過以下步驟升級現有的自動化測試腳本:
修改 test caller,升級到可以支持集中管理腳本的并行測試以及收集測試報告
修改 logger,升級到可以支持每一個運行腳本都有各自的 logger 處理實例,防止最后的測試報告混亂
測試資源管理,升級到可以支持集中管理測試資源,保證測試資源的使用不會產生沖突
我們可以看到,在這個框架中的三個主體部分 STAF ResPool 和 Selenium 可以由用戶任意的替換成適合自己項目使用的工具,只要它們具備相似的功能就可以。
回頁首
并行的自動化測試框架的優勢
圖 6. 測試數據比較
應用并行的自動化測試后的測試數據比較:
并行自動化測試中測試線程數量增加,執行的時間就會大大降低
并行自動化測試中測試線程數量增加,就需要更多測試用戶數量的支持
一個字,快!兩個字,高效!這不僅僅是執行效率上的優勢,也是測試資源的高效利用。對于測試人員來講,可以更專注于新功能的測試,自動化測試覆蓋原有功能的測試并可以頻繁的執行,因為執行的時間已經不是一個重要問題;這對于開發人員來講也是一個好的開始,它們可以使用自動化測試來保證自己的改動沒有引起 regression defect。另外,運行效率的提高也意味著我們可以方便的開展自動化開發來擴大產品的自動化測試覆蓋率,而不用擔心測試腳本的增加所造成的運行效率降低的問題。因為我們可以通過增加硬件測試資源,或者是一些軟件方面的測試資源例如測試的用戶數量來滿足并行自動化測試的需要;這些測試資源都是影響并行的自動化測試的因素,但是同時也會給并行的自動化測試帶來不可估量的執行效率方面的提高。