首先先介绍一下Opencover是什么,Opencover是.net平台下用于生成单元测试覆盖率报告的一款软件,是.net平台下为数不多的一款免费覆盖率报告工具,类似的工具还有Jetbrains的dotcover以衣VisualStudio自带的单元测试覆盖率工具,dotcover是付费软件,visualStudio自带的单元测试覆盖率报告工具仅限于在VisualStudio中使用,无法与Jenkins结合实现自动化,并且它只集成在企业版里面,社区版里是没有这个功能的.

以下是Opencover的github仓库地址

https://github.com/OpenCover/opencover

下面讲解一下如何使用Opencover生成单元测试覆盖率报告.

这里我们仍然基于上一节的项目,这里需要引入另一个Nuget包,opencover

添加引用完成以后项目的packages目录下面有这样一个目录packages\OpenCover.xxx \tools(xxx为版本号)下面有一个OpenCover.Console.exe文件,它是我们与Jekins结合生成单元测试代码覆盖率报告要使用到的.

 

单元测试代码覆盖率报工具,顾名思义它是对单元测试进行分析生成报告的工具,因此它是依赖于单元测试的,我们使用的是Nunit,上一节我们通过命令生成了单元测试,这里我们把上一节的命令写成一个bat批处理文件,以供opencover.console.exe调用

代码如下

"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所在位置以及工作目录)

我们把这个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生成的报告了

Jenkins结合.net平台工具之Opencover的更多相关文章

  1. Jenkins结合.net平台工具之ReportGenerator

    上一节我们讲解了如何使用opencover生成单元测试覆盖率报告,opencover默认生成的report为xml格式,可读性并不是特别强,如果靠阅读opencover生成的results.xml来分 ...

  2. Jenkins结合.net平台工具之Nunit

    有时候我们需要对从git上拉取的项目进行单元测通过以后才可以发布到测试环境,.net平台下单元测试的框架也很多例如mstest,nunit,xunit等,下面以Nunit为例讲解如何通过Jenkins ...

  3. Jenkins结合.net平台工具之Msbuild

    前面我们讲解了关于Jenkins的一些基本知识,通过这些知识我们可以结合一些其它工具实现更为复杂的任务,本篇我们将介绍如何使用msbuild工具结合Jenkins实现构建一个.net控制台框. 首先我 ...

  4. Jenkins结合.net平台工具之Nuget

    我们刚刚通过msbuild在Jenkins环境下把一个控制台项目生成exe可执行文件,如果我们引用了nuget包,也能够正常生成,但是我们知道,我们在把项目提交到git或者svn上的时候并不包含这些包 ...

  5. Jenkins结合.net平台综合之监听git仓库并自动摘取最新代码编译

    前面章节我们讲解了Jenkins结合.net平台工具以及一些第三方工具实现项目自动还原,自动编译,自动测试和自动发布.然而实现自动化还有一个关键的步骤就是监听源码仓库变化然后从仓库拉取最新代码,然后再 ...

  6. 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2

    基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2 Kubernetes实现Master-Slave分布式构建方案 传统Jenkins的Master-Slave方案的缺陷 Mas ...

  7. 如何判断平台工具集去做条件编译(VC++目录、预处理器定义、$(PlatformToolsetVersion))

    作者:zyl910 从VS2010开始,提供了一个平台工作集(Platform ToolSet)选项用于配制vc编译版本.到了VS2012,更是因为默认平台工具集不支持WindowsXP,导致经常需要 ...

  8. 【持续集成】使用Jenkins实现多平台并行集成

    使用Jenkins实现多平台并行集成 二月 15, 2012 暂无评论 我们的后端C应用都是支持跨平台的,至少目前在Linux和Solaris上运行是没有问题的,这样一来我们在配置持续集成环境时就要考 ...

  9. VS平台工具集版本

    参考:http://blog.csdn.net/hillseas/article/details/47373313 VS从2010之后开始支持使用之前的版本进行编译,可以在工程属性->常规中进行 ...

随机推荐

  1. Win7 VS2017 Boost Python入门

    闲来无事想练习下用Python作为游戏脚本绑定到C++,网上搜了下,Python文档有些例子,但是太过复杂,gayhub无意中看到有人用Boost Python绑定,简单粗暴,省时省力,记录备忘. 写 ...

  2. OpenAL音频库例程

    Windows下C++可用的OpenAL demo. 基于alut工具库的OpenAL例程,涵盖了基本的OpenAL指令,对部分作出了注释,并且可以播放(当然得把对应的音频文件放到正确的路径下). # ...

  3. [转]构建高性能MySQL体系

    来源:http://www.yunweipai.com/archives/21232.html 构建高性能MySQL系统涵盖从单机.硬件.OS.文件系统.内存到MySQL 本身的配置,以及schema ...

  4. Splinter常用API介绍(转)

    # Example from splinter import Browser with Browser() as browser: # Visit URL url = "http://www ...

  5. 从今天开始慢慢阅读java9源码决心的声明。

    我从很早的时候就好奇java的源码了,因为有使用者就有制作者. 在校期间使用了java两年多的我却不知道java里面的任何东西. 这个寒假前我无意之间看到了java9出现的新闻,网上查询到原来源码就隐 ...

  6. Django 执行单独脚本及SyntaxError缩进报错解决

    有时候会碰到这样的场景,对于一些业务升级,我需要把数据库数据做些处理,同时又想以 Django 项目的环境变量执行脚本,这个时候使用 python 脚本是再适合不过的手段了. 注意:在pycharm里 ...

  7. SSH连接Linux操作:

    Centos6.5的操作: 1:需要下载一个Xshell连接工具: 2:在Linux输入ifconfig,查看IP地址, 3:使用Xshell连接 Ubuntu的操作: 1:需要下载一个Xshell连 ...

  8. entity.Database.SqlQuery() 和entity.Database.SqlCommand()

    原文地址: http://msdn.microsoft.com/en-us/library/gg715124(v=vs.103) 使用 EF 4.1 或者更新版本, 你可以直接执行任何数据库命令. 在 ...

  9. Android开发 - 掌握ConstraintLayout(十)按比例设置视图大小

    有时候在布局界面的时候,UI要求某个View或者某张图片按比例显示,以适应不同的屏幕分辨率. 通常我们时通过自定义View或者引入第三方的库来解决.现在我们既然已经使用了ConstraintLayou ...

  10. PMS权限管理和鉴权过程

    一.权限的管理基础知识 1.系统的权限机制分为:权限解析.权限分配.鉴权.动态添加权限 2.PermissionInfo :  PackageParser.Permission中包含一个对应的Perm ...