原文: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环境变量,我的电脑->属性->高级系统设置->环境变量->新建

 
image.png
 
image.png

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

 
image.png

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

 
image.png

说明:主要需要配置dump任务,jacoco生成报告任务;dump任务主要是为了能够生成.exec文件,在通过jacoco的任务根据源码跟.class文件以及.exec文件得出相应的html格式的覆盖率数据。

如何定义任务:

<target name=”***”>****</target>

如何执行任务:ant targetname

3、执行ant dump,执行成功后可以在ant的目录下发行.exec的文件

 
image.png

ant dump

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

 
image.png
 
image.png

5、查看报告

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

 
image.png
 
image.png
 
image.png

作者:_夏兮
链接:https://www.jianshu.com/p/d2fd02d4164b
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Jacoco统计web接口/功能测试的代码覆盖率【转】的更多相关文章

  1. jenkins+jacoco+ant+apache集成统计web端功能测试覆盖率

    一.覆盖率定义 作为一个测试人员,保证产品的软件质量是其工作首要目标,为了这个目标,测试人员常常会通过很多手段或工具来加以保证,覆盖率就是其中一环比较重要的环节. 我们通常会将测试覆盖率分为两个部分, ...

  2. jacoco统计server端功能测试覆盖率

    jacoco可以统计,功能测试时,server代码调用的覆盖情况.这里对服务器端的java代码进行统计.   操作步骤如下:   第一步:更改server的启动脚本,使用jacocoagent.jar ...

  3. 在网页中运用统计Web Service接口

    (2017-02-10 银河统计) 在"统计随机数及临界值Web Service接口"一文中介绍了常用统计分布四类Web Service接口(随机数.分位数.密度函数和累积分布函数 ...

  4. jacoco统计自动化代码覆盖率

    jacoco统计自动化代码覆盖率 1. 简介 1.1. 什么是Jacoco Jacoco是一个开源的代码覆盖率工具,可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以 ...

  5. 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言

    前    言 本书的原型是我整理一份Django学习文档,从事软件测试工作的这六.七年来,一直有整理学习资料的习惯,这种学习理解再输出的方式对我非常受用,博客和文档是我主要的输出形式,这些输出同时也帮 ...

  6. 《Python Web 接口开发与测试》---即将出版

    为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化相关的,工作中的接口自动化颇有成效. 我一直是一个没有测试大格局的人,在各种移动测试技术爆发的这一年,我却默默耕耘着自己的一亩三分地儿(We ...

  7. web接口开发与测试

    最近一直在学习和整理web开发与接口测试的相关资料.接口测试本身毫无任何难度,甚至有很多工具和类库来帮助我们进行接口测试.大多测试人员很难深入了解web接口测试的原因是对web开发不太了解,当你越了解 ...

  8. JMeter基于http请求的web接口性能测试总结

    [本文出自天外归云的博客园] 基于http请求的web接口性能测试总结 压测的目的:对于Web接口压测的目的最终是要在对数据库造成压力的情况下观察压测服务器的cpu是否达到预警值.memory是否发生 ...

  9. python WEB接口自动化测试之requests库详解

    由于web接口自动化测试需要用到python的第三方库--requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试. 所以笔者今 ...

随机推荐

  1. Spring中 PROPAGATION_REQUIRED 解释 事物是在一个方法里调用其他的方法,一起成功或者一起失败,是方法之间的关系,而不是某一个方法内部的问题。而且要以抛异常的方式来表明方法的失败,以此来导致事物起作用,大家全失败。

    事务传播行为种类 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为, 它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型 事务传播 ...

  2. 关于go get安装git golang项目时报错的处理办法

    关于go get安装git golang项目时报错的处理办法 使用go get安装github上的项目时一般来说,不可避免会出错.各种错误的处理办法: 必须条件: 1.安装git并配置环境变量.下载地 ...

  3. Django之setting文件

    Django之setting文件 转载:https://www.jb51.net/article/128678.htm 目录 设置语言.时区 app路径 数据库配置 静态文件配置 中间件 sessio ...

  4. Oracle date 详解

    oracle 数据类型详解---日期型 oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享:注:由于INTERV ...

  5. sql的简单操作

    mysql 一.mysql简介和安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应 ...

  6. AE 模板 素材 视频 科技 公安

    3d立体现代城市模型背景视频素材视频素材下载__熊猫办公 1080p 科技高速公路汽车奔驰背景视频视频素材下载__熊猫办公 高科技hud全息元素素材ae视频素材下载__熊猫办公 渲染输出,Adobe ...

  7. 【DWM1000】 code 解密9一 ANCHOR response poll message

    根据上面TAG发送的代码,我直接找到如下代码 case RTLS_DEMO_MSG_TAG_POLL: { if(inst->mode == LISTENER)                  ...

  8. IAR map 文件报告与Flash 大小关系

  9. 双向BFS—>NOIP2002 字串变换

    如果目标也已知的话,用双向BFS能很大提高速度 单向时,是 b^len的扩展. 双向的话,2*b^(len/2)  快了很多,特别是分支因子b较大时 至于实现上,网上有些做法是用两个队列,交替节点搜索 ...

  10. 3ds max学习笔记(十一)-- 修改器

    1.修改器列表: 将常用的修改器放放置在集里: 1.点击[配置]按钮,勾选[显示按钮] 选择[配置修改器集],在新出的弹窗里通过左右拖拽进行设置: 2,选择之后,点击[确定]进行保存: