原文: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. pyqt text browser 设置文本

    pyqt text browser 设置文本 setHtml(u"Html") setPlainText(u"纯文本") setText(u"文本\n ...

  2. scrapy 日志一般配置

  3. numpy学习笔记.

    import numpy as np import cv2 import matplotlib.pyplot as plt 一.数组的创建 1. 创建二维数组 np.array([ [1,2,3], ...

  4. Python并发复习2 - 多线程模块threading

    一.多线程的调用 threading 模块建立在thread 模块之上.thread模块以低级.原始的方式来处理和控制线程,而threading 模块通过对thread进行二次封装, 提供了更方便的a ...

  5. 你有所不知的<script>元素

    向html页面中插入javascript的主要方法,就是使用<script>元素. <script>定义了下列6个属性: async:可选.表示应该立即下载脚本,但不应妨碍页面 ...

  6. linux 命令基础一。

    UNIX是什么 UNIX的定义: UNIX是一个计算机操作系统,一个用来协调.管理和控制计算机硬件和软件资源的控制程序. UNIX操作系统的特点:多用户和多任务多用户表示在同一时刻可以有多个用户同时使 ...

  7. vuex那些事儿

    vuex适用于大型单页应用.每一个Vuex应用的核心就是store(仓库),store中储存大量状态,Vuex的状态存储是响应式的.vuex使用单一状态树,一个对象包含了全部的应用层级状态,每个应用仅 ...

  8. Squid快速入门(yum安装)

    加油站代理服务器 前言 Squid是一个Linux系统下优秀的代理服务器软件.Squid可以配置普通上网代理(正向代理).反向代理.透明代理.Squid接收用户的下载申请,并自动处理所下载的数据.当一 ...

  9. C#中的集合之ArryList

    List泛型集合 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一. 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList 直接 ...

  10. CC2431 代码分析③-忍辱负重的CC2430

    这节主要分析CC2430的代码,是参考节点的代码,协调器代码我们放到最后分析. 代码分析的原则是事件为导向,我们从CC2431 盲节点code的分析中发现CC2431 向CC2430参考节点发送的信息 ...