本文的意圖是通過一個新的視角顛覆傳統理念上的串行自動化測試方式,向讀者詳細介紹了利用 STAF 以及 Selenium 實現的并行式的自動化測試框架,以及為整個項目所帶來的優勢 。
Agile 中的自動化測試
Agile 是一種以人為核心、迭代、循序漸進的開發方法。它的目標就是盡早、持續地交付有價值的軟件。隨著 Agile 越發成熟,越來越多的團隊開始嘗試采用這種開發模式。
在 Agile 中,軟件項目的構建被切分成多個子項目,各個子項目的成果都經過測試,具備集成和可運行的特征。這意味著開發團隊的開發周期大大縮短,并且測試人員需要在有限的時間之內完成測試計劃并提供足夠多的回歸測試保證交付產品的產品質量。依賴手工測試完成充分的測試很不現實,GUI 自動化測試此時能發揮重要的作用。通過在每個迭代中頻繁的執行自動化腳本來保證產品有足夠的回歸測試。
GUI 自動化測試腳本完全模擬手工操作完成功能測試,單個腳本的運行時間遠遠多于 API 測試。當腳本越來越多的時候,傳統的串行腳本運行消耗的時間相應的增加,便不能達到快速響應的目的。如何能夠縮短整個 testsuite 的運行時間以盡快得到測試結果?并行自動化測試需求顯而易見。
在本文中,我們將詳細介紹 LotusLive iNotes 并行自動化測試框架的實踐,通過充分利用各種測試資源,并有效的提高自動化運行效率以滿足快速交付的要求。
回頁首
并行的自動化測試框架的誕生
在傳統的情況下,我們對腳本的并行運行通常是:
把需要運行的整個自動化測試 testsuite 拆分成幾塊小的 testsuite
每塊小的 testsuite 提供不同的測試用戶數據(在 Lotuslive iNotes 中指不同的測試用戶)
每塊小的 testsuite 分別部署到不同的自動化測試環境上運行
我們可以看到在這種方式下,總體運行時間的長短取決于需要最長時間的 testsuite,那么我們在拆分 testsuite 的時候需要了解每個腳本運行的時間。其次,每個小的 testsuite 必須提供最大的用戶數量。再次,由于用戶數量的限制,我們在劃分 testsuite 的時候有可能不會使用到所有的自動化測試資源,測試資源空閑的時間比較多,利用不充分。最后,每個 testsuite 最后返回的結果需要進一步地分析統計才能在最終的測試報告中使用。有沒有辦法能夠既實現并行又能最充分地利用自動化測試資源并且生成一個完整的測試報告呢?我們的解決方案如下:
一個 testsuite,多線程運行腳本。TestCaller 會將 testsuite 中所有要運行的自動化測試腳本,按照順序多線程并發啟動。
自動化資源的高效利用。單個腳本啟動后請求運行所需要的自動化資源,在完成時釋放掉所有的資源。測試資源包括但不限于測試機(物理機或虛機)信息,測試用戶帳號信息等。
測試執行工具,實際執行 GUI 自動化測試。在 LotusLive iNotes 中使用的是 selenium。各項目可以根據需要選擇合適自己的工具。
回頁首
并行的自動化測試方案的實現
LotusLive iNotes 為一款在線網絡電子郵件服務,其功能涵蓋電子郵件、行程表、聯絡人名單、多層次管理等等。根據不同的角色,用戶可以使用不同的功能。
下圖展示了完整的 LotusLive iNotes 自動化測試框架。并行的自動化測試(以下稱 Automation Solution)屬于其中的一部分。對于 Automation Solution 之外的其他工具,讀者可以根據自己項目的實際情況選擇其他產品
圖 1. 拓撲結構(查看大圖)
上圖中, Lotus Automator 做為啟動和管理自動化測試任務的工具,并管理所有使用的測試資源(包括用戶資源和自動化測試環境資源)。終端用戶(End Users)首先向 Lotus Automator 提交一個請求(其中包含了需要運行的一系列腳本), 然后 Lotus Automator 給 Automation Solution 發送一個測試任務。Automation Solution 在收到任務之后,根據預估計的最大線程數(由用戶數量總數和測試環境資源總數決定),依次啟動多個腳本。腳本啟動后從資源池中申請所需要的測試環境以及用戶賬號等測試資源(注 : 本方案中使用 Staf 的 Respool 服務統一管理資源);申請到必要的資源后,腳本會執行實際的測試步驟。單個腳本運行完成時,會釋放掉所有的資源并由 Automation Solution 實時把結果加入報告中。整個過程對于終端用戶都是透明的,用戶不需要關心自己使用到了具體哪個資源以及這些資源的實時占用情況。
下面我們看一下 Automation Solution 的具體實現細節:
圖 2. 框架結構(查看大圖)
Parallel Caller,如上圖,它是本自動化測試框架的核心部分,負責啟動和管理并行的自動化測試,并收集和生成最后的測試報告。
STAF ResPool 服務,STAF/STAX 是由 IBM 開發的自動化測試運行環境,由于其跨平臺和擴展性強的特點,在各種測試工作中被越來越多的使用。在本自動化測試框架中我們只使用到它其中的 Respool 服務,用來管理測試資源的申請和釋放。
Selenium:Selenium 是 ThroughtWorks 公司一個強大的開源 Web 功能測試工具系列,包括 selenium-IDE、selenium-RC、selenium-Webdriver 以及 selenium-Grid。在本自動化測試框架中我們可以靈活組合應用到其中的 selenium-RC、selenium-Webdriver 和 selenium-Grid。
多任務支持
該自動化解決方案支持并行的自動化測試,并且能夠高效的使用測試資源以在最快的速度下完成自動化測試任務。在這個自動化測試框架中,因為啟動的最大線程數和各種測試資源的數量都是有關聯的,我們把線程池的線程數做成了可配置的,這樣我們就可以根據測試資源數量來靈活控制并行測試的線程數。
從下面的流程圖中我們可以看到該解決方案的工作原理:
開始測試
讀取配置文件,創建一個線程池