首先先介绍一下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. XNA、FNA以及在VS2017中编写XNA

    XNA是早期DX SDK支持的C#游戏开发环境,虽然现游戏开发大多是以Unity3D,Unreal 4为主,但是许多独立游戏开发者,特别是2D游戏,依然使用XNA进行开发, 纠其原因,猜测是C#开源且 ...

  2. 微信小程序拉起登录的操作

    第一步,前端调用wx.login()接口把token数据请求过来, 第二部,把tok嗯发送到总计的服务器,然后进行微信openid和assession的获取 第三部验证session是否过期,过期重新 ...

  3. 数据库的Connection、Cursor两大对象

    Python 数据库图解流程 Connection.Cursor比喻 Connection()的参数列表 host,连接的数据库服务器主机名,默认为本地主机(localhost). user,连接数据 ...

  4. 20155205 郝博雅 Exp6 信息搜集与漏洞扫描

    20155205 郝博雅 Exp6 信息搜集与漏洞扫描 一.实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务 ...

  5. 再探haproxy

    一 设置haproxy输出log 1.1 调整配置文件 默认haproxy是不会输出log到文件的,这样很大程度在查询问题时会很不方便,haproxy是可以输出日志到文件的,配置文档类似于如下: ]# ...

  6. CSS3新增特性及知识学习线路

  7. android-mediaplayer播放

    优先参考 待补充.android 8.0

  8. ecshop自动确认收货(无其他商家)

    1.创建文件 includes/modules/auto_order_confirm.php 代码:(思路:对已经发货和已经付款的订单检索,对比发货时间与当前时间的间隔,达到设定时间则自动收货) &l ...

  9. Redis和memcached缓存技术

    缓存的定义:缓存就是在内存中存储的数据备份,当数据没有发生本质变化的时候,我们避免数据的查询操作直接连接数据库,而是去    内容中读取数据,这样就大大降低了数据库的读写次数,而且从内存中读数据的速度 ...

  10. beeline方式连接hive

    什么是beeline 常用操作 https://www.cnblogs.com/xinfang520/p/7684598.html