Docker與自動(dòng)化測(cè)試及其測(cè)試實(shí)踐

Docker 與自動(dòng)化測(cè)試

對(duì)于重復(fù)枯燥的手動(dòng)測(cè)試任務(wù),可以考慮將其進(jìn)行自動(dòng)化改造。自動(dòng)化的成本在于自動(dòng)化程序的編寫(xiě)和維護(hù)号醉,而收益在于節(jié)省了手動(dòng)執(zhí)行用例的時(shí)間。簡(jiǎn)而言之辛块,如果收益大于成本畔派,測(cè)試任務(wù)就有價(jià)值自動(dòng)化,否則受益的只是測(cè)試人員的自動(dòng)化技能得到了提升润绵。利用 Docker 的快速部署线椰、環(huán)境共享等特性,可以大大減少自動(dòng)化的成本尘盼,使很多原本沒(méi)有價(jià)值自動(dòng)化的測(cè)試任務(wù)變?yōu)榱擞袃r(jià)值自動(dòng)化的任務(wù)憨愉,大大提升了項(xiàng)目效率烦绳。

那么如果自動(dòng)化測(cè)試已經(jīng)運(yùn)行在了虛擬機(jī)中,是否有必要使用 Docker 技術(shù)將其進(jìn)行改造配紫?這個(gè)就要具體問(wèn)題具體分析了径密。筆者并不贊同將所有測(cè)試任務(wù)一刀切的進(jìn)行容器化改造。如果當(dāng)前虛擬機(jī)已經(jīng)滿(mǎn)足測(cè)試需求躺孝,你就需要評(píng)估一下引入 Docker 進(jìn)行改造所需的成本享扔,其中包含學(xué)習(xí) Docker 技術(shù)所需要的時(shí)間成本。反之植袍,如果虛擬機(jī)無(wú)法滿(mǎn)足當(dāng)前的測(cè)試需求惧眠,可以考慮盡快引入 Docker 進(jìn)行改造。

Docker 的約束

Build, Ship, and Run Any App, Anywhere. 這是 Docker 公司高調(diào)宣稱(chēng)的口號(hào)奋单,即在任何平臺(tái)都可以構(gòu)建锉试、部署、運(yùn)行任何應(yīng)用览濒。然而呆盖,由于 Docker 自身的特點(diǎn),其使用場(chǎng)景有一些約束:

(1) 因?yàn)槿萜髋c主機(jī)共享內(nèi)核贷笛,如果容器中應(yīng)用需要不同的內(nèi)核版本应又,就不得不更換主機(jī)內(nèi)核。但如果主機(jī)內(nèi)核變更后又會(huì)影響到其它容器的運(yùn)行乏苦。變通的方法是將應(yīng)用源碼的編寫(xiě)與內(nèi)核特性解耦株扛。

(2)Docker 使用時(shí)需要 3.10 或以上版本的內(nèi)核,這是最低的限制汇荐。如果你需要使用更高級(jí)的 Docker 特性洞就,如 user namespace,那么還需要更高版本的內(nèi)核掀淘。

(3) 使用“--privileged”選項(xiàng)后可以在容器內(nèi)加載或卸載內(nèi)核模塊旬蟋,但這個(gè)操作會(huì)影響到主機(jī)和其它容器。

(4) 無(wú)法模擬不同平臺(tái)的運(yùn)行環(huán)境革娄,例如不能在 x86 系統(tǒng)中啟動(dòng) arm64 的容器倾贰。

(5) 因?yàn)?Docker 采用了 namespace 的方案來(lái)實(shí)現(xiàn)隔離,而這種隔離屬于軟件隔離拦惋,安全性不高匆浙。不適合安全性高的測(cè)試任務(wù)。

(6) 因?yàn)槟壳皼](méi)有 time namespace 技術(shù)厕妖,修改某個(gè)容器時(shí)間時(shí)就不得不影響到主機(jī)和其它容器首尼。

適用于 Docker 的測(cè)試場(chǎng)景

由于容器與主機(jī)共享內(nèi)核使用,凡是和內(nèi)核無(wú)強(qiáng)相關(guān)的測(cè)試任務(wù)是適合引入 Docker 進(jìn)行改造的,例如源碼編譯測(cè)試饰恕、軟件安裝測(cè)試挠羔、互聯(lián)網(wǎng)應(yīng)用測(cè)試、數(shù)據(jù)庫(kù)測(cè)試等埋嵌。而與內(nèi)核強(qiáng)相關(guān)的測(cè)試任務(wù)是不適合使用 Docker 進(jìn)行改造的破加,如內(nèi)核網(wǎng)絡(luò)模塊測(cè)試、內(nèi)核 namespace 特性測(cè)試等雹嗦。

Docker 測(cè)試實(shí)踐

容器化編譯系統(tǒng)測(cè)試

早期我們將 linux 發(fā)行版安裝到物理機(jī)中進(jìn)行測(cè)試范舀。當(dāng)需要重新進(jìn)行全量測(cè)試時(shí)不得不手動(dòng)還原測(cè)試環(huán)境。之后改用了虛擬機(jī)了罪,雖然能夠通過(guò)自動(dòng)化的方式實(shí)現(xiàn)環(huán)境還原锭环,但虛擬機(jī)的損耗較大,效率不高泊藕。

