在自動(dòng)化測(cè)試中使用Docker
在構(gòu)建自動(dòng)化測(cè)試實(shí)驗(yàn)臺(tái)時(shí),使用Docker會(huì)非常方便。它在功能性的級(jí)別上添加了一些單元測(cè)試的特性。如果你的應(yīng)用由集群中的幾個(gè)服務(wù)器組件構(gòu)成,你可以用一些容器來(lái)模擬整個(gè)集群。Docker為集群提供了虛擬網(wǎng)絡(luò),在網(wǎng)絡(luò)層面上讓集群中的容器交互。
Docker可以很容易將容器恢復(fù)到一個(gè)已知的狀態(tài)。如果你在Docker容器中運(yùn)行測(cè)試數(shù)據(jù)庫(kù),你可以很輕松地將數(shù)據(jù)庫(kù)恢復(fù)到測(cè)試開發(fā)之前的相同狀態(tài)。這和單元測(cè)試中After方法恢復(fù)環(huán)境類似。
持續(xù)集成服務(wù)器Jenkins已經(jīng)支持啟動(dòng)和停止容器,在使用Docker做自動(dòng)化測(cè)試時(shí)會(huì)比較有用。
使用Docker Compose來(lái)運(yùn)行你需要的容器也是一個(gè)有用的選擇。
Docker還很年輕,使用Docker做測(cè)試自動(dòng)化有時(shí)候需要編寫并不優(yōu)雅的膠水代碼(glue code)。
舉個(gè)簡(jiǎn)單的例子,啟動(dòng)可以交互的一個(gè)數(shù)據(jù)庫(kù)容器和一個(gè)應(yīng)用服務(wù)器容器。啟動(dòng)容器的基本過(guò)程比較簡(jiǎn)單,并且可以通過(guò)shell腳本或者Docker Compose來(lái)完成。但是,由于我們要在已經(jīng)啟動(dòng)的應(yīng)用服務(wù)器上運(yùn)行測(cè)試,如何才能知道它已經(jīng)正常啟動(dòng)了?在WildFly容器的場(chǎng)景下,除了監(jiān)控輸出日志中特定字符串的出現(xiàn)或者輪詢web socket之外,沒有什么明顯方式判斷容器的運(yùn)行狀態(tài)。在任何情況下,這些hack的方式都不甚優(yōu)雅,而且實(shí)現(xiàn)起來(lái)比較耗時(shí)。盡管最終的結(jié)果還是能值回票價(jià)的。