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

摘要:
Jacobo可以计算函数测试期间服务器代码调用的覆盖率——https://mvnrepository.com/artifact/org.jacoco/jacoco-maven-plugin--˃组织。jacoco</groupId><artifactId>jacoco maven插件</artifactId><version>0.7.9,请考虑先终止服务器进程,然后复制exec文件。3.创建一个项目和一个新的java类ReportGenerator,以生成报告importjava.io。文件importjava.io。IOException;importorg.jacoco.core分析。分析仪;importorg.jacoco.core分析。CoverageBuilder;importorg.jacoco.core分析。IBundleCoverage;importorg.jacoco.core.tools。ExecFileLoader;importorg.jacoco.report。DirectorySourceFileLocator;importorg.jacoco.report。文件多报告输出;importorg.jacoco.report。IReportVisitor;importorg.jacoco.report.html。HTML格式设置工具;publicclasstestjacoco{privatefinalStringtitle;privatefinaalFileexecutionDataFile;privatefinalFileclassesDirectory;privateinalFilesourceDirectory;private finalFilereportDirectory;privatesExecFileLoaderexecFileLoader;publictestjacoco{thist.title=projectDirectory.getName() ; 这executionDataFile=newFile;//覆盖范围的exec文件地址为this classesDirectory=newFile;//目录必须包含源代码编译的类文件才能计算覆盖率。
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对象
 
 
jacoco统计server端功能测试覆盖率第1张

原文地址https://www.cnblogs.com/meitian/p/7151437.html

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

免责声明:文章转载自《jacoco统计server端功能测试覆盖率》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇常见的php攻击(6种攻击详解)HttpServletResponse和HttpServletRequest的简单实用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IIS部署

一、下载IIs 控制面板——》程序——》程序与功能——》启动或关闭windows功能 二、打开IIs         三、以管理员方式启动项目                     四、发布之后打断点测试你的项目 下面就在你需要的位置打上断点,在启动项目。这样就可以发布和测试一起进行。这个操作可以接收接口。因为你需要提供一个url,让其他...

为什么测试覆盖率如此重要

摘要:就软件质量而言,测试覆盖率是软件测试中的重要指标。接下来一起了解测试范围、测试技术,测试标准以及如何改进它。 由于软件中普遍存在的错误,全世界都见证了一些灾难性事件。2008年在英国希思罗机场5号航站楼开业。 工程师对终端的工作充满信心,这与他们的严格测试标准有关。由于行李处理系统在现实情况运行时陷入了瘫痪,导致系统完全关闭。在接下来的10天里,大约...

Web测试——翻页功能测试用例

参考:https://wenku.baidu.com/view/e6462707de80d4d8d15a4f1e.html?rec_flag=default&mark_pay_doc=2&mark_rec_page=1&mark_rec_position=5&mark_rec=view_r_1&clear_uda_p...

【转】WEB测试要点总结

一、输入框 1、字符型输入框: (1)字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符“~!@# ¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,使用“粘贴、拷贝”功能尝试输入。 (2)长度检查:最小长度、最大长度、最小长度-1、最大长度+1、输入超工字符比如把整个文章拷贝过去。 (3)空格检查:输入的...

[转]敏捷开发中编写高质量Java代码

本文转自:http://dev.yesky.com/103/11164603.shtml 敏捷开发的理念已经流行了很长的时间,在敏捷开发中的开发迭代阶段中,我们可以通过五个步骤,来有效的提高整个项目的代码质量。 Java项目开发过程中,由于开发人员的经验、Java代码编写习惯,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维 护,需要...

intellij code coverage (转)

使用intellij已经有一段时间了,苦于没有一个覆盖率查看工具。我们知道在eclipse下面有eclemma这一测试覆盖率查看工具,可以查看到你所写的测试用例覆盖到代码中的哪些行,非常的方便。 其实在intellij 11中,也引入了覆盖率查看工具,coverage(默认已经集成在IDE中) 下面给大家简单介绍下这一工具的使用流程: 1. 选择你要执行的...