Docker+Jenkins打造自動(dòng)化測(cè)試以及部署升級(jí)環(huán)境

//
Transwarp - 新聞詳情
http://www.transwarp.io/news/detail?id=151

在項(xiàng)目迭代周期有限的情況下浪耘,流程冗長(zhǎng)條件復(fù)雜的升級(jí)測(cè)試無(wú)法再依賴(lài)人工的辦法完成溜在,必須借助自動(dòng)化測(cè)試的工具和方法解決這個(gè)問(wèn)題逐沙。本文將以Transwarp Data Hub(TDH)的自動(dòng)化升級(jí)測(cè)試的架構(gòu)為例,分析應(yīng)如何選擇并系統(tǒng)性的整合不同技術(shù)以合理實(shí)現(xiàn)自動(dòng)化測(cè)試以及部署升級(jí)送悔。

隨著產(chǎn)品發(fā)行版的增多,大量存在于客戶(hù)現(xiàn)場(chǎng)的老版本有待升級(jí)更新,每當(dāng)一個(gè)新版本產(chǎn)品發(fā)布給客戶(hù)前荚板,測(cè)試人員必須保證新的發(fā)行版可以完美支持老版本的升級(jí)凤壁。每一版產(chǎn)品引入的新功能或組件,也需確定不會(huì)和老版本產(chǎn)品既有的功能產(chǎn)生沖突跪另。由此體現(xiàn)了升級(jí)測(cè)試的極度必要性拧抖。通常在對(duì)TDH進(jìn)行版本升級(jí)測(cè)試時(shí),我們的開(kāi)發(fā)人員不僅要考慮到前端界面免绿,還要考慮到后端升級(jí)程序的執(zhí)行唧席。而且為了保證測(cè)試維度的完備性以及便于分析,升級(jí)測(cè)試框架必須保證以下幾點(diǎn):

  1. 自動(dòng)升級(jí)測(cè)試
  2. 模擬用戶(hù)的行為
  3. 穩(wěn)定性保證
  4. 詳細(xì)的測(cè)試報(bào)告
  5. 隨時(shí)查看升級(jí)過(guò)程
    考慮到上述幾項(xiàng)需求嘲驾,我們決定采用Docker + Jenkins再結(jié)合Selenium + VNC Server + Guacamole + Python這種技術(shù)混合型組合構(gòu)建自動(dòng)化升級(jí)測(cè)試環(huán)境淌哟。
    首先請(qǐng)讀者閱讀下面的技術(shù)詳解,簡(jiǎn)單了解這五種相關(guān)工具和技術(shù)的作用辽故。
    技術(shù)詳解
    Docker
    Docker是被廣泛應(yīng)用的一種開(kāi)源容器引擎徒仓,它可以支持程序的快速部署和移植,并具有很好的環(huán)境隔離性誊垢。在本文的例子中掉弛,我們將TDH升級(jí)所需要的OS運(yùn)行環(huán)境——Remote WebDriver 和VNC Server,做在一個(gè)Docker鏡像里喂走,作為testbench殃饿。執(zhí)行TDH升級(jí)測(cè)試前, 只需將TDH的程序部署到對(duì)應(yīng)的testbench容器中即可運(yùn)行。其中VNC Server提供的遠(yuǎn)程桌面服務(wù)允許開(kāi)發(fā)者在Docker中debug測(cè)試中發(fā)現(xiàn)的問(wèn)題芋肠。
    以下是制作鏡像的對(duì)應(yīng)部分的Dockerfile文件內(nèi)容:
    FROM centos7_webtest:latestMAINTAINER transwarp#install jdkRUN rpm -ivh jdk-7u71-linux-x64.rpm#change yum repoADD change_yum.sh /root/RUN sh /root/change_yum.sh && rm -f /root/change_yum.sh#add htmlADD HTMLTestRunner.py /usr/lib/python2.7/site-packages/

Jenkins
Jenkins是一種持續(xù)構(gòu)建工具乎芳,為了方便開(kāi)發(fā)和測(cè)試人員監(jiān)控每日升級(jí)測(cè)試的狀態(tài),我們將TDH升級(jí)測(cè)試按照流程階段和測(cè)試用例做成若干個(gè)參數(shù)化的Jenkins Jobs业栅,通過(guò)Jenkins的計(jì)劃任務(wù)秒咐,啟動(dòng)TDH 升級(jí)測(cè)試。

