隨著軟件測(cè)試的快速發(fā)展,自動(dòng)化測(cè)試已經(jīng)成為當(dāng)前的主流技術(shù)。中培《軟件自動(dòng)化測(cè)試與持續(xù)集成最佳實(shí)踐》專家劉老師指出,從使用的基本技術(shù)來說,自動(dòng)化集成測(cè)試和單元測(cè)試在很多方面都很相似。你可以使用相同的測(cè)試運(yùn)行器和構(gòu)建系統(tǒng)的支持。自動(dòng)化集成測(cè)試和單元測(cè)試的主要區(qū)別在于使用了相對(duì)較少的mocking。
當(dāng)一個(gè)單元測(cè)試簡(jiǎn)單地模擬從后端數(shù)據(jù)庫返回的數(shù)據(jù)時(shí),集成測(cè)試則會(huì)使用一個(gè)真實(shí)的數(shù)據(jù)庫來測(cè)試。數(shù)據(jù)庫是一個(gè)你需要的測(cè)試資源類型以及能暴露問題的極好例子。
自動(dòng)化集成測(cè)試可能會(huì)很棘手,在選擇時(shí)需要小心。
假如你在測(cè)試一個(gè)只讀的中間件適配器,例如數(shù)據(jù)庫的SOAP適配器,可能需要使用產(chǎn)品數(shù)據(jù)庫的拷貝來做測(cè)試。數(shù)據(jù)庫的內(nèi)容需要可預(yù)測(cè)和可重復(fù),否則很難去編寫和運(yùn)行測(cè)試。
這里的附加價(jià)值在于我們?cè)谑褂卯a(chǎn)品數(shù)據(jù)的拷貝。它可能包含了從頭開始創(chuàng)建測(cè)試數(shù)據(jù)時(shí)很難預(yù)測(cè)到的數(shù)據(jù)。這和人工測(cè)試的需求一樣。使用自動(dòng)化集成測(cè)試,你需要更多的自動(dòng)化而不是人工測(cè)試。對(duì)于數(shù)據(jù)庫來說,這并不是很復(fù)雜。自動(dòng)化的數(shù)據(jù)庫備份和恢復(fù)是眾所周知的操作。
在構(gòu)建自動(dòng)化測(cè)試實(shí)驗(yàn)臺(tái)時(shí),使用Docker會(huì)非常方便。它在功能性的級(jí)別上添加了一些單元測(cè)試的特性。如果你的應(yīng)用由集群中的幾個(gè)服務(wù)器組件構(gòu)成,你可以用一些容器來模擬整個(gè)集群。Docker為集群提供了虛擬網(wǎng)絡(luò),在網(wǎng)絡(luò)層面上讓集群中的容器交互。
Docker可以很容易將容器恢復(fù)到一個(gè)已知的狀態(tài)。如果你在Docker容器中運(yùn)行測(cè)試數(shù)據(jù)庫,你可以很輕松地將數(shù)據(jù)庫恢復(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來運(yùn)行你需要的容器也是一個(gè)有用的選擇。劉老師指出,Docker還很年輕,使用Docker做測(cè)試自動(dòng)化有時(shí)候需要編寫并不優(yōu)雅的膠水代碼(glue code)。
舉個(gè)簡(jiǎn)單的例子,啟動(dòng)可以交互的一個(gè)數(shù)據(jù)庫容器和一個(gè)應(yīng)用服務(wù)器容器。啟動(dòng)容器的基本過程比較簡(jiǎn)單,并且可以通過shell腳本或者Docker Compose來完成。但是,由于我們要在已經(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)起來比較耗時(shí),盡管這種方式具有一定的實(shí)用價(jià)值!
想了解更多IT資訊,請(qǐng)?jiān)L問中培偉業(yè)官網(wǎng):中培偉業(yè)