Python項目在Jenkins中的自動化測試實踐(語法檢查、單元測試,coverage(代碼覆蓋率)、自動打包)


原始鏈接:http://blog.csdn.net/a464057216/article/details/52934077

requirments

  • OS: Ubuntu 14.04+
  • Gitlab 8.1 +
  • Jenkins 2.19.0 +

使用Jenkins對Python項目進行自動化測試主要依賴nose(單元測試)、coverage(代碼覆蓋率、pylint(語法檢查))等工具,配合插件在Jenkins的Web界面展示測試結果。流程如下:

1.代碼改動push到Gitlab自動觸發Jenkins構建項目,執行自動化測試。 
2.測試包括基本功能測試、覆蓋率分析、語法檢查等,所有的測試結果在Jenkins上展示,包括測試通過率分析(可以具體到每個用例的通過情況)、測試覆蓋率可以具體到每一行、語法檢查可以具體到每一行的錯誤細節。 
3.如果測試成功,Jenkins新建一個Tag提交到Gitlab項目中,同時生成一個供下載的zip包。 
4.Jenkins界面包含項目代碼行數分析。 
5.在Gitlab項目的commits列表中看到可以每一次CI的結果,點擊build-id后會跳轉到Jenkins界面查看構建信息。在Jenkins中點擊相應的commit-hash會跳轉到Gitlab對應提交的diff頁面。



一、jenkins中進行nose(單元測試)、pylint(語法檢查)、coverage(代碼覆蓋率)

1、准備Gitlab側API token

在個人信息的Account界面生成Private token
這里寫圖片描述

在Jenkins上添加對應API token的Credential

Credentials管理界面添加該API token: 
這里寫圖片描述
然后在Jenkins系統設置的Gitlab部分填寫相關信息(使用剛才添加的API token,可以點擊Test Connection測試配置是否OK): 
這里寫圖片描述

配置Gitlab的webhook

在Gitlab的對應項目上配置webhook,trigger的URL是Jenkins頁面中GitLab CI Service URL后面給出的URL,勾選Push eventsMerge Request events等自己需要的條件,如果Jenkins沒有https支持,去勾選Enable SSL verification,然后點擊Add Webhook,點擊Test按鈕嘗試觸發Jenkins構建即可。

至此如果對Gitlab上的項目的master分支有修改的話,Jenkins會立即觸發構建(下圖中的第29次構建,當然也可以在Jenkins的Web管理界面手工觸發構建如第30次構建): 
這里寫圖片描述

構建完成后構建結果會同步到Gitlab中(點擊對應的對號或者差號后再新的頁面點擊對應的build id會跳轉到Jenkins的構建信息頁面): 
這里寫圖片描述
對於成功的構建,Jenkins會自動新建一個Tag並提交到Gitlab: 

這里寫圖片描述

2、配置Jenkins項目

在Jenkins的自由風格的軟件項目中設置如下內容: 
這里寫圖片描述

雖然使用的是Gitlab,但是在Github project中配置相關信息之后,可以在構建記錄中點擊commit-id直接跳轉到Gitlab的diff頁面: 
這里寫圖片描述

上面的GitLab Repository Name主要配合Gitlab logo插件使用,先在Jenkins的系統設置中設置GitLab Account Setting(使用之前在Gitlab上生成的API token): 
這里寫圖片描述

填寫項目在Gitlab的Project URL后,在Jenkins的項目列表中可以顯示項目在Gitlab上的圖標: 
這里寫圖片描述

繼續配置自由項目的源碼管理部分,這里使用的Credentials是Jenkins服務器訪問Gitlab使用的私鑰信息而不是之前配置的APi token,Refspec中的信息為:

+refs/heads/*:refs/remotes/origin/* +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*

 

這里寫圖片描述

構建觸發器配置如下: 
這里寫圖片描述

這里沒有選擇Poll SCM的方式,如果選擇這種方式的話,為了提高Jenkins的響應速度,通產會設置較短的輪詢周期比如1分鍾,這樣Jenkins上面項目過多的話對Gitlab的API訪問頻率太高。

為了將Jenkins的每次構建信息發布到Gitlab,需要在構建后的操作步驟中添加Publish build status to Gitlab Commit: 
這里寫圖片描述

如果構建成功,Jenkins提交新建的Tag到Gitlab時,需要使用的SSH私鑰有可寫權限,然而Gitlab的deploy key是沒有寫權限的,所以要在Gitlab中添加對應公鑰到用戶信息的SSH Keys信息中使其具有寫權限,然后在Jenkins的構建后的操作步驟中添加Git Publisher: 
這里寫圖片描述

上面配置中的Target remote name應該與源碼管理->git->Repositories中的name信息一致。

2、配置Jenkins項目構建步驟,進行測試

在構建中增加構建步驟,選擇Execute shell: 
這里寫圖片描述

在其中填寫如下內容(其中mypackage是被測試的package的名字):

virtualenv --no-site-packages env . env/bin/activate pip install --quiet nosexcover pip install --quiet pylint nosetests --with-xcoverage --with-xunit --cover-package=mypackage --cover-erase pylint -f parseable mypackage/ | tee pylint.out sloccount --duplicates --details mypackage > sloccount.sc tar --exclude *pyc -zcf mypackage.tar.gz mypackage 
2.1、pylint(語法檢查)

  pylint.out

  pylint生成的語法檢查報告pylint.out需要配合Violations plugin插件使用,然后在構建后操作中勾選Report Violations,找到pylint的配置並填寫: 
 這里寫圖片描述

構建后在構建記錄中即可以看到具體到文件每一行的語法檢查結果: 
這里寫圖片描述

 
2.2、單元測試

  coverage.xml

  --with-xcoverage選項會生成coverage.xml文件,安裝Cobertura Plugin后可以在構建后操作中勾選Publish Cobertura Coverage Report填寫相關信息: 
這里寫圖片描述

構建完成后,在構建信息的Cobertura Coverage Report頁面,可以看到測試覆蓋率變化的趨勢,和具體到每個文件的覆蓋情況: 
這里寫圖片描述

 

  nosetests.xml

  --with-xunit選項會生成nosetests.xml文件,在構建后操作中勾選Publish JUnit test result report即可顯示該部分的內容: 
這里寫圖片描述

在構建結果的Test Result頁面可以看到測試結果(點擊進入可以看到結果詳情): 
這里寫圖片描述

 

2.3、sloccount項目代碼行數分析工具

項目代碼行數分析依賴sloccount這個工具,首先在Jenkins服務器上安裝它:

# Written by: CSDN - Mars Loo的博客 sudo apt-get update sudo apt-get install sloccount

在Jenkins的構建后的操作中添加Public SLOCCount analysis results(需要先安裝SLOCCount Plug-in插件): 
這里寫圖片描述
然后在Jenkins的構建記錄頁面可以看到項目代碼行數的變化趨勢及各個語言的代碼行數變化: 
這里寫圖片描述 
這里寫圖片描述

Jenkins的構建后的操作步驟中添加Archive the artifacts: 
這里寫圖片描述 
把這個步驟放在構建后的操作步驟中的最后,然后在每次成功構建后會生成一個下載鏈接供下載包: 
這里寫圖片描述

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM