Pages

Sunday, April 1, 2012

I Got OpenCover to Work with Jenkins

As I mentioned before, a team that I am coaching is using Jenkins for CI. We wanted to automate code coverage measurements for the .Net code in specific assemblies of our solution. (Others are third-party or machine generated, so we don't have unit tests for them.) It took me longer than I would have liked, but I did get OpenCover running and generating reports as part of our Jenkins build.

One hurdle was that Jenkins seems to need to be run as user with administrator rights in order for OpenCover to work. So I created one and assigned it in the "Log On" tab.

In my Jenkins job, I opened "Add build step" and selected "Execute Windows batch command". In there, I gave the command line:

"C:\Program Files (x86)\OpenCover\OpenCover.Console.exe" -target:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\mstest.exe" -targetargs:"/testcontainer:E:\Jenkins\jobs\BuildOurApp\workspace\TRUNK\OurApp.UnitTests\bin\release\OurApp.UnitTests.dll" -filter:"+[OurApp.AssemblyToCover1]* +[OurApp.AssemblyToCover2]*" -register:user -mergebyhash -output:E:\Jenkins\jobs\BuildOurApp\workspace\FilteredCodeCoverage.xml

As an aside, I often have Jenkins jobs with several batch command sections. I found it annoying to scroll up and down and quickly find the one I was looking to edit. So I've started marking the top of each script:
REM   _      ___  _  __ _____  
REM  | |    |_ _|| |/ /| ____| 
REM  | |     | | | ' / |  _|   
REM  | |___  | | | . \ | |___  
REM  |_____||___||_|\_\|_____| 
REM                            
REM   _____  _   _  ___  ____  
REM  |_   _|| | | ||_ _|/ ___| 
REM    | |  | |_| | | | \___ \ 
REM    | |  |  _  | | |  ___) |
REM    |_|  |_| |_||___||____/ 
 
( http://patorjk.com/software/taag/ , "Standard" font, unchecked "Smush Letters Together" )


I have the HTML Publisher plugin installed, so I enabled it, clicked Add to add a row and specified:
E:\Jenkins\jobs\BuildOurApp\FilteredCodeCoverageReport 
index.htm
Code Coverage Report
as the arguments and it's all set! Now coverage is computed automatically and my team has a single URL for a summary report with drill-down details.

No comments:

Post a Comment