從零開始搭建一個簡單的ui自動化測試框架04(pytest+selenium+allure)

weixin_34320159發表於2017-11-27

四、自動化測試的持續整合(pytest+allure2+jenkins)

為什麼要實現持續整合

回顧一下,先期我們所做的已經可以實現一個挺完整的測試過程了,從用例的管理到執行到報告的傳送都可以實現,但目前還差個閉環。

目前我們的測試執行,是靠人手動執行的,無法實現無人值守,例如,我想實現,當專案工程程式碼被構建時,自動執行測試迴歸一下本次程式碼的改動有沒有影響,如果只靠手動執行,就只能派個人等著構建結束了,極其不方便;此外,我的測試程式碼更新了,如果靠自己去上傳,也很麻煩。

設想一下,如果實現了,我本地的測試程式碼更新之後,可以有個地方自動拉取我的程式碼,然後按我設定的時機(例如專案程式碼構建後,或者每天的固定時間)自動執行迴歸測試,測試完了自動給我傳送測試結果,是不是更為理想的測試流程呢?而這也是持續整合的意義所在。

如果使用之前介紹的unittest的話,那麼本章沒有什麼多餘的介紹,只要配置好jenkins,然後新建一個執行用例的job就行了,不過本章打算介紹一個新的搭配方式,更方便,更簡單。

安裝pytest

pytest是python上的一個測試框架,相容unittest的語法,因為之後的測試報告生成需要pytest的支援,所以我們要先裝一下這個框架。

安裝pytest:cmd介面輸入命令:pip install pytest;

安裝allure2

allure2是一個測試報告的框架,支援多種語言、測試框架,比起前面提到的HTMLTestRunner有著更加漂亮的介面,更加直觀的圖表統計,以及更為豐富的可新增資訊。

allure2的介面:

6429840-8670e04846a30485.png
image

安裝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---系統管理---全域性工具配置,如下圖配置好(不要完全照抄哦,引數是本地的話需要填你本地的路徑):

6429840-8f2c79e5443b364c.png
image

6429840-94dc19d703520db8.png
image

再進入jenkins---系統管理---系統設定,拉到最下面,設定問題追蹤,在Allure Report 下選擇增加

Key: allure.issues.tracker.pattern Value: http://tracker.company.com/%s

如圖配置:


6429840-7120a87b0c8b34d9.png
image

最後進入jenkins---系統管理---指令碼命令列,輸入如下命令執行許可權程式碼,點選執行

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';")

,如圖配置:

6429840-88e042759206710a.png
image

這樣我們在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即可。

現在,專案構建完之後就會自動把報告的地址傳送給你預定的郵箱。

郵件內容:

6429840-e2a11934b985abe8.png
image

參考資料

  1. Python + Allure(報告)+ Jenkins(持續整合)介面自動化測試環境搭建
  2. allure--開源 report 框架階段性總結介紹
  3. Allure2-開源 report 框架介紹 (Allure+Jenkins)
  4. Allure Report
  5. Jenkins 郵件配置 (使用 Jenkins Email Extension Plugin)

相關文章