jacoco可以统计,功能测试时,server代码调用的覆盖情况。这里对服务器端的java代码进行统计。
 
操作步骤如下:
 
第一步:更改server的启动脚本,使用jacocoagent.jar启动服务
 
1.下载jacocoagent.jar
http://www.jacoco.org/jacoco/index.html
 
jacocoagent.jar在下载的zip的./lib/目录下,使用方法-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]
 
2.修改启动server的参数,使用jacocoagent.jar记录服务的操作数据
启动项增加下面内容:
-javaagent:/opt/soft/jacoco/lib/jacocoagent.jar=destfile=/home/work/jacoco/${SERVICE_NAME}/${SERVICE_NAME}jacoco.exec,append=true,classdumpdir=/home/work/jacoco/${SERVICE_NAME/class/,includes=com.*,excludes=*.scf.*:*.entity.*:*.entitys.*,output=file"
 
说明:
1.javaagent:后面跟jacocoagent.jar的地址
2.destfile为输出的exec的保存地址,exec文件是用来分析覆盖率的
3.classdumpdir:agent调用到的所有class文件存储的位置
 
更多jacocoagent.jar的参数详见官网:http://www.eclemma.org/jacoco/trunk/doc/agent.html
 
 
第二步:生成覆盖率报告
1.下载jacoco的包(这里是使用maven进行下载)
<dependencies>
<!-- https://mvnrepository.com/artifact/org.jacoco/jacoco-maven-plugin --> <dependency> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.7.9</version> </dependency> </dependencies>

 
 
2.从服务器上拿生成的exec文件放到要生成报告的机器上
exec地址为启动脚本中destfile指定的文件
理论上不用杀server进程就可以直接copy到最新的exec文件,但是如果遇到报告结果是空的情况,可以考虑先kill server进程,再拷贝exec文件
 
3.创建工程,新建java类ReportGenerator,用来生成报告
import java.io.File;
import java.io.IOException;import org.jacoco.core.analysis.Analyzer; import org.jacoco.core.analysis.CoverageBuilder; import org.jacoco.core.analysis.IBundleCoverage; import org.jacoco.core.tools.ExecFileLoader; import org.jacoco.report.DirectorySourceFileLocator; import org.jacoco.report.FileMultiReportOutput; import org.jacoco.report.IReportVisitor; import org.jacoco.report.html.HTMLFormatter; public class testjacoco { private final String title; private final File executionDataFile; private final File classesDirectory; private final File sourceDirectory; private final File reportDirectory; private ExecFileLoader execFileLoader; public testjacoco(final File projectDirectory ) { this.title = projectDirectory.getName(); this.executionDataFile = new File(projectDirectory, "scfzzpostjacoco.exec");//覆盖率的exec文件地址 this.classesDirectory = new File(projectDirectory, "/");//目录下必须包含源码编译过的class文件,用来统计覆盖率。所以这里用server打出的jar包地址即可 // this.sourceDirectory =null; this.sourceDirectory = new File("/opt/RD_Code/server/zhuanzhuan_scf_zzpost_4-0-38_BRANCH/service/", "src/main/java");//源码的/src/main/java,只有写了源码地址覆盖率报告才能打开到代码层。使用jar只有数据结果 this.reportDirectory = new File(projectDirectory, "coveragereport");//要保存报告的地址  } public void create() throws IOException { loadExecutionData(); final IBundleCoverage bundleCoverage = analyzeStructure(); createReport(bundleCoverage); } private void createReport(final IBundleCoverage bundleCoverage) throws IOException { final HTMLFormatter htmlFormatter = new HTMLFormatter(); final IReportVisitor visitor = htmlFormatter .createVisitor(new FileMultiReportOutput(reportDirectory)); visitor.visitInfo(execFileLoader.getSessionInfoStore().getInfos(), execFileLoader.getExecutionDataStore().getContents()); visitor.visitBundle(bundleCoverage, new DirectorySourceFileLocator( sourceDirectory, "utf-8", 4)); visitor.visitEnd(); } private void loadExecutionData() throws IOException { execFileLoader = new ExecFileLoader(); execFileLoader.load(executionDataFile); } private IBundleCoverage analyzeStructure() throws IOException { final CoverageBuilder coverageBuilder = new CoverageBuilder(); final Analyzer analyzer = new Analyzer( execFileLoader.getExecutionDataStore(), coverageBuilder); analyzer.analyzeAll(classesDirectory); return coverageBuilder.getBundle(title); } public static void main(final String[] args) throws IOException { testjacoco generator = new testjacoco(new File("/opt/RD_Code/server/untitled/"));//传递工程目录  generator.create(); } }

说明:主要调用testjacoco()方法来做入口生成报告
1.this.title:报告的标题
2.this.executionDataFile:第一步生成的exec的文件
3.this.classesDirectory:源码的class文件,只要传递class所在的目录就可以(或者用编译过的jar包也可以),不传递会报错,用来统计覆盖率
4.this.sourceDirectory:源码目录,可以不赋值使用null,但这种覆盖率结果只有看到方法名级别,不能直接看到方法中具体的覆盖结果
5.new File():实际是获得第一个参数+第二个参数的地址,转为File对象
 
 
官方demo的源码:http://www.eclemma.org/jacoco/trunk/doc/examples/java/ReportGenerator.java
 
 
结果如下:
红色表示未覆盖,绿色表示覆盖到了,黄色表示覆盖到分支了
 
如果.this.sourceDirectory没有指定源码,是进入不了上面第二张图的
 
 
其他:jacoco还有很多其他接口,但是我不会用,如果大家有好的资料可以分享一下。
比如ExecutionDataServer这个方法应该可以远程获得服务的exec结果来分析但是我这里的结果一直是空的。有了解的可以说一下哈~

转载于:https://www.cnblogs.com/tiechui2015/p/10130048.html

jacoco统计server端功能测试覆盖率相关推荐

  1. android应用测试与调试实战_实战 | Java 服务端和 Android 端手工测试覆盖率统计的实现...

    本文为霍格沃兹测试学院优秀学员关于后端和 App 端手工测试覆盖率的学习笔记.测试开发进阶学习,文末加群. 一.前言 代码测试覆盖率工具流行了这么多年,已经有很多成熟方案比如 Jacoco,我司近一段 ...

  2. jacoco统计覆盖率最佳实践

    jacoco统计覆盖率最佳实践 jacoco总结 Jacoco安装 代码覆盖率介绍 行覆盖 分支覆盖 方法覆盖 覆盖率的误区 代码覆盖率意义 覆盖率报告解析 启动jacoco agent进行插桩 ** ...

  3. 还在担心漏测吗?快来使用jacoco统计下代码覆盖率

    大家日常工作过程中,不论是开发还是测试都有可能会被要求写单元测试用例,但是单元测试用例写得好不好如何衡量呢? 一般都需要借助工具来统计单元测试用例覆盖了多少业务代码.算法代码,覆盖率高的情况下,比如覆 ...

  4. 15、backbone实战:webchat(四)server端开发

    上一篇把web端构建了一下,这一篇来构建服务器端. 关于django开发应用,相比大家都已经熟悉了,不熟悉的可以移步到这里:django使用 webchat的整体目录结构还是同todos一样,有图有真 ...

  5. 代码覆盖率以及jacoco统计代码覆盖率的原理

    一.什么是代码覆盖率 简单来说,代码覆盖率是指,至少被执行了一次的条目数占整个条目数的百分比. 如果"条目数"是语句,对应的就是代码行覆盖率:如果"条目数"是函 ...

  6. springboot多模块工程单元测试jacoco统计代码覆盖率总结

    jacoco统计代码覆盖率的文章一搜一大堆,方法也很简单,就是在pom中引用两个插件: maven-surefire-plugin jacoco-maven-plugin 其中jacoco-maven ...

  7. 详解zabbix安装部署(Server端篇)

    Linux下常用的系统监控软件有Nagios.Cacti.Zabbix.Monit等,这些开源的软件,可以帮助我们更好的管理机器,在第一时间内发现,并警告系统维护人员. 今天开始研究下Zabbix,使 ...

  8. elasticsearch源码分析之search模块(server端)

    elasticsearch源码分析之search模块(server端) 继续接着上一篇的来说啊,当client端将search的请求发送到某一个node之后,剩下的事情就是server端来处理了,具体 ...

  9. linux下的c socket编程(4)--server端的继续研究

    linux下的C socket编程(4) 延长server的生命周期: 在前面的一个个例子中,server在处理完一个链接之后便会立即结束掉自己,然而这种server并不科学,server因该使能够一 ...

最新文章

  1. python可视化窗口制作一个摇骰子游戏_使用python制作一个抽奖小游戏——骰子游戏...
  2. GitHub 遭抵制!AI 代码生成神器竟成“抄袭工具”?
  3. 关于CE端口线路整改的建议
  4. java实现自动收红包功能_Java实现抢红包功能
  5. Teddy's Knowledge Base--基于.Net 2.0 (C# 2.0, ASP.NET 2.0)的快速开发框架设计NBear V2.0.0 [开源]...
  6. 面试题4,打印出100-999所有的“水仙花数”。
  7. 丁香园在语义匹配任务上的探索与实践
  8. Activiti 监听器的配置使用
  9. @scheduled 每30s 执行一次_荣耀30S正式发布:麒麟820 5G SoC/6400万像素AI四摄/40W超级快充...
  10. cass软件注记的字体类型和字体大小的问题
  11. 康佳电视维修记 LED55M5580AF
  12. 00002-微信小游戏--触摸事件
  13. 3个方法解决百度网盘限速 (2019-08-04 更新)
  14. 深入浅出SQLITE3
  15. eclipse代码文件误删恢复方法
  16. 【SegNet】 A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
  17. 技巧:修改Chrome默认搜索引擎为Google.com
  18. 云服务器BBC销售渠道,云服务器bbc
  19. OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f6cb1055000, 16384, 0) failed; erro
  20. 《MetaSploit渗透测试魔鬼训练营》之WEB应用渗透技术

热门文章

  1. 三千多天之前我没有编辑完的技术文档
  2. Visual Studio Code环境变量配置
  3. python不能安装pip_python – 无法安装pip:权限被拒绝错误
  4. 利用克鲁斯卡尔算法求最小生成树
  5. python 嵌套数组_兴趣是最好的老师,快速入门:十分钟学会python
  6. 定义入栈java_小师妹学JVM之:java的字节码byte code简介
  7. 服务器的系统如何入账,云服务器费用如何入账
  8. 安装spss显示JAVA_请问mac安装spss,出现“java for MacOS 2017-001”无法安装到磁盘。怎么办?...
  9. python线下课程厦门_厦门python课程
  10. Linux更改显示管理器,聊聊Linux操作系统中的显示管理器及如何更换