隨著軟件測試的快速發展,自動化測試已經成為當前的主流技術。中培《軟件自動化測試與持續集成最佳實踐》專家劉老師指出,從使用的基本技術來說,自動化集成測試和單元測試在很多方面都很相似。你可以使用相同的測試運行器和構建系統的支持。自動化集成測試和單元測試的主要區別在于使用了相對較少的mocking。
當一個單元測試簡單地模擬從后端數據庫返回的數據時,集成測試則會使用一個真實的數據庫來測試。數據庫是一個你需要的測試資源類型以及能暴露問題的極好例子。
自動化集成測試可能會很棘手,在選擇時需要小心。
假如你在測試一個只讀的中間件適配器,例如數據庫的SOAP適配器,可能需要使用產品數據庫的拷貝來做測試。數據庫的內容需要可預測和可重復,否則很難去編寫和運行測試。
這里的附加價值在于我們在使用產品數據的拷貝。它可能包含了從頭開始創建測試數據時很難預測到的數據。這和人工測試的需求一樣。使用自動化集成測試,你需要更多的自動化而不是人工測試。對于數據庫來說,這并不是很復雜。自動化的數據庫備份和恢復是眾所周知的操作。
在構建自動化測試實驗臺時,使用Docker會非常方便。它在功能性的級別上添加了一些單元測試的特性。如果你的應用由集群中的幾個服務器組件構成,你可以用一些容器來模擬整個集群。Docker為集群提供了虛擬網絡,在網絡層面上讓集群中的容器交互。
Docker可以很容易將容器恢復到一個已知的狀態。如果你在Docker容器中運行測試數據庫,你可以很輕松地將數據庫恢復到測試開發之前的相同狀態。這和單元測試中After方法恢復環境類似。
持續集成服務器Jenkins已經支持啟動和停止容器,在使用Docker做自動化測試時會比較有用。
使用Docker Compose來運行你需要的容器也是一個有用的選擇。劉老師指出,Docker還很年輕,使用Docker做測試自動化有時候需要編寫并不優雅的膠水代碼(glue code)。
舉個簡單的例子,啟動可以交互的一個數據庫容器和一個應用服務器容器。啟動容器的基本過程比較簡單,并且可以通過shell腳本或者Docker Compose來完成。但是,由于我們要在已經啟動的應用服務器上運行測試,如何才能知道它已經正常啟動了?在WildFly容器的場景下,除了監控輸出日志中特定字符串的出現或者輪詢web socket之外,沒有什么明顯方式判斷容器的運行狀態。在任何情況下,這些hack的方式都不甚優雅,而且實現起來比較耗時,盡管這種方式具有一定的實用價值!
想了解更多IT資訊,請訪問中培偉業官網:中培偉業