基于OpenCover进行代码覆盖率测试

  最近开始接触白盒测试,开发同事对OpenCover(开源C#代码覆盖率统计工具)、ReportGenerator(将XML报告转换成HTML的工具)二次开发出一个代码覆盖率的工具。下面基于该工具,记录对OpenCover、ReportGenerator等的理解。

未使用OpenCover时,被测程序的正常运行流程:

使用OpenCover、ReportGenerator后,被测程序的运行流程:

  OpenCover中的Profiler启动运行被测程序的程序或服务——>运行被测程序——>得到运行结果同时,也得到xml覆盖率结果——>ReportGenerator将xml转成HTML

该工具使用及主要实现流程:

——>配置好OpenCover、ReportGenerator、被测程序的路径、IIS Express config的路径

——>执行的时候就根据配置好的参数执行命令,即相当于在cmd中执行:

H:\白盒测试\Debug\Opencover\OpenCover.Console.exe -target:"C:\Program Files (x86)\IIS Express\iisexpress.exe" -targetdir:"D:\被测站点\xxx.xxx.com\bin" -targetargs:"/site:xxx_bh.xxx.com /config:\"C:\Users\ym\Documents\IISExpress\config\applicationhost.config\"" -register:ym -output:"H:\白盒测试\xml_ym\xxx_bh.xxx.com\xxx_bh.xxx.com.xml"

——>此时IIS Express已经启动,访问在通过IIS Express配置的站点,开始测试。

——>测试完成后,退出IIS Express,生成xml文件。

——>使用ReportGenerator生成HTML文档,相当于在cmd中执行命令:

H:\白盒测试\Debug\ReportGenerator\ReportGenerator.exe -reports:H:\白盒测试\xml\白盒测试.xml -targetdir:H:\白盒测试\xml\html

关于OpenCover:

  OpenCover是用于.NET 2.0及以上应用程序的代码覆盖的开源工具。OpenCover启动后,会收集覆盖结果。但是必须要有的是PDB文件以及可执行文件和程序集,因此应该在调试模式下构建测试中的应用程序。如果未找到PDB文件,则不会收集任何覆盖数据。(或者直接获取源代码)

OpenCover基本用法(命令行参数):
-target: 应用程序可执行文件或服务名称的路径  (我的理解:将被测程序运行起来的程序或服务。网上帖子中,大多用的NUnit。本文例子用的是IIS Express)
-filter: 要应用于选择性地包括或排除coverage结果中的程序集和类的过滤器列表
-output: 输出XML文件的路径,如果为空,则将在当前目录中创建results.xml
-register [:user] - 注册和取消注册代码覆盖率分析器
-targetargs: - 要传递给目标进程的参数
-targetdir: - 目标目录的路径或PDB文件的备用路径  (我的理解:被测程序所在位置)

用法:https://github.com/OpenCover/opencover/wiki/Usage

文档:https://github.com/opencover/opencover/blob/master/main/OpenCover.Documentation/Usage.pdf

参考:http://www.cnblogs.com/binyao/category/477233.html

   http://www.cnblogs.com/tylerzhou/p/9076386.html

   http://blog.alantsai.net/posts/2017/01/devopsseries-opencover-intro

     https://www.codeproject.com/Articles/677691/Getting-code-coverage-from-your-NET-testing-using

什么是IIS Express:

  一个兼具Visual Studio的ASP.NET开发服务器和Windows的IIS Web服务器功能的轻量级web服务器。

  具体描述:https://stackify.com/what-is-iis-express/

  配置:https://blog.csdn.net/zhangjk1993/article/details/36671105

为什么用IIS Express:

文档中有这么一段描述:

Running against IIS
Normally I’d suggest running against IISEXPPRESS as I think it is easier to automate. However for those who really want to run against a full blown IIS then the following instructions (supplied by a user) will hopefully suffice.
“The trick is to start OpenCover to run the w3wp.exe process in debug mode e.g.
OpenCover.Console.exe -target:C:\Windows\System32\inetsrv\w3wp.exe -targetargs:-debug 
-targetdir:C:\Inetpub\wwwwoot\MyWebApp\bin\ -filter:+[*]* -register:user
There are some prerequisites though:
1.All applications running under the site must make use of the same app pool; you‘ll get errors in the EventLog otherwise.
2.inetserver needs to be stopped, before starting w3wp.exe in debug mode. You can use the following command:
net stop w3svc /y
After testing/code coverage completion you can close the w3wp.exe process and start the inetserver again:
net start w3svc
This procedure was tested on a Win2008 machine with IIS7.5”
You can also run multiple OpenCover instances against separate IIS sites by using the –s option when running IIS to choose the siteid e.g.
OpenCover.Console.exe -target:C:\Windows\System32\inetsrv\w3wp.exe
    -targetargs:"-debug -s 1"
    -targetdir:%WebSite_Path%
    -filter:+[*]*
    -register:user
    -output:%CoverageResult_Path%
Then you can use ReportGenerator to merge the coverage results. 

大致意思就是用IIS Express更方便。

而如果要启动完整的IIS,那就要:

1)在调试模式下运行被测程序并启动OpenCover(将代码构建到调试模式获取PDB文件。或者直接获取源代码)

