在用Python做自動(dòng)化測(cè)試時(shí),我們寫(xiě)好代碼,然后需要執(zhí)行才能得到測(cè)試報(bào)告,這時(shí)我們可以通過(guò) Jenkins 來(lái)進(jìn)一步完成自動(dòng)化工作。借助Jenkins,我們可以結(jié)合 Git/SVN 自動(dòng)拉取代碼,通過(guò)設(shè)置定時(shí)構(gòu)建實(shí)現(xiàn)自動(dòng)觸發(fā)腳本執(zhí)行,得到測(cè)試報(bào)告,最后還可以配置發(fā)送郵件等。今天我們就來(lái)分享下,如何結(jié)合 Git自動(dòng)拉取代碼,通過(guò)構(gòu)建來(lái)自動(dòng)執(zhí)行python腳本輸出測(cè)試報(bào)告。
Jenkins是開(kāi)源的,使用JAVA編寫(xiě)的持續(xù)集成工具。需要安裝JDK,如果已經(jīng)安裝了JDK可以跳過(guò)該步驟。
1. 安裝JDK
官網(wǎng)下載 JDK
將下載好的壓縮包放在linux上
然后解壓Java到相應(yīng)目錄:
輸入命令:tar -zxvf jdk-11.0.8_linux-x64_bin.tar.gz /home/java
如果提示沒(méi)有tar命令,輸入yum install -y tar,先安裝tar
編輯環(huán)境變量,在/etc/profile文件中添加環(huán)境變量:
輸入命令:vim /etc/profile
在文件最后添加內(nèi)容如下,然后保存:
JAVA_HOME=/home/java/jdk-11.0.8
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export JRE_HOME
export PATH
export CLASSPATH
輸入命令source /etc/profile,刷新環(huán)境變量配置文件使其立刻生效
到此,JDK已經(jīng)安裝完成。輸入java -version查看是否安裝成功,出現(xiàn)如下圖即安裝成功。
PS:建議建一個(gè)Java的超鏈接。建立之后默認(rèn)情況下從/usr/bin/java路徑使用Java,yum安裝的時(shí)候,這個(gè)鏈接會(huì)自動(dòng)創(chuàng)建。
輸入命令ln -s /home/java/jdk-11.0.8/bin/java /usr/bin/java
2. 安裝Jenkins
官網(wǎng):https://www.jenkins.io/download/
選擇對(duì)應(yīng)的操作系統(tǒng)或者使用yum方式安裝,這里我使用的是yum,因?yàn)楸容^方便:
yum的repos中默認(rèn)是沒(méi)有Jenkins的,所以我們需要先將Jenkins存儲(chǔ)庫(kù)添加到y(tǒng)um repos中。
點(diǎn)擊官網(wǎng)中【centos/Fedora/Red Hat】系統(tǒng),然后將命令復(fù)制粘貼到Linux系統(tǒng)中。
之后就可以看到系統(tǒng)開(kāi)始自動(dòng)下載安裝。若出現(xiàn)提示是否下載輸入:y并按回車(chē)。耐心等待安裝完成。
啟動(dòng)Jenkins,命令:service jenkins start,出現(xiàn)ok表示Jenkins啟動(dòng)成功。
在瀏覽器輸入ip:8080進(jìn)入Jenkins登錄頁(yè)面,輸入密碼。至此,Jenkins安裝完成。
3. Job配置
新建一個(gè)自由風(fēng)格的項(xiàng)目
進(jìn)入工程配置頁(yè)面,在源碼管理下,選擇Git:
如果源碼管理中沒(méi)有Git,說(shuō)明你沒(méi)有安裝Git插件。點(diǎn)擊【Manage Jenkins】,選擇【Manage Plugins】,選擇【可選插件】,在【搜索框】中輸入git plugin,下載該插件。
安裝成功如圖所示,然后重啟【Jenkins】:
構(gòu)建執(zhí)行shell,根據(jù)自己的腳本輸入pytest命令。也就是說(shuō)Jenkins將Git倉(cāng)庫(kù)代碼下載之后,我們要怎么通過(guò)命令去執(zhí)行腳本,這個(gè)根據(jù)自己執(zhí)行腳本的情況填寫(xiě)即可,這里和我們手工執(zhí)行腳本的操作是一致的,然后點(diǎn)擊保存。
點(diǎn)擊【Build Now[立即構(gòu)建]】,可以看到正在執(zhí)行的構(gòu)建Job
4. 測(cè)試報(bào)告
當(dāng)用例執(zhí)行完成之后,我們想看用例執(zhí)行的情況,而pytest不僅支持pytest-html插件,還可以使用allure生成更加美觀的測(cè)試報(bào)告。Allure框架是一個(gè)靈活的輕量級(jí)多語(yǔ)言測(cè)試報(bào)告工具,它不僅以web的方式展示了簡(jiǎn)介的測(cè)試結(jié)果,而且允許參與開(kāi)發(fā)過(guò)程的每個(gè)人從日常執(zhí)行的測(cè)試中最大限度的提取有用信息。所以我們這里選擇的是Allure框架。
從dev/qa的角度來(lái)看,Allure報(bào)告簡(jiǎn)化了常見(jiàn)缺陷的統(tǒng)計(jì):失敗的測(cè)試可以分為bug和被中斷的測(cè)試,還可以配置日志、步驟、fixture、附件、計(jì)時(shí)、執(zhí)行歷史以及與TMS和BUG管理系統(tǒng)集成,所以,通過(guò)以上配置,所有負(fù)責(zé)的開(kāi)發(fā)人員和測(cè)試人員可以盡可能的掌握測(cè)試信息。
從管理者的角度來(lái)看,Allure提供了一個(gè)清晰的“大圖”,其中包括已覆蓋的特性、缺陷聚集的位置、執(zhí)行時(shí)間軸的外觀以及許多其他方便的事情。allure的模塊化和可擴(kuò)展性保證了您總是能夠?qū)δ承〇|西進(jìn)行微調(diào),使Allure更適合您,那么今天我們就來(lái)說(shuō)說(shuō)如何使報(bào)告更加詳細(xì)的顯示我們需要的信息,以及allure與jenkins的集成。
4.1 下載Allure插件與配置Allure
點(diǎn)擊【Manage Jenkins】,選擇【Manage Plugins】,選擇【可選插件】,在【搜索框】中輸入Allure,下載該插件。下載成功之后重啟Jenkins。
進(jìn)入全局工具配置【Global Tool Configuration】,下拉最后一項(xiàng),會(huì)看到【Allure Commandline】項(xiàng),按下圖配置之后保存即可:
進(jìn)入配置,點(diǎn)擊【構(gòu)建后操作(Post-build Actions)】,選擇Allure Report
Results:輸入Path路徑,這里的path路徑表示在項(xiàng)目根目錄下生成此文件夾,文件夾用來(lái)保存生成html報(bào)告之前所依賴的json,xml,txt等類(lèi)型文件。
Report path:輸入保存html報(bào)告路徑。
點(diǎn)擊【Build Now[立即構(gòu)建]】,執(zhí)行結(jié)束之后可以看到生成的Allure報(bào)告
4.2 Allure報(bào)告展示
5. 發(fā)送郵件
Jenkins默認(rèn)提供了一個(gè)郵件通知E-mail Notification,但功能有很多的局限性,不夠靈活。比如:無(wú)法定義郵件的格式、郵件通知無(wú)法提供詳細(xì)的郵件內(nèi)容。在這里我們使用Email Extension Plugin插件。該插件能夠允許你自定義郵件發(fā)送的具體內(nèi)容、郵件格式等。
5.1 下載Email插件與配置Email
點(diǎn)擊【Manage Jenkins】,選擇【Manage Plugins】,選擇【可選插件】,在【搜索框】中輸入Email Extension Plugin,下載該插件。下載成功之后重啟Jenkins。
進(jìn)入系統(tǒng)設(shè)置【System Configuration】,找到【Jenkins Location】,設(shè)置Jenkins URL與發(fā)件人的郵件地址
找到“Extended E-mail Notification”,設(shè)置以下內(nèi)容:
詳細(xì)參數(shù)介紹:
- Override Global Settings:如果不選,該插件將使用默認(rèn)的E-mail Notification通知選項(xiàng)。反之,可以通過(guò)指定不同于的設(shè)置來(lái)進(jìn)行覆蓋。
- Default Content Type:指定構(gòu)建后發(fā)送郵件內(nèi)容的類(lèi)型,有Text和HTML兩種。
- Use List-ID Email Header:為所有的郵件設(shè)置一個(gè)List-ID的郵件信頭。
- Add 'Precedence:bulk' Email Header:設(shè)置優(yōu)先級(jí)。
- Default Recipients:自定義默認(rèn)電子郵件收件人列表。
- Reply To List:回復(fù)列表。
- Emergency reroute:如果這個(gè)字段不為空,所有的電子郵件將被單獨(dú)發(fā)送到該地址(或地址列表)。
- Excluded Committers:防止郵件被郵件系統(tǒng)認(rèn)為是垃圾郵件,郵件列表應(yīng)該沒(méi)有擴(kuò)展的賬戶名(如:@domain.com),并且使用逗號(hào)分隔。
- Default Subject:自定義郵件通知的默認(rèn)主題名稱。該選項(xiàng)能在郵件的主題字段中替換一些參數(shù),這樣就可以在構(gòu)建中包含指定的輸出信息。
- Maximum Attachment Size:郵件最大附件大小。
- Default Content:自定義郵件通知的默認(rèn)內(nèi)容主體。該選項(xiàng)能在郵件的內(nèi)容中替換一些參數(shù),這樣就可以在構(gòu)建中包含指定的輸出信息。
- Default Pre-send Script:默認(rèn)發(fā)送前執(zhí)行的腳本。
- Enable Debug Mode:?jiǎn)⒂貌寮恼{(diào)試模式。
- nable Security:?jiǎn)⒂脮r(shí),會(huì)禁用發(fā)送腳本的能力,直接進(jìn)入Jenkins實(shí)例。如果用戶試圖訪問(wèn)Jenkins管理對(duì)象實(shí)例,將拋出一個(gè)安全異常。
- Content Token Reference:郵件中可以使用的變量,所有的變量都是可選的。
進(jìn)入配置,點(diǎn)擊【構(gòu)建后操作(Post-build Actions)】,找到【Extended E-mail Notification】,設(shè)置以下內(nèi)容:
觸發(fā)器參數(shù)說(shuō)明
- Failure:即時(shí)發(fā)送構(gòu)建失敗的郵件。如果”Still Failing”觸發(fā)器已配置,而上一次構(gòu)建的狀態(tài)是”Failure”,那么”Still Failing”觸發(fā)器將發(fā)送一封郵件來(lái)替代(它)。
- Unstable:即時(shí)發(fā)送構(gòu)建不穩(wěn)固的郵件。如果”Still Unstable”觸發(fā)器已配置,而上一次構(gòu)建的狀態(tài)是”Unstable”,那么”Still Unstable”觸發(fā)器將發(fā)送一封郵件來(lái)替代(它)。
- Still Failing:如果兩次或兩次以上連續(xù)構(gòu)建的狀態(tài)為”Failure”,發(fā)送該郵件。
- Success:如果構(gòu)建的狀態(tài)為”Successful”發(fā)送郵件。如果”Fixed”已配置,而上次構(gòu)建的狀態(tài)為“Failure”或“Unstable”,那么”Fixed”觸發(fā)器將發(fā)送一封郵件來(lái)替代(它)。
- Fixed:當(dāng)構(gòu)建狀態(tài)從“Failure”或“Unstable”變?yōu)?rdquo;Successful”時(shí)發(fā)送郵件。
- Still Unstable:如果兩次或兩次以上連續(xù)構(gòu)建的狀態(tài)為” Unstable “,發(fā)送該郵件。
- Before Build:當(dāng)構(gòu)建開(kāi)始時(shí)發(fā)送郵件。
點(diǎn)擊【Build Now[立即構(gòu)建]】,執(zhí)行結(jié)束之后。如果執(zhí)行成功,將不會(huì)發(fā)送郵件給收件人;如果執(zhí)行失敗,將會(huì)發(fā)送一封郵件給收件人,郵件內(nèi)容根據(jù)自己情況自定義。
5.2 郵件展示
6. 總結(jié)
本文主要描述了通過(guò)Git自動(dòng)拉取代碼,然后Jenkins構(gòu)建自動(dòng)執(zhí)行python腳本輸出測(cè)試報(bào)告,如果執(zhí)行失敗,通過(guò)郵件自動(dòng)將測(cè)試報(bào)告發(fā)送給收件人。 后期還有許多優(yōu)化的地方,希望和大家一起來(lái)探討。
PS:
我們是行者AI,我們?cè)?ldquo;AI+游戲”中不斷前行。
快來(lái)【公眾號(hào) | xingzhe_ai】,和我們討論更多技術(shù)問(wèn)題吧!