如果對(duì)軟件測(cè)試辅辩、接口測(cè)試、自動(dòng)化測(cè)試娃圆、性能測(cè)試玫锋、LR腳本開(kāi)發(fā)、面試經(jīng)驗(yàn)交流讼呢。感興趣可以175317069撩鹿,群內(nèi)會(huì)有不定期的發(fā)放免費(fèi)的資料鏈接,這些資料都是從各個(gè)技術(shù)網(wǎng)站搜集悦屏、整理出來(lái)的节沦,如果你有好的學(xué)習(xí)資料可以私聊發(fā)我,我會(huì)注明出處之后分享給大家础爬。

之后我們嘗試將環(huán)境制作成 Docker 鏡像甫贯,同時(shí)進(jìn)行了如下的改進(jìn):

(1) 通過(guò) Docker 的“-v”選項(xiàng),將主機(jī)目錄映射到容器中看蚜,實(shí)現(xiàn)多個(gè)容器共享測(cè)試代碼叫搁。測(cè)試代碼部署時(shí)間從 2 分鐘減少到 10 秒。

(2) 將大粒度的執(zhí)行時(shí)間較長(zhǎng)的用例拆分成為若干個(gè)小用例失乾。

(3) 利用容器并發(fā)執(zhí)行測(cè)試。

(4) 使用 Dockerfile 梳理產(chǎn)品依賴(lài)包和編譯軟件的安裝纬乍。

編譯系統(tǒng)測(cè)試是用戶(hù)態(tài)的測(cè)試碱茁,非常適合使用 Docker 進(jìn)行加速。如果需要針對(duì)某一個(gè) linux 發(fā)行版進(jìn)行測(cè)試仿贬,可以通過(guò) Docker 快速部署的特點(diǎn)纽竣,將所有的資源快速利用起來(lái),從而達(dá)到加速測(cè)試執(zhí)行的目的。

linux 外圍包測(cè)試

外圍包包含動(dòng)態(tài)鏈接庫(kù)文件和常用的命令行工具蜓氨,屬于 linux 操作系統(tǒng)的中間層聋袋,其上運(yùn)行著應(yīng)用程序,其下由 linux 內(nèi)核支撐穴吹。起初的外圍包測(cè)試采用串行執(zhí)行幽勒,效率不高。同時(shí)受到環(huán)境污染的影響港令,容易產(chǎn)生軟件缺陷的誤報(bào)啥容。在改進(jìn)方面,我們首先通過(guò) Dockerfile 基于 rootfs 制作一個(gè) Docker 鏡像顷霹,然后通過(guò) Docker-compose 工具實(shí)現(xiàn)測(cè)試用例的并發(fā)執(zhí)行咪惠。

以下是改進(jìn)前后的對(duì)比。

通過(guò) Docker 進(jìn)行測(cè)試加速的原理

Docker 本身并不會(huì)直接加速測(cè)試執(zhí)行淋淀。在串行執(zhí)行測(cè)試時(shí)遥昧,在容器中執(zhí)行測(cè)試反而會(huì)帶來(lái)約 5% 左右的性能衰減。但我們可以充分利用 Docker 快速部署朵纷、環(huán)境共享等特性炭臭,同時(shí)配合容器云來(lái)快速提供所需的測(cè)試資源,以應(yīng)對(duì)測(cè)試任務(wù)的峰值柴罐。如果忽略環(huán)境部署時(shí)間徽缚,當(dāng)每個(gè)測(cè)試用例粒度無(wú)限小并且提供的測(cè)試資源無(wú)限多時(shí),測(cè)試執(zhí)行所需的時(shí)間也就無(wú)限小革屠。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凿试,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子似芝,更是在濱河造成了極大的恐慌那婉,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件党瓮,死亡現(xiàn)場(chǎng)離奇詭異详炬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)寞奸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)呛谜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人枪萄,你說(shuō)我怎么就攤上這事隐岛。” “怎么了瓷翻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵聚凹,是天一觀的道長(zhǎng)割坠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)妒牙,這世上最難降的妖魔是什么彼哼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮湘今,結(jié)果婚禮上敢朱,老公的妹妹穿的比我還像新娘。我一直安慰自己象浑,他們只是感情好蔫饰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著愉豺,像睡著了一般篓吁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚪拦,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天杖剪,我揣著相機(jī)與錄音,去河邊找鬼驰贷。 笑死盛嘿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的括袒。 我是一名探鬼主播次兆,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼锹锰!你這毒婦竟也來(lái)了芥炭?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恃慧,失蹤者是張志新(化名)和其女友劉穎园蝠,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體痢士,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彪薛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怠蹂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片善延。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖城侧,靈堂內(nèi)的尸體忽然破棺而出易遣,到底是詐尸還是另有隱情,我是刑警寧澤赞庶,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布训挡,位于F島的核電站,受9級(jí)特大地震影響歧强,放射性物質(zhì)發(fā)生泄漏澜薄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一摊册、第九天 我趴在偏房一處隱蔽的房頂上張望肤京。 院中可真熱鬧,春花似錦茅特、人聲如沸忘分。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)妒峦。三九已至,卻和暖如春兵睛,著一層夾襖步出監(jiān)牢的瞬間肯骇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工祖很, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笛丙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓假颇,卻偏偏與公主長(zhǎng)得像胚鸯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笨鸡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容