Jacoco统计web接口/功能测试的代码覆盖率【转】
原文:https://www.jianshu.com/p/d2fd02d4164b
一、代码覆盖率
通常我们在做单元测试的时候会接触到代码覆盖率的概念,通过在单元测试的过程中收集代码覆盖率去判断测试用例是否充分,去更精准的定位问题。而对于功能测试或者接口测试比较少的去关注覆盖率数据,功能测试时覆盖率的收集也是比较困难的。然后对于功能测试而言进行代码覆盖率的收集有利于测试工程师去判断哪些分支没有被覆盖,判断是否是设计用例的时候没有做到覆盖,又或者是由于存在bug使得无法覆盖到,从而更精准的去定位bug的位置,去分析问题,节省时间。
二、工具简介
对于java的代码覆盖率的收集,比较常用的工具有emma、jacoco,它们都是免费的代码覆盖率工具。emma目前已经不维护,EclEmma团队推出了jacoco,jacoco可以理解为emma的升级版本。Jacoco可以跟ant、maven、gradle等集成,降低了使用成本,使用更灵活 ;同时它还引入了监控机制,通过JJavaAgent技术监控Java程序。Jacoco还可以更第三方平台进行集成,比如sonar、jenkins,通过第三方平台更友好的将覆盖率数据在web端展示。
二、Java Counters
Jacoco提供了多维度的覆盖率统计方法,包含指令级(Instructions,C0coverage)覆盖,分支(Branches,C1coverage)覆盖、类(classes)覆盖、方法(non-abstract methods)覆盖、行(Lines)覆盖。同时还提供圈复杂度(CyclomaticComplexity)的统计,它会去计算每个类,方法的圈复杂度,根据McCabe1996的定义,圈复杂度可以理解为覆盖所有的可能情况最少使用的测试用例数,同时圈复杂度越高意味着程序越复杂,发生bug的概率越大。
2.1 Instructions
Jacoco在统计覆盖率时最小的统计单位就是字节码指令。通过指令覆盖率统计的是所有的指令哪些被执行了哪些没有被执行,从而得出统计数据。这项规则完全独立于源码格式并且在任何情况下有效,不需要类文件的调试信息。
2.2 Branches
Jacoco对所有的if...else...和switch...case...指令计算了分支覆盖率。分支覆盖会去统计程序中所有的分支数量,并统计哪些被执行哪些没有被执行,从而得出有效的覆盖率数据。
2.3 Classes
类覆盖是收集类的统计数据,计算中每个类中只要有一个方法被执行,这个类就被认定为被执行,那么它的覆盖率就是100%。
2.4 Methods
方法覆盖是收集类中的方法的覆盖率,通常一个非抽象方法都至少有一条指令,只要改方法中有一行被执行,该统计规则就认为他被执行了,该方法的覆盖率就是100%。
2.5 Lines
行覆盖,统计每行代码的覆盖率,只有当每一行代码都被执行到了才会是100%,理论上保证100%的覆盖率就能保证程序不会有bug。
三、准备工作
进入jacoco官网:http://www.eclemma.org/jacoco/ ,下载jacoco-0.7.8.zip。
进入apache官网:http://ant.apache.org/bindownload.cgi ,下载apache-ant-1.9.6-bin.tar.gz。
四、Tomcat 服务配置
1、本地为windows系统,先关闭tomcat服务。
2、将下载得到的jacocoagent.jar拷贝至D:\Program Files (x86)\apache-tomcat-8.0.30-windows-x86\apache-tomcat-8.0.30\lib\
3、修改bin/catalina.bat中JAVA_OPTS的配置
set JAVA_OPTS="-javaagent:%CATALINA_BASE%\lib\jacocoagent.jar=includes=com.yihu.qa.*,output=tcpserver,port=3344,address=192.168.1.103"
其中:%CATALINA_BASE%\lib\jacocoagent.jar为安装jacoco的jacocoagent.jar包相对路径;output覆盖率数据输出的形式,有file, tcpserver, tcpclient, 默认是file,file是在jvm停掉时才将覆盖率数据dump出来;address和port可以提供client访问,并dump出覆盖率数据文件,在build.xml会使用。
4、执行 startup.bat 启动tomcat。
五、本地ant配置
1、ant配置
将下载来的ant解压到某个目录下,添加ant环境变量,我的电脑->属性->高级系统设置->环境变量->新建


接下来查看ant配置是否ok,打开命令行,执行ant -version,如下图,表示ant安装成功

Ant -version
2、创建一个ant的目录D:\Program Files (x86)\apache-tomcat-8.0.30-windows-x86\ant,将下载得到的jacocoant.jar拷贝至D:\Program Files (x86)\apache-tomcat-8.0.30-windows-x86\ant
3、配置build.xml

说明:主要需要配置dump任务,jacoco生成报告任务;dump任务主要是为了能够生成.exec文件,在通过jacoco的任务根据源码跟.class文件以及.exec文件得出相应的html格式的覆盖率数据。
如何定义任务:
<target name=”***”>****</target>
如何执行任务:ant targetname
3、执行ant dump,执行成功后可以在ant的目录下发行.exec的文件

