Jacoco远程统计tomcat服务(Windows系统)的代码覆盖率

2017-09-21

目录

1 Jacoco的安装和设置
  1.1 什么是Jacoco?
  1.2 Jacoco安装
  1.3 Tomcat配置
2 在客户端进行功能测试或接口测试
3 Ant安装与配置
  3.1 安装
  3.2 配置build.xml
4 生成代码覆盖率报告
5 查看结果

开发在做单元测试时,通过开发工具的插件很容易得到测试代码覆盖率。当软件部署好之后,我们通过功能测试或接口测试,能否得到代码覆盖率?Jacoco可以通过JavaAgent技术监控Java程序的到代码覆盖率。

此文介绍java Agent的'tcpserver' output方法,用此方法时,JavaAgent会监听服务器端设置()的TCP port,然后把收集到的信息(jacoco.exec)写入TCP connection。然后通过jacocoant在客户端把收集的信息(jacoco.exec)从TCP connection拉取到客户端,在根据收集到信息(jacoco.exec)和源代码生成覆盖率report。

1 Jacoco的安装和设置


返回

1.1 什么是Jacoco?

Jacoco是一个开源的Java代码覆盖率工具,Jacoco可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等。

1.2 Jacoco安装

官网地址:http://www.eclemma.org/jacoco/ (这里下载了jacoco-0.7.4.201502262128.zip版本)

下载后加压到目录:D:\CodeCoverage\jacoco

1.3 Tomcat配置

1 关闭Tomcat:双击安装目录下的 D:\tomcat\bin\shutdown.bat (window是bat扩展名、Linux是sh扩展名)

2 修改D:\tomcat\bin\catalina.bat,在第一行添加如下脚本:

set JAVA_OPTS=-javaagent:D:\CodeCoverage\jacoco\lib\jacocoagent.jar=includes=*,output=tcpserver,address=172.31.1.32,port=6300,append=true

JVM option 格式:-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]

官方文档:http://www.eclemma.org/jacoco/trunk/doc/agent.html

3 启动Tomcat:双击安装目录下的 D:\tomcat\bin\startup.bat

4 验证JAVA_OPTS是否有修改正确

使用WMIC命令

vmic
process where name="java.exe"

若显示一下内容,表示修改成功
java.exe  "D:\Java\jdk1.8.0_91\bin\java.exe"  -javaagent:D:\CodeCoverage\jacoco\lib\jacocoagent.jar=includes=*,output=tcpserver,address=172.31.1.32,port=6300,append=true

图1 process WMIC

2 在客户端进行功能测试或接口测试


返回

1 测试对象:SpringMVC HelloWorld实例开发及部署

2 功能测试:输入url:http://localhost:8080/HelloSpringMVC/saveResult

说明:在功能测试过程中javaagent会收集覆盖到的代码

3 Ant安装与配置


返回

3.1 安装

1 官方网址: http://ant.apache.org -> download -> binary distribute apache-ant-1.9.9-bin.zip

  解压到:D:\CodeCoverage\ant

2 验证安装是否成功

  在安装目录D:\CodeCoverage\ant\bin下执行命令:ant -version

3.2 配置build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="plate_id_sample_service" xmlns:jacoco="antlib:org.jacoco.ant">
    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
        <classpath path="D:\CodeCoverage\jacoco\lib\jacocoant.jar"/>
    </taskdef>

    <target name="dump">
        <!-- address和port和catalina.bat设置保持一致,destfile设置jacoco.exec保存地址 -->
        <jacoco:dump address="172.31.1.32" reset="true" port="6300" destfile="D:\CodeCoverage\jacoco\jacoco.exec"/>
    </target>

    <target name="report">
        <jacoco:report>
            <executiondata>
                <file file="D:\CodeCoverage\jacoco\jacoco.exec"/>
            </executiondata>

            <structure name="Example Project">
                <!-- 可以按软件功能模块设置多个group,方便在report中查看 -->
                <group name="SpringMVC">
                    <classfiles>
                        <!--.class文件路径,可以放在客户端-->
                        <fileset dir="D:\CodeCoverage\project\HelloSpringMVC\classes"/>
                    </classfiles>
                    <sourcefiles encoding="gbk">
                        <!--源代码路径,可以放在客户端-->
                        <fileset dir="D:\CodeCoverage\project\HelloSpringMVC\java" />
                    </sourcefiles>
                </group>
            </structure>

            <!-- report文件保存地址 -->
            <html destdir="D:\CodeCoverage\jacoco\report"/>

        </jacoco:report>
    </target>
</project>

4 生成代码覆盖率报告


返回

在ant安装目录运行ant dump命令,把jacoco.exec拉取到build.xml设置的客户端路径

在ant安装目录运行ant report命令,根据build.xml设置jacoco.exec、class和java文件地址生成report

图2 ant命令

5 查看结果


返回

若build.xml没有设置源代码java的地址,就看不到代码内容的覆盖情况,最细只能看到方法的覆盖率统计

图3 覆盖率报表

Jacoco远程统计tomcat服务(Windows系统)的代码覆盖率的更多相关文章

  1. Jacoco远程统计代码覆盖率

    Jacoco   什么是Jacoco? Jacoco是一个开源的Java代码覆盖率工具,Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAg ...

  2. Tomcat在windows系统中的防火墙设置

    在Win7下安装Tomcat后,其他机器无法访问到Tomcat服务,需要修改防火墙设置. 控制面板->window防火墙->允许程序通过Windows防火墙通信 将Tomcat目录下\bi ...

  3. Tomcat 加入windows 服务自启动设置

    基于J2ee技术开发,可以运行在Tomcat.weblogic.websphere等J2ee应用服务器上,对于一般访问量不是很高的客户我们推荐使用Tomcat(开源免费),一般情况下Tomcat服务需 ...

  4. Windows系统使用putty远程连接DigitalOcean创建的Linux系统(CentOS6.7为例)

    大部分vps提供网站都会在网站上提供一个控制台界面,方便操作远程vps.但是使用起来特别不方便,尤其在一个神奇的国家,打开国外网站都困难,何况还要在网站上不断的操作.这一教程记录如何在Windows系 ...

  5. 启用“关闭自动根证书更新”,解决Windows系统各种卡顿的问题(Visual studio 卡、远程桌面mstsc卡、SVN卡)

    最近,发现在Win7下面一系列操作都会出现卡顿的情况: 1.  Visual studio 启动调试和关闭调试时,都会卡上半分钟左右 2.  使用远程桌面mstsc.exe,点击连接时,也会卡上半分钟 ...

  6. Windows服务器nginx+tomcat服务负载均衡

    一.安装两个tomcat服务自启动 1. 解压两个tomcat,名称为分别1,2 2. 配置环境变量 3. 修改文件server.xml中的三个端口号,使得两个tomcat不冲突 (1)<Ser ...

  7. Windows系统下远程Linux系统

    Windows系统下远程Linux系统 工具:Xmanager 启动界面: 配置保存路径(win7): C:\Users\Administrator\AppData\Roaming\NetSarang ...

  8. Windows平台Tomcat服务搭建

    1. 下载  JDK下载 下载地址 Tomcat下载 下载地址 2. 安装配置  JDK安装配置 安装过程不再赘述. 配置: 环境变量:  JAVA_HOME,变量值为:C:\JDK(具体请根据JDK ...

  9. Linux下tomcat服务

    一:Linux下tomcat服务的启动.关闭与错误跟踪,使用PuTTy远程连接到服务器以后,通常通过以下几种方式启动关闭tomcat服务:切换到tomcat主目录下的bin目录(cd usr/loca ...

随机推荐

  1. 慕课网-Java入门第一季-6-7 使用 Arrays 类操作 Java 中的数组

    来源:http://www.imooc.com/code/1556 Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现 ...

  2. JAVA中的枚举小结

    枚举 将一组有限集合创建为一种新的类型,集合里面的值可以作为程序组件使用: 枚举基本特性 以下代码是枚举的简单使用: 使用values方法返回enum实例的数组 使用ordinal方法返回每个enum ...

  3. 支付宝APP支付开发- IOException : DerInputStream.getLength(): lengthTag=127, too big.

    支付宝APP支付Java开发报错: IOException : DerInputStream.getLength(): lengthTag=127, too big. 后来排查是因为没有设置私钥.

  4. 【python】An Introduction to Interactive Programming in Python(week two)

    This is a note for https://class.coursera.org/interactivepython-005 In week two, I have learned: 1.e ...

  5. 【转载】Android app 安全测试调研及执行

    本文来源于:http://testerhome.com/topics/2209 一.通过在线工具进行测试 1.腾讯金刚审计系统http://service.security.tencent.com 优 ...

  6. 基于spring-boot的web应用,ckeditor上传文件图片文件

    说来惭愧,这个应用调试,折腾了我一整天,google了很多帖子,才算整明白,今天在这里做个记录和分享吧,也作为自己后续的参考! 第一步,ckeditor(本博文论及的ckeditor版本4.5.6)的 ...

  7. PXC的原理

    http://www.blogs8.cn/posts/AWif6E4 mariadb的集群也是抄percona的,原理跟PXC一样maridb-cluster就是PXC,原理是一样的.codeship ...

  8. android xml的生成与解析

    Main java package com.itheima.xml; import android.app.Activity; import android.content.Context; impo ...

  9. ajax中的post方法中回调函数不执行的问题

    前一段时间接触了JQuery Ajax中的.post()方法和.get()方法,感觉到ajax的简洁和强大,当用到.post()方法时,去W3上查找相关的使用方法,感觉十分简单,用法很明了,然后,直接 ...

  10. 【Objective-C】3 -self关键字

    一.Java中的this只能用在动态方法中,不能用在静态方法中 1.在动态方法中使用this关键字 1 public class Student { 2 private int age; 3 publ ...