Selenium
Selenium是一套面向web應(yīng)用的開(kāi)源的測(cè)試輕量級(jí)框架碘裕,具有跨平臺(tái)性的優(yōu)點(diǎn)携取,并獲得了包括Java、Python在內(nèi)的多個(gè)主流編程語(yǔ)言的支持帮孔。Selenium是TDH前端操作的重要工具雷滋,我們通過(guò)Selenium實(shí)現(xiàn)啟停服務(wù),添加配置文兢,安裝LDAP晤斩、Gardian等一系列操作。
下面是Selenium登陸Transwarp-Manager對(duì)應(yīng)的代碼示例姆坚。
from selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesdriver =webdriver.Remote(command_executor='http://remoteIP:port/wd/hub', desired_capabilities=DesiredCapabilities.CHROME)driver.set_page_load_timeout(30)driver.implicitly_wait(30)driver.maximize_window()driver.get("TRANSWARP-MANAGERT-IP:8180")driver.find_element_by_id("userid").clear().send_keys(USER)driver.find_element_by_id("passwd").clear().send_keys(PASSWORD)driver.find_element_by_id("sign-in-button").click()

VNC Server + Guacamole
VNC Server是一種為了滿(mǎn)足分布式用戶(hù)共享資源的需求澳泵,在服務(wù)器上開(kāi)的一項(xiàng)服務(wù)。TDH選擇Guacamole遠(yuǎn)程連接訪(fǎng)問(wèn)VNC Server兼呵。Guacamole是基于HTML 5和JavaScript的VNC Web查看器兔辅。通過(guò)Guacamole網(wǎng)頁(yè)連接VNC Server就可以方便遠(yuǎn)程觀(guān)察TDH升級(jí)狀態(tài)腊敲。


Python
******Pycrypto/Paramiko模塊******

Pycryto和Paramiko是Python中用于遠(yuǎn)程認(rèn)證登錄服務(wù)器的兩個(gè)重要的模塊:Pycrypto用于安全認(rèn)證;Paramik用于登陸遠(yuǎn)程服務(wù)器執(zhí)行命令维苔。TDH版本升級(jí)過(guò)程中會(huì)利用這兩個(gè)模塊遠(yuǎn)程到對(duì)應(yīng)的集群服務(wù)器碰辅,執(zhí)行對(duì)應(yīng)的升級(jí)程序。
******HTML Report******

升級(jí)完成后介时,需要給出詳細(xì)的測(cè)試報(bào)告没宾,比如每個(gè)階段的執(zhí)行時(shí)間、啟動(dòng)時(shí)間沸柔、是否成功等關(guān)鍵信息循衰。由于Python自帶的或者第三方開(kāi)發(fā)的模塊生成測(cè)試報(bào)告基本都是UT級(jí)別的,因此無(wú)法使用現(xiàn)成的模塊勉失,需要自己進(jìn)行開(kāi)發(fā)羹蚣。我們參考Python中對(duì)應(yīng)的模塊HTMLTestRunner對(duì)生成的測(cè)試報(bào)告進(jìn)行二次開(kāi)發(fā)。