ant dump
4、执行 ant report,在ant目录下看到coverage_ant_task文件夹


5、查看报告
在报告中我们可以看到整个项目的各个覆盖率的情况,同时我们也可以查看到各个类方法的覆盖率数据,以及可以看到代码的行覆盖的情况,在方法里可以清晰的看到红色跟绿色,红色代表没有覆盖,绿色代表已经被覆盖了。从而我们可以推断出可能用例不完善这时候需要补充用例去覆盖改部分的内容,如果用例已经覆盖了,需要排查是否是出现了bug。



作者:_夏兮
链接:https://www.jianshu.com/p/d2fd02d4164b
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Jacoco统计web接口/功能测试的代码覆盖率【转】的更多相关文章
- jenkins+jacoco+ant+apache集成统计web端功能测试覆盖率
一.覆盖率定义 作为一个测试人员,保证产品的软件质量是其工作首要目标,为了这个目标,测试人员常常会通过很多手段或工具来加以保证,覆盖率就是其中一环比较重要的环节. 我们通常会将测试覆盖率分为两个部分, ...
- jacoco统计server端功能测试覆盖率
jacoco可以统计,功能测试时,server代码调用的覆盖情况.这里对服务器端的java代码进行统计. 操作步骤如下: 第一步:更改server的启动脚本,使用jacocoagent.jar ...
- 在网页中运用统计Web Service接口
(2017-02-10 银河统计) 在"统计随机数及临界值Web Service接口"一文中介绍了常用统计分布四类Web Service接口(随机数.分位数.密度函数和累积分布函数 ...
- jacoco统计自动化代码覆盖率
jacoco统计自动化代码覆盖率 1. 简介 1.1. 什么是Jacoco Jacoco是一个开源的代码覆盖率工具,可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以 ...
- 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言
前 言 本书的原型是我整理一份Django学习文档,从事软件测试工作的这六.七年来,一直有整理学习资料的习惯,这种学习理解再输出的方式对我非常受用,博客和文档是我主要的输出形式,这些输出同时也帮 ...
- 《Python Web 接口开发与测试》---即将出版
为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化相关的,工作中的接口自动化颇有成效. 我一直是一个没有测试大格局的人,在各种移动测试技术爆发的这一年,我却默默耕耘着自己的一亩三分地儿(We ...
- web接口开发与测试
最近一直在学习和整理web开发与接口测试的相关资料.接口测试本身毫无任何难度,甚至有很多工具和类库来帮助我们进行接口测试.大多测试人员很难深入了解web接口测试的原因是对web开发不太了解,当你越了解 ...
- JMeter基于http请求的web接口性能测试总结
[本文出自天外归云的博客园] 基于http请求的web接口性能测试总结 压测的目的:对于Web接口压测的目的最终是要在对数据库造成压力的情况下观察压测服务器的cpu是否达到预警值.memory是否发生 ...
- python WEB接口自动化测试之requests库详解
由于web接口自动化测试需要用到python的第三方库--requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试. 所以笔者今 ...
随机推荐
- fastadmin默认的controller已实现的方法
fastadmin控制器 <?php namespace app\admin\controller\peizi; use app\common\controller\Backend; /** * ...
- Java实现检验一串数字的出栈合法性
题目描述: 解题思路: 判断出栈合法性的关键在于,对于每一个数,在它后面出栈且比它小的数,必是以降序排列的. 比如说3 4 2 1 5这一组数,对于第一个数 3 来说,后面比它小的数有 1.2,而在4 ...
- POJ 1321-棋盘问题【DFS+递归】
题目链接 题目大意: Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大 ...
- anaconda源配置
1. 生成配置文件 第一次运行 conda config命令时,将会在用户的home目录创建该文件..condarc配置文件,是一种可选的(optional)运行期配置文件,其默认情况下是不存在的. ...
- redis初步入门(2)
一.redis持久化 1.redis是一个内存数据库,当redis服务器重启,或者电脑关机重启,数据会丢失,所以需要将redis内存中的数据持久化保存到硬盘文件中. 2.redis持久化机制 (1)R ...
- WCF、WebAPI、WCFREST、WebService、WPF之间的区别
在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下,你有很多的选择来构建一个HTTP Services.我分享一下我对 ...
- format 用法
hon2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱.语法 它通过{}和:来代替% ...
- POJ2386----Lake Counting
/* 利用宽搜将每块积水填满,添加一个计数器,记下填满几块积水即答案 */ #include<iostream> using namespace std; ][]; ][] = {{-,- ...
- 用户体验—微软Edge浏览器
我现在使用的浏览器是win10自带的Edge浏览器 用户界面: 首先整体界面的话是清晰,一目了然,而且记住用户选择: 1.微软必应搜索的主题分类明确,查询简洁方便.查询语句简单: 2 .信息覆盖程度非 ...
- mybatis自动生成service、dao、mapper
1.config.properties ## 数据库连接参数 jdbc.driverClass = com.mysql.jdbc.Driver jdbc.url = jdbc:mysql://loca ...