【问题标题】:How to get JaCoCo instrumentation code coverage while executing webApplication on server如何在服务器上执行 webApplication 时获得 JaCoCo 检测代码覆盖率
【发布时间】:2017-06-27 06:00:18
【问题描述】:

当我在实时应用程序上执行某些场景时,即当应用程序在服务器中运行时,我想获得一份代码覆盖率报告(或跟踪应用程序的控制器流程),所以我参考了官方Jacoco documentation 并做了休闲

作为第一步,我尝试将 jacoco 代理绑定到应用程序运行端口

export MAVEN_OPTS=-javaagent:/home/user/.m2/repository/org/jacoco/org.jacoco.agent/0.7.4.201502262128/org.jacoco.agent-0.7.4.201502262128-runtime.jar=includes=*,output=tcpserver,port=6300,address=*,dumponexit=true  

然后我已经启动了服务器并执行了一些测试场景,那时我还请求 jacoco 通过执行以下命令来获取转储

 mvn jacoco:dump

当我首先执行上述命令时,它显示为 java.net.BindException: Address already in use 然后它打印为 fallows

[INFO] Connecting to localhost/127.0.0.1:6300

当我停止服务器时 jacoco.exec 在我请求通过执行以下命令生成 jacoco 报告后已生成到那里的已知位置

mvn jacoco:report

最后我得到了报告,但是当我打开 index.html 页面时,它显示了0% 覆盖范围。

您可以通过以下示例 Spring MVC 项目重现我的困难

请从 Github 的 https://github.com/mkyong/spring4-mvc-ajax-example 下载 Spring MVC 项目

在我的例子中,我使用 WildFly 8.x 服务器来运行项目并将以下依赖项添加到下载的项目 pom.xml

 maven-surefire-plugin of 2.19.1 version
 jacoco-maven-plugin of 0.7.4.201502262128 version 
 junit of 4.12 version

然后使用以下命令清理并构建项目。

mvn clean install

完成后,从项目的目标文件夹中获取 .war 文件并保存在 wildfly serverwildfly-9.0.0.CR2/standalone/deployments/ 文件夹中

部署 .war 后,转到/wildfly-9.0.0.CR2/bin/ 文件夹并执行/运行./standalone.sh 文件,或者根据平台,您可以运行.dat/.sh 文件

一旦项目部署完毕并启动服务器,执行以下命令

mvn jacoco:dump

它显示为正在收听/连接到localhost/127.0.0.1:6300

然后执行一些测试场景并执行以下maven命令

mvn jaococ:report

最终将生成覆盖率为 0% 的报告!。

下载的项目可以在MKyong website找到

请帮助我获取代码覆盖率报告,我们将不胜感激。

【问题讨论】:

    标签: jacoco jacoco-maven-plugin test-reporting


    【解决方案1】:

    JaCoCo 需要与执行时使用的完全相同的类文件来生成报告,所以

    无论哪种情况,都要检查日志中是否存在警告。

    更新问题

    这是我所做的:

    • 下载并解压 JaCoCo 0.7.9 到/tmp/jacoco/jacoco-0.7.9
    • 下载并解压 Wildfly 9.0.0.CR2 到 /tmp/jacoco/wildfly-9.0.0.CR2
    • https://github.com/mkyong/spring4-mvc-ajax-example 克隆到/tmp/jacoco/spring4-mvc-ajax-example 并构建为mvn verify
    • 已将/tmp/jacoco/spring4-mvc-ajax-example/spring4-mvc-maven-ajax-example-1.0-SNAPSHOT.war 复制到/tmp/jacoco/wildfly-9.0.0.CR2/standalone/deployments
    • Wildfly 以 JAVA_OPTS=-javaagent:/tmp/jacoco/jacoco-0.7.9/lib/jacocoagent.jar=output=tcpserver ./standalone.sh 开始,并有足够的时间来部署应用程序
    • 在目录/tmp/jacoco/spring4-mvc-ajax-example 中执行mvn org.jacoco:jacoco-maven-plugin:0.7.9:dump org.jacoco:jacoco-maven-plugin:0.7.9:report(注意使用的代理版本与jacoco-maven-plugin 的版本匹配),因此它创建了/tmp/jacoco/spring4-mvc-ajax-example/jacoco.exec 并报告/tmp/jacoco/spring4-mvc-ajax-example/site/jacoco
    • 打开http://localhost:8080/spring4-mvc-maven-ajax-example-1.0-SNAPSHOT/ 并做了一些操作
    • 再次执行mvn org.jacoco:jacoco-maven-plugin:0.7.9:dump org.jacoco:jacoco-maven-plugin:0.7.9:report 以获得更新的报告:

    【讨论】:

    • 感谢您的回复,我收到了报告,它包含类,但代码覆盖率为 0%,请您建议匹配运行时使用的类的方法,或者请告诉我如何获得运行时类
    • 我认为 jacoco 应该与 JVM / 服务器绑定以获取运行时类,或者请告诉我如何在运行时跟踪控制器流
    • @RajeshHatwar 在服务器上运行时使用的类文件应该与在报表生成期间使用的类文件完全相同
    • 请让我澄清这一点,Dose JACOCO 显示了 Web 应用程序的代码覆盖率,没有任何单元测试用例并在 Web 浏览器上手动执行测试场景
    • @RajeshHatwar 是的 - 你如何执行应用程序并不重要
    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 2019-01-02
    • 2012-11-02
    相关资源
    最近更新 更多