****技術(shù)框架****
根據(jù)工具的不同特征乱凿,TDH自動(dòng)化升級(jí)框架為每個(gè)工具安排了不同的處理任務(wù):Docker用于部署用到的程序和環(huán)境;整體的測(cè)試工作由Jenkins負(fù)責(zé)調(diào)度咽弦;Selenium負(fù)責(zé)前端界面方面測(cè)試徒蟆;Guacamole作為遠(yuǎn)程桌面客戶(hù)端連接VNC Server;利用Python支持Selenium和shell腳本以及實(shí)現(xiàn)遠(yuǎn)程服務(wù)器的加密認(rèn)證連接型型。根據(jù)上述任務(wù)分配段审,我們?cè)O(shè)計(jì)了TDH自動(dòng)化升級(jí)測(cè)試的流程,并為之構(gòu)建了如下框架:


  1. 將TDH升級(jí)做成一個(gè)Jenkins Job闹蒜,需要用戶(hù)事先配置好升級(jí)對(duì)應(yīng)的集群寺枉,自動(dòng)升級(jí)需要的客戶(hù)端代碼地址、Docker Image配置等绷落。啟動(dòng)該Job即可進(jìn)行TDH升級(jí)任務(wù)姥闪,可以是手動(dòng)啟動(dòng),也可以定時(shí)觸發(fā). 而且還可以通過(guò)Jenkins界面來(lái)觀(guān)察對(duì)應(yīng)Job的狀態(tài)砌烁。
  2. 啟動(dòng)Jenkins Job進(jìn)行TDH升級(jí)之后筐喳,Jenkins會(huì)通過(guò)事先做好的Docker 鏡像啟動(dòng)一個(gè)Container,該Container包含客戶(hù)端運(yùn)行的所有環(huán)境函喉。
  3. Container啟動(dòng)之后會(huì)從Git/SVN 上checkout對(duì)應(yīng)的自動(dòng)化升級(jí)需要的客戶(hù)端代碼避归。
  4. 運(yùn)行Container中的客戶(hù)端代碼,開(kāi)始自動(dòng)化升級(jí)管呵,首先會(huì)發(fā)送HTTP Request去連接遠(yuǎn)端的Selenium WebDriver梳毙。然后利用SeleniumWebDriver去打開(kāi)TDH需要升級(jí)的管理界面,進(jìn)行前端操作捐下。然后TDH客戶(hù)端程序也會(huì)進(jìn)行后端升級(jí)账锹,遠(yuǎn)程到對(duì)應(yīng)需要升級(jí)的集群上運(yùn)行對(duì)應(yīng)的升級(jí)腳本冠跷,監(jiān)聽(tīng)是否升級(jí)成功信號(hào)噪窘。
  5. Selenium WebDriver對(duì)應(yīng)的服務(wù)器(Docker Container)需打開(kāi)VNC Server服務(wù),客戶(hù)端可以通過(guò)VNC Viewer查看前端界面升級(jí)狀況。這里的VNC Viewer使用的就是Guacamole榨乎。
  6. Jenkins會(huì)獲取到客戶(hù)端程序運(yùn)行時(shí)詳細(xì)的日志以及對(duì)應(yīng)的升級(jí)報(bào)告,客戶(hù)端通過(guò)對(duì)應(yīng)的日志和升級(jí)報(bào)告獲取到每個(gè)升級(jí)步驟的詳細(xì)信息鸭限。

實(shí)例詳解
下面以TDH4.3.5升級(jí)到4.6 為例闰蚕,具體說(shuō)明開(kāi)發(fā)測(cè)試人員執(zhí)行TDH自動(dòng)化升級(jí)測(cè)試時(shí)的操作。
第一步:創(chuàng)建一個(gè)Jenkins Job并配置以下參數(shù)懂从。
manager_ip:Transwarp-Manager對(duì)應(yīng)的ip
username:Transwarp-Manager對(duì)應(yīng)服務(wù)器登陸賬號(hào)
password:Transwarp-Manager對(duì)應(yīng)服務(wù)器登陸賬號(hào)對(duì)應(yīng)的密碼
upgrade_tar_location:升級(jí)腳本對(duì)應(yīng)的位置
upgrade_latest_install_tar:需要升級(jí)到對(duì)應(yīng)的TDH的對(duì)應(yīng)的tar包位置
new_version:升級(jí)到的TDH 版本
upgrade_mode:選擇升級(jí)安全模式
service_add:升級(jí)結(jié)束后需要添加的服務(wù)

第二步:?jiǎn)?dòng)Jenkins Job授段,準(zhǔn)備進(jìn)行TDH升級(jí)。
第三步:?jiǎn)?dòng)一個(gè)Container番甩,從Git上拉取對(duì)應(yīng)代碼侵贵,然后開(kāi)始執(zhí)行升級(jí)程序。
第四步:通過(guò)Selenium模擬鼠標(biāo)點(diǎn)擊關(guān)閉所有的服務(wù)(Zookeeper除外)缘薛,如下圖窍育。



第五步:遠(yuǎn)程到升級(jí)所對(duì)應(yīng)的集群,配置升級(jí)腳本并執(zhí)行宴胧,等待升級(jí)結(jié)果漱抓。
第六步:升級(jí)完成后,通過(guò)Selenium模擬鼠標(biāo)點(diǎn)擊輸入新的License恕齐,更新集群的License乞娄。
第七步:安裝并啟動(dòng)Guardian服務(wù)。界面上的安裝過(guò)程如下圖显歧。



第八步:根據(jù)客戶(hù)升級(jí)需要在如下界面上添加對(duì)應(yīng)的組件仪或。

第九步:最后獲得對(duì)應(yīng)的如下升級(jí)報(bào)告。

******總結(jié)******
通過(guò)產(chǎn)品升級(jí)測(cè)試的自動(dòng)化士骤,我們省去了大量的人工操作和重復(fù)性操作范删,提高了TDH升級(jí)測(cè)試可靠性,結(jié)構(gòu)化的測(cè)試報(bào)告幫助測(cè)試和開(kāi)發(fā)人員迅速定位到升級(jí)過(guò)程中發(fā)生的問(wèn)題敦间。自動(dòng)化把之前需要2~3天才能完成的升級(jí)測(cè)試縮短到了一天以?xún)?nèi)瓶逃,大大提高了測(cè)試效率,為今后多產(chǎn)品線(xiàn)并行發(fā)布打下了堅(jiān)實(shí)的基礎(chǔ)廓块。
在整個(gè)的自動(dòng)化測(cè)試框架中厢绝,使用Docker技術(shù)是極大提高我們測(cè)試效率的關(guān)鍵。Docker保證了開(kāi)發(fā)環(huán)境到生產(chǎn)環(huán)境的一致性带猴,無(wú)論對(duì)于什么產(chǎn)品昔汉,在該框架下,開(kāi)發(fā)和測(cè)試者只要提供相應(yīng)的鏡像和程序就可以按照模板跑自動(dòng)化任務(wù)。開(kāi)發(fā)人員能夠任意時(shí)間點(diǎn)對(duì)指定代碼或功能進(jìn)行測(cè)試靶病,盡早發(fā)現(xiàn)錯(cuò)誤以降低試錯(cuò)成本会通。在我們的實(shí)際開(kāi)發(fā)中,任何一個(gè)代碼的提交都經(jīng)過(guò)整套測(cè)試流程娄周,從而縮短產(chǎn)品開(kāi)發(fā)周期中開(kāi)發(fā)和測(cè)試之間的依賴(lài)鏈涕侈,有效提高產(chǎn)品迭代速度。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末煤辨,一起剝皮案震驚了整個(gè)濱河市裳涛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌众辨,老刑警劉巖端三,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鹃彻,居然都是意外死亡郊闯,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)蛛株,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)团赁,“玉大人,你說(shuō)我怎么就攤上這事泳挥∪蝗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵屉符,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我锹引,道長(zhǎng)矗钟,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任嫌变,我火速辦了婚禮吨艇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腾啥。我一直安慰自己东涡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布倘待。 她就那樣靜靜地躺著疮跑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凸舵。 梳的紋絲不亂的頭發(fā)上祖娘,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音啊奄,去河邊找鬼渐苏。 笑死掀潮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的琼富。 我是一名探鬼主播仪吧,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鞠眉!你這毒婦竟也來(lái)了薯鼠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凡蚜,失蹤者是張志新(化名)和其女友劉穎人断,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體朝蜘,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恶迈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谱醇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暇仲。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖副渴,靈堂內(nèi)的尸體忽然破棺而出奈附,到底是詐尸還是另有隱情,我是刑警寧澤煮剧,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布斥滤,位于F島的核電站,受9級(jí)特大地震影響勉盅,放射性物質(zhì)發(fā)生泄漏佑颇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一草娜、第九天 我趴在偏房一處隱蔽的房頂上張望挑胸。 院中可真熱鬧,春花似錦宰闰、人聲如沸茬贵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)解藻。三九已至,卻和暖如春咐容,著一層夾襖步出監(jiān)牢的瞬間舆逃,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留路狮,地道東北人虫啥。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像奄妨,于是被迫代替她去往敵國(guó)和親涂籽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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