四、自動化測試的持續集成(pytest+allure2+jenkins)
為什么要實現持續集成
回顧一下,先期我們所做的已經可以實現一個挺完整的測試過程了,從用例的管理到執行到報告的發送都可以實現,但目前還差個閉環。
目前我們的測試執行,是靠人手動執行的,無法實現無人值守,例如,我想實現,當項目工程代碼被構建時,自動執行測試回歸一下本次代碼的改動有沒有影響,如果只靠手動執行,就只能派個人等著構建結束了,極其不方便;此外,我的測試代碼更新了,如果靠自己去上傳,也很麻煩。
設想一下,如果實現了,我本地的測試代碼更新之后,可以有個地方自動拉取我的代碼,然后按我設定的時機(例如項目代碼構建后,或者每天的固定時間)自動執行回歸測試,測試完了自動給我發送測試結果,是不是更為理想的測試流程呢?而這也是持續集成的意義所在。
如果使用之前介紹的unittest的話,那么本章沒有什么多余的介紹,只要配置好jenkins,然后新建一個執行用例的job就行了,不過本章打算介紹一個新的搭配方式,更方便,更簡單。
安裝pytest
pytest是python上的一個測試框架,兼容unittest的語法,因為之后的測試報告生成需要pytest的支持,所以我們要先裝一下這個框架。
安裝pytest:cmd界面輸入命令:pip install pytest;
安裝allure2
allure2是一個測試報告的框架,支持多種語言、測試框架,比起前面提到的HTMLTestRunner有著更加漂亮的界面,更加直觀的圖表統計,以及更為豐富的可添加信息。
allure2的界面:
安裝allure2需要先配置java環境(推薦java8),以及安裝pytest。
安裝pytest_allure_adaptor:cmd界面輸入命令:pip install pytest_allure_adaptor 。
這樣allure2就安裝好了。
在jenkins上使用pytest執行用例生成allure報告
jenkins是一個很著名的ci軟件,這里就不多介紹了,安裝完jenkins之后,我們需要先在jenkins上配置一下。
首先安裝allure的插件,在jenkins---系統管理---管理插件---可選插件的列表里,勾選安裝插件 Allure Jenkins Plugin 、HTML Publisher plugin;
然后進入jenkins---系統管理---全局工具配置,如下圖配置好(不要完全照抄哦,參數是本地的話需要填你本地的路徑):
再進入jenkins---系統管理---系統設置,拉到最下面,設置問題追蹤,在Allure Report 下選擇增加
Key: allure.issues.tracker.pattern Value: http://tracker.company.com/%s
如圖配置:
最后進入jenkins---系統管理---腳本命令行,輸入如下命令執行權限代碼,點擊執行
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';")
,如圖配置:
這樣我們在jenkins里的配置基本設置完了,接下來我們新建一個job來使用pytest運行我們的測試用例,并生成allure2的測試報告。
進入jenkins---新建item---輸入你的任務名稱---構建一個自由風格的軟件項目,然后配置你的項目,在構建里輸入命令:
python -m pytest 你測試用例的目錄 --alluredir allure-result
再增加一個構建后操作,選擇Allure Report,path里填上報告中間文件目錄,也就是上面命令里的allure-result,再點擊高級,設置最終生成報告的目錄,在Report path里填上allure-report。
這里解釋一下,allure是這樣的,執行第一個命令:
python -m pytest 你測試用例的目錄 --alluredir allure-result
的時候,其實是執行你的測試用例,并把結果生成一個中間文件,用于生成最終的報告,也就是說,這里生成的并不是最終的報告,allure-result只是中間文件的路徑,這個路徑需要和下面的構建后操作AllureReport里的Results的Path的值一致。
而Allure Report這個構建后操作其實是執行的另一個命令,大家在執行后的Console Output里也能看到這個命令,這里貼出來:
[Allure report] $ "C:\Program Files (x86)\Jenkins\tools\ru.yandex.qatools.allure.jenkins.tools.AllureCommandlineInstallation\allure\bin\allure.bat" generate "中間文件的路徑" -c -o "最終報告的路徑"
解釋一下這個命令,C:\Program Files (x86)\Jenkins\tools\ru.yandex.qatools.allure.jenkins.tools.AllureCommandlineInstallation\allure\bin\allure.bat這個路徑是allure轉換報告工具的路徑,這個工具你也可以單獨下載,這里暫時不提;
generate是把中間文件生成最終報告的指令, -c -o 前面的是你中間文件的路徑,之后的是最終生成報告的路徑。
至此,我們的無人值守執行用例并自動生成報告就算實現了,我們可以給這個job設置執行時間點或者把這個job掛在別的構建項目下實現定點執行和定時機執行。
當然,還有最后一步,光是執行還不行,我們需要執行之后自動給我們發出通知,告訴我們執行的結果,這里用到的是jenkins的郵件通知插件Extended E-mail Notification,下面講解一下怎么設置郵件通知。
首先我們安裝這個插件,還是jenkins---系統管理---管理插件,然后在可選插件里搜索Extended E-mail Notification并安裝。
安裝完之后,進入jenkins---系統管理---系統設置,先找到Jenkins Location欄,設置系統管理員郵件地址為你的發件郵箱,然后找到Extended E-mail Notification欄,這里我以QQ郵箱舉例設置,
先設置SMTP server為 smtp.qq.com;
Default user E-mail suffix填 @qq.com;
然后點開高級,勾選Use SMTP Authentication;
User Name填你的發件地址,和管理員地址保持一致;
Password填你的QQ郵箱的smtp服務授權碼,而不是你的QQ密碼,不知道的話自己去郵箱的設置頁里找;
Use SSL勾選;
SMTP port填465;
下面的Default Recipients填你的收件地址;
Default Content內容稍微改一下,改為:
$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
Check console output at ${BUILD_URL}allure/ to view the results.
下面的Enable Debug Mode記得勾選,方便發送失敗看日志,再點開Default Triggers設置你郵件的發送時機,到這里插件的設置就完畢了。
然后回到你上面job的配置頁面,增加一個構建后操作Editable E-mail Notification即可。
現在,項目構建完之后就會自動把報告的地址發送給你預定的郵箱。
郵件內容: