Jenkins結合.net平臺工具之Opencover

首先先介紹一下Opencover是什麼,Opencover是.net平臺下用於生成單元測試覆蓋率報告的一款軟件,是.net平臺下爲數很少的一款免費覆蓋率報告工具,相似的工具還有Jetbrains的dotcover以衣VisualStudio自帶的單元測試覆蓋率工具,dotcover是付費軟件,visualStudio自帶的單元測試覆蓋率報告工具僅限於在VisualStudio中使用,沒法與Jenkins結合實現自動化,而且它只集成在企業版裏面,社區版裏是沒有這個功能的. git

如下是Opencover的github倉庫地址 github

https://github.com/OpenCover/opencover windows

下面講解一下如何使用Opencover生成單元測試覆蓋率報告. 工具

這裏咱們仍然基於上一節的項目,這裏須要引入另外一個Nuget包,opencover 單元測試

添加引用完成之後項目的packages目錄下面有這樣一個目錄packages\OpenCover.xxx \tools(xxx爲版本號)下面有一個OpenCover.Console.exe文件,它是咱們與Jekins結合生成單元測試代碼覆蓋率報告要使用到的. 測試

 

單元測試代碼覆蓋率報工具,顧名思義它是對單元測試進行分析生成報告的工具,所以它是依賴於單元測試的,咱們使用的是Nunit,上一節咱們經過命令生成了單元測試,這裏咱們把上一節的命令寫成一個bat批處理文件,以供opencover.console.exe調用 ui

代碼以下 .net

"E:\personal project\newTest2018\ConsoleApp1\packages\NUnit.ConsoleRunner.3.8.0\tools\nunit3-console.exe" "E:\personal project\newTest2018\ConsoleApp1\NunitTest\bin\Debug\NunitTest.dll" --work:"E:\personal project\newTest2018\ConsoleApp1\NunitTest\bin\Debug" 日誌

這裏須要注意的是請不要複製上面的路徑,而是根據本身的實際狀況(Nunit控制檯工具所在位置,要進行的項目生成的dll所在位置以及工做目錄) xml

咱們把這個bat命名爲runnuit.bat(注意名稱能夠隨便起,沒必要和示例同樣)

咱們把opencover要執行的命令也放在bat文件裏,這裏命名opcover.bat

"C:\Users\tylerzhou\.nuget\packages\opencover\4.6.519\tools\OpenCover.Console.exe" -target:"E:\personal project\newTest2018\ConsoleApp1\NunitTest\bin\Debug\runnuit.bat" -targetargs:"/nologo /noshadow" -targetdir:"E:\personal project\newTest2018\ConsoleApp1\NunitTest\bin\Debug" -register:"user" -filter:"+[NunitTest*]*" -output:"E:\personal project\newTest2018\ConsoleApp1\NunitTest\bin\Debug\results.xml"

這裏對以上代碼的關鍵部分進行說明:首先第一個空格前是Opencover.Console.exe文件所在的位置,用於執行它. Target是它要運行的單元測試命令目標,是一個批處理文件,咱們使用剛纔建立的runnuit.bat文件(這裏咱們都使用的是絕路徑,以防對Jenkins不熟悉形成各類沒必要要麻煩).targetdir則爲工做目錄, output用於指定生成的覆蓋率報告文件所在的位置. –filter用於過濾要進行單元測試覆蓋的結果.若是不指定,它會對加載的Nunit庫裏的代碼也進行覆蓋率測試,這不是咱們想要的.咱們目前只測試了NunitTest.dll這個文件,你們能夠把它替換爲本身的文件名.

 

下面咱們新建一個名爲OpencoverTest的freestyle項目,在Build欄裏添加一個windows batch command步驟,而後在命令裏面指定本地opcover.bat文件所在路徑.

須要注意的時你可能看到咱們實際上建立了兩個bat,一個是runnuit.bat另外一個是opcover.bat這裏咱們並無在步驟裏面添加runnuit.bat這是由於opcover.bat的target參數裏面引用了它,當opcover.bat執行的時候會先執行runnuit.bat.

添加命令之後,咱們點擊保存,而後執行Build Now.

若是配置成功,則將會生成一條成功構建記錄.下面介紹一個坑:

若是你仔細查看Console Out,會發現有以下相似語句

其中Results(nunit3)saved as TEstResult.xml是runnuitt.bat生成的日誌文件,下面是opcover生成的,能夠看到是No Resultsxxxxx

若是你在本地執行opcover.bat則報告和在Jenkins上生成的是不同,本地是能成功執行的.這個問題經歷了一翻折騰才解決.緣由在於opcover在生成代碼覆蓋率報告的時候,要訪問本地dll和pdb文件,

在本地執行的時候註冊-register user是ok的,到了jenkins環境中卻權限不足,猜想多是Jenkins執行環境用戶和本地默認執行可執行文件時的用戶是不一樣的.用於對windows權限不是太清楚,這裏僅是猜想.

下面說一下解決辦法:

以管理員身份打開cmd,而後執行regsvr32 "E:\personal project\newTest2018\ConsoleApp1\packages\OpenCover.4.6.519\tools\x86\OpenCover.Profiler.dll"

須要注意的是OpenCover.Profiler.dll"在所在項目的packages目錄下的opcoverxxx\tools目錄下,你們的項目絕對路徑可能和個人不同,不要複製.

執行以上操做成功後會有彈窗提示成功.

而後打開Jenkins再次執行Build now,查看console out,將會看到相似以下日誌

此時已成功生成報告.咱們打開本地生成的results.xml就能夠看到opencover生成的報告了

相關文章
相關標籤/搜索