2)所有在站点下运行的应用程序都必须使用相同的应用程序池;否则,会报错

3)在调试模式下启动被测程序前,需要停止intserver(PS:不清楚intserver是什么)

关于PDB文件:

https://blogs.msdn.microsoft.com/vcblog/2016/02/08/whats-inside-a-pdb-file/

https://tpodolak.com/blog/2017/10/12/net-core-calculating-code-coverage-opencover-windows/

使用ReportGenerator 将xml生成HTML报告:

ReportGenerator用于将OpenCoverPartCoverVisual StudioNCover生成的XML报告转换为各种格式的友好可读报告。

使用指南可以在其主页上找到,最有用的命令是(命令行参数):

  • -reports: - 应该解析的覆盖率报告,分号分隔,允许使用通配符
  • -targetdir: - 应保存生成的报告的目录
  • -sourcedirs:[;] [;] - 包含相应源代码的目录,可选,分号分隔
  • -classfilters:<(+ | - )filter> [; <(+ | - )filter>] [; <(+ | - )filter>] - 报表中应包含或排除的类列表,可选,通配符被允许。

  

如下图,为报告部分截图,包含语句覆盖和分支覆盖情况。点击相应的页面,会进入对应程序,可看到具体覆盖到哪一行代码。

  

代码覆盖详情,绿色表示完全覆盖,橙色表示该行代码还有分支未覆盖到,红色则未覆盖。

参考资料:https://www.cnblogs.com/tylerzhou/p/9076537.html

     https://www.cnblogs.com/SivilTaram/p/vs_opencover_unit_coverage.html

原文地址:https://www.cnblogs.com/minerrr/p/9253960.html

时间: 2024-10-10 04:26:30

基于OpenCover进行代码覆盖率测试的相关文章

iOS代码覆盖率测试工具

基于lcov-1.11的:CodeCoverage4iOS 阅读目录 环境准备 Xcode工程配置 构建并安装程序 收集代码覆盖率 过滤结果 合并多个Coverage.info?件?成覆盖率报告: 参考文献 iOS code coverage test tool. 基于lcov-1.11的iOS代码覆盖率测试工具,适用与iOS真机与模拟器. 环境准备 Mac OS X :10.8.5+ 建议10.9 Xcode :5.0+ 建议6.1 回到顶部 Xcode工程配置 拷贝CodeCoverage4

数据库代码覆盖率测试功能测试建模压测profiling;

数据库管理系统(简称 DBMS)无疑是任何数据密集型应用程序当中最为重要的组成部分,其肩负着处理大量数据以及高复杂性工作负载的重任.然而,数据库管理系统本身却往往难于管理,因为其中通常包含数百种配置"旋钮",用于控制诸如缓存内存分配量以及存储介质数据写入频率等要素.各类企业一般需要聘请专业人士以协助相关调配工作,但对于大多数企业而言,此类专业人才的开价亦相当高昂.而实际上,DBA所面临的挑战还远不止这些. 而今天一则名为"OtterTune"的机器学习DBMS系统刷

基于端口的虚拟局域网测试

基于端口的虚拟局域网测试 一.什么是VLAN: VLAN,是英文Virtual Local Area Network的缩写,中文名为"虚拟局域网", VLAN是 一种将局域网(LAN)设备从逻辑上划分(注意,不是从物理上划分)成一个个网段(或者 说是更小的局域网LAN),从而实现虚拟工作组(单元)的数据交换技术. VLAN 主要用来解决如何将大型网络划分成多个小网络,隔离原本在同一个物理LAN中的不同主机间的二层通信: 在LAN中,各主机之间的通信是物理通信(二层通信): 在VLAN中

基于覆盖率的精准测试

精准测试是根据代码变更来选择用例的测试策略,用于回归测试.它有利于缩小用例范围,提高执行效率,降低问题定位时间,支持持续集成的极速门禁和冒烟测试.精准测试要求代码的自动化覆盖率比较高,且用例间无依赖. 基于覆盖率的精准测试,布布扣,bubuko.com

基于iCamera App Kit 测试oV5640 500w分辨率 摄像头 总结

基于iCamera App Kit 测试oV5640 摄像头 总结 iCamera App Kit 下载地址 http://pan.baidu.com/s/1kUMIwB1 可以参考下载链接的说明手册,里面有目前测试过的各款说明,本博客也会陆续更新各款测试效果和使用的说明 对于驱动安装,基本使用的问题,基本每个篇幅都有介绍,再次不重复叙述,详情可以关注说明书. 本摄像头,不含自动对焦功能 目前提供两个版本测试文件 5M(2592*1944)和VGA(640*480) 我们提供两种分辨率测试:有上

关于代码覆盖率测试

开始听到代码覆盖率这个词的时候只觉得不陌生但是至于是怎么个意思在哪看到过就不太记得了,当我开始去研究代码覆盖率测试工具时才进一步的去查,这才明白代码覆盖率是指:代码覆盖程度的一种度量方式,是描述程序中源代码被测试的比例和程度.可能这样说还是有些抽象.下面通过代码覆盖率的常用指标和测试工具上具体展示一下代码覆盖率: 一.常用指标 1.语句覆盖:被测试代码中的每一个可执行语句是否被执行到,语句覆盖是为"最弱的覆盖",对一些控制结构的代码他不能真正表示是否完全覆盖到. 2.判定覆盖:度量程序

《软件测试自动化之道》读书笔记 之 基于Windows的UI测试

<软件测试自动化之道>读书笔记 之 基于Windows的UI测试 2014-09-25 测试自动化程序的任务待测程序测试程序  启动待测程序  获得待测程序主窗体的句柄  获得有名字控件的句柄  获得无名字控件的句柄  发送字符给控件  鼠标单击一个控件  处理消息对话框  处理菜单  检查应用程序状态  示例程序参考 本章主要讲述如何使用底层的Windows自动化技术通过用户界面来测试应用程序.这些技术涉及Win32 API的调用(比如FindWindow()函数)以及想待测程序发送Wind

《软件测试自动化之道》读书笔记 之 基于反射的UI测试

<软件测试自动化之道>读书笔记 之 基于反射的UI测试 2014-09-24 测试自动化程序的任务待测程序测试程序  启动待测程序  设置窗体的属性  获取窗体的属性  设置控件的属性  获取控件的属性  方法调用  待测程序代码 测试自动化程序的任务 返回 基于反射的ui测试自动化程序,要完成的6项任务: 通过某种方式从测试套件程序中运行待测程序(AUT: Applicaton Under Test),以便于两个程序之间进行通信 操纵应用程序的窗体,从而模拟用户对窗体所实施的moving和r

转:基于Jmeter的MQTT测试插件

基于Jmeter的MQTT测试插件-上 1. Jmeter插件简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.下载 用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 这里我们主要使用的基于Jmeter开发的,测试MQTT协议的插件工具,从github上找到了几个歪果人写的插件,主要有以下几个: tuanhiep/mqtt-jmeter hemikak/mqtt-jmeter winglet/mqttws-jmeter 这3个插件