【问题标题】:Running jacoco report where integration tests are in one code base and source code is in another code base运行 jacoco 报告,其中集成测试在一个代码库中,而源代码在另一个代码库中
【发布时间】:2018-06-07 13:01:05
【问题描述】:

我最近开始为 maven 项目创建 jacoco 报告,包括单元测试和集成测试,它们似乎运行正常。 现在我遇到了一个不同的场景,我不确定如何处理。 我有一个由集成测试用例组成的工作区 - 应用程序 A,但源代码不存在于同一个工作区/代码库中。在调用这些集成测试脚本时实际运行的源代码位于不同的工作区/代码库 - 应用程序 B(它们是使用带有 localhost url 的 rest api 调用调用的。jboss 服务器为应用程序 B 启动,因此 localhost 上下文是up)来自集成测试。 目的是从应用程序 A 调用这些集成测试,然后应用程序 B 中调用这些测试的源代码,为应用程序 B 生成代码覆盖率的 jacoco 报告。 我实际上不确定如何实现这一目标。 有人可以提供一些意见吗?

谢谢。

【问题讨论】:

    标签: maven jacoco


    【解决方案1】:

    如果我理解正确,您的场景中实际上有 2 个不同的过程:

    • 运行集成测试并且可以轻松应用 jacoco 的“客户端”进程,但这不是您所需要的

    • 运行实际 JBoss 服务器并执行实际代码的“服务器”进程。

    客户端进程通过 HTTP 联系服务器。

    在这种情况下,如果您从 maven/gradle 运行测试,恐怕 jacoco 将无法为您提供覆盖率,因为 jacoco 仅在运行时检测字节码JVM。所以你必须在这里“有创意”:)

    我将在这里列出一些可能的方法 免责声明:虽然我没有尝试过(不适用于 jboss/java ee),但也许你至少可以借用一些想法

    第一种方法会以某种方式与应用程序一起运行测试,例如在 spring 测试中所做的那样(我不确定 JBoss 是否提供类似的功能)。

    这个想法很简单:

    • 您运行集成测试,它运行“嵌入在同一个 jvm 中”的 jboss,您可以将 bean/EJB 会话 bean 注入到测试中(如使用 spring 自动装配)。

    这种方法的优点是你可以只使用 jacoco maven 插件,它会为你提供一切

    我不知道在技术上实现这个架构有多容易,我知道最近的 jboss 版本支持嵌入式模式,所以也许你会发现This link 是一个有用的基础

    另一个方向是看看Arquillian项目。他们有一些 jacoco 扩展可能会有所帮助,但我从未尝试过。

    最后一种方法我能想到的就是直接用 jacoco 代理运行 jboss 服务器,而不是依赖为你运行 jacoco 的构建系统。

    这里的想法是将覆盖的服务器代码的结果流式传输到某个文件/tcp端点。因此,您使用-javaagent:[yourpath/]jacocoagent.jar 运行 jboss,它会在您需要流式传输的任何地方开始流式传输结果。测试后,您应该收集这些结果并准备一份报告。你可以找到Here更多关于这种方法的信息

    【讨论】:

    • 非常感谢 Mark 的详细解释。回顾了这些方法,我认为使用 jacocoagent.jar 的最后一种方法也许我可以尝试一下。
    • 所以,如果我理解正确,需要将 jacocoagent.jar 文件位置作为 JVM 参数添加到应用程序 B(服务器)的 jboss 服务器上。那么我是否必须在服务器应用程序 pom.xml 或客户端应用程序 pom.xml 或两者中设置任何特定的 jacoco 配置?我看到了使用“转储”目标和“报告集成”或“报告聚合”目标的几个选项。但我不认为我对这个特定场景的 jacoco 设置步骤有很多清楚的了解。可以请教吗?
    • 这真的取决于你如何运行 jboss。 -javaagent 选项是 jvm 的“通用”选项,它允许在“main”方法之前运行东西。 Jacoco 使用这个钩子对一组给定的类执行字节码检测(例如,您应该能够过滤掉您不想为其生成覆盖的类)。因此 jboss 可以使用来自 maven 的 java:exec 插件运行(在这种情况下,您应该将 javagent 指定为插件配置),或者通过外部脚本等
    • 嘿,马克,我能够为在服务器代码上运行的集成测试生成 jacoco.exe。但是报告目标似乎失败了,我尝试了“report-integration”,“report”,“report-aggregate”,但没有生成报告文件,jacoco.exec 在与 pom 相同的文件夹中的父项目中创建.xml,但是由于代码的源类不在同一个director中,所以没有生成报告?
    • 我尝试使用 mvn jacoco:report 但它说由于缺少数据而跳过执行。不知道为什么,我是否需要在 mvn jacoco:report 中传递任何特定选项才能生成报告。任何帮助将不胜感激。
    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2018-01-26
    • 2017-06-19
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多