运行 jacoco 报告集成测试在一个代码库中,源代码在另一个代码库中
Running jacoco report where integration tests are in one code base and source code is in another code base
我最近开始为 maven 项目创建 jacoco 报告,包括单元和集成测试,它们似乎运行正常。
现在我遇到了一个不同的场景,我不知道如何处理。
我有一个由集成测试用例组成的工作区 - 应用程序 A,但源代码不存在于同一个 workspace/code 库中。在调用这些集成测试脚本时实际运行的源代码位于不同的 workspace/code 基础 - 应用程序 B(它们是使用带有本地主机 url 的 rest api 调用来调用的。jboss 服务器是从集成测试开始为应用程序 B 启动本地主机上下文)。
目的是从应用程序 A 调用这些集成测试,后者又在应用程序 B 中调用这些测试的源代码,生成应用程序 B 的代码覆盖率的 jacoco 报告。
我实际上不确定如何实现这一目标。
有人可以提供一些意见吗?
谢谢。
如果我没理解错的话,在你的场景中实际上有 2 个不同的进程:
运行集成测试的"client"过程,可以轻松应用jacoco,但这不是你需要的
"server" 进程 运行 是实际的 JBoss 服务器并执行实际代码。
客户端进程通过 HTTP 联系服务器。
在这种情况下,如果您运行从maven/gradle[=进行测试,恐怕 jacoco 将无法为您提供覆盖范围 53=],因为 jacoco 只检测 运行ning JVM 上的字节码。所以你必须"creative"在这里:)
我将在这里列出一些可能的方法
免责声明:虽然我还没有尝试过它们(没有与 jboss/java ee 一起工作),但也许你至少可以借鉴一些想法
第一种方法 运行 以某种方式将测试与应用程序结合在一起,就像在 spring 测试中所做的那样(我是不确定 JBoss 是否提供类似的功能)。
想法很简单:
- 你 运行 集成测试,它 运行 是 jboss "embedded in the same jvm" 并且你可以将 beans / EJB 会话 bean 注入到测试中(就像自动装配 spring).
这种方法的优点是你可以只使用 jacoco maven 插件,它会为你检测一切
我不知道在技术上实现这个架构有多容易,我知道最近的 jboss 版本支持嵌入式模式,所以也许你会发现 This link 是一个有用的基础
另一个方向是看看Arquillian项目。他们有一些 jacoco 扩展可能会有所帮助,但我从未尝试过。
我能想到的最后一种方法是运行直接使用jacoco代理连接jboss服务器,而不是依赖构建系统运行s jacoco 给你。
这里的想法是将覆盖的服务器代码的结果流式传输到某个文件/tcp 端点。因此,您 运行 jboss 和 -javaagent:[yourpath/]jacocoagent.jar
并且它会在您需要流式传输的任何地方开始流式传输结果。测试后,您应该收集这些结果并准备一份报告。您可以找到 Here 有关此方法的更多信息
我最近开始为 maven 项目创建 jacoco 报告,包括单元和集成测试,它们似乎运行正常。 现在我遇到了一个不同的场景,我不知道如何处理。 我有一个由集成测试用例组成的工作区 - 应用程序 A,但源代码不存在于同一个 workspace/code 库中。在调用这些集成测试脚本时实际运行的源代码位于不同的 workspace/code 基础 - 应用程序 B(它们是使用带有本地主机 url 的 rest api 调用来调用的。jboss 服务器是从集成测试开始为应用程序 B 启动本地主机上下文)。 目的是从应用程序 A 调用这些集成测试,后者又在应用程序 B 中调用这些测试的源代码,生成应用程序 B 的代码覆盖率的 jacoco 报告。 我实际上不确定如何实现这一目标。 有人可以提供一些意见吗?
谢谢。
如果我没理解错的话,在你的场景中实际上有 2 个不同的进程:
运行集成测试的"client"过程,可以轻松应用jacoco,但这不是你需要的
"server" 进程 运行 是实际的 JBoss 服务器并执行实际代码。
客户端进程通过 HTTP 联系服务器。
在这种情况下,如果您运行从maven/gradle[=进行测试,恐怕 jacoco 将无法为您提供覆盖范围 53=],因为 jacoco 只检测 运行ning JVM 上的字节码。所以你必须"creative"在这里:)
我将在这里列出一些可能的方法 免责声明:虽然我还没有尝试过它们(没有与 jboss/java ee 一起工作),但也许你至少可以借鉴一些想法
第一种方法 运行 以某种方式将测试与应用程序结合在一起,就像在 spring 测试中所做的那样(我是不确定 JBoss 是否提供类似的功能)。
想法很简单:
- 你 运行 集成测试,它 运行 是 jboss "embedded in the same jvm" 并且你可以将 beans / EJB 会话 bean 注入到测试中(就像自动装配 spring).
这种方法的优点是你可以只使用 jacoco maven 插件,它会为你检测一切
我不知道在技术上实现这个架构有多容易,我知道最近的 jboss 版本支持嵌入式模式,所以也许你会发现 This link 是一个有用的基础
另一个方向是看看Arquillian项目。他们有一些 jacoco 扩展可能会有所帮助,但我从未尝试过。
我能想到的最后一种方法是运行直接使用jacoco代理连接jboss服务器,而不是依赖构建系统运行s jacoco 给你。
这里的想法是将覆盖的服务器代码的结果流式传输到某个文件/tcp 端点。因此,您 运行 jboss 和 -javaagent:[yourpath/]jacocoagent.jar
并且它会在您需要流式传输的任何地方开始流式传输结果。测试后,您应该收集这些结果并准备一份报告。您可以找到 Here 有关此方法的更多信息