【问题标题】:How to run Karate with a Junit runner without using Maven如何在不使用 Maven 的情况下使用 Junit 跑步者运行空手道
【发布时间】:2021-04-06 23:07:11
【问题描述】:

我们严重依赖 Junit 运行器中的逻辑,目前使用 mvn test 调用它

逻辑主要包括

  1. 如果在命令行上指定了适当的 JVM 开关,则实例化 RuntimeHook 并将其绑定到 Runner.Builder().hook
  2. 如果在命令行上指定了适当的 JVM 开关,则再次使用模拟调用 Runner.Builder().clientFactory()
  3. 最后设置小东西,如Runner.Builder().tagsRunner.Builder().path

所有这些在今天都很完美。然而,我们主要的抱怨是 Maven 很慢。

有没有办法完成上述逻辑并在没有 Maven 昂贵的构建时间的情况下运行?

【问题讨论】:

  • Maven 很慢您如何确定是 Maven 花费了时间?
  • @chrylis-cautiouslyoptimistic- 运行更简单的测试不需要我们尝试使用 Maven 运行的 OP 中的逻辑,然后注意到使用此链接中所述的直接 Java 命令(例如空手道 Cli)在没有它的情况下运行非常快。 github.com/intuit/karate/wiki/Debug-Server#karate-cli

标签: java karate


【解决方案1】:

由于您混合了一些 Java 代码,我认为您将依赖 Maven 来构建 + 依赖项。也就是说,有一些方法可以让 Maven 将所有 JAR 依赖项转储到一个文本文件中。例如:

mvn dependency:build-classpath -Dmdep.includeScope=test -Dmdep.outputFile=classpath.txt

然后您可能可以直接使用java 二进制文件来构建命令,并且您可能已经知道com.intuit.karate.Main 支持所有扩展功能。坏消息是我认为我们还不支持自定义 HTTP 客户端之类的东西,您可以看到 this PR 有人为 RuntimeHook 执行此操作。也许你可以做出贡献。或者也许你在 Java 代码中有逻辑,所以直接调用空手道 Runner 可能是要走的路。

我认为您可能会使用的解决方案是 mvnd - 我还没有使用它,但我在 Twitter 上从我关注的一些经验丰富的 Java 人员那里听到了很好的消息。

【讨论】:

  • 感谢彼得提供的所有细节和想法。最终,我正在寻找一种方法,如果没有任何改变,就不要构建,而是立即运行测试。我注意到 IntelliJ 中的“运行”窗口并没有避免构建,但它在标准终端中的运行时间需要 4.xx 秒,而在它的“运行”窗口中只需要 2.xx。此外,商业版 Visual Studio 运行 MSBuild,并设置仅在检测到更改时重新构建,从而使测试执行速度更快,类似于在 cmdline 上运行 Karate.jar。
  • @SteveTremblay 好的,抱歉我没有更多的想法。我会认为省略clean 并且只使用test-compile 可能会做正确的事情,猜不
  • 有趣的是,使用 mvn test-compile 时测试不会运行。到目前为止我发现的最快的方法是使用mvn surefire:test。使用它的速度与 IntelliJ 一样快,也许是他们在后台使用的方法之一。仍然不如运行 Karate.jar 快。我会继续研究的。 mvnd 看起来很适合结账。
猜你喜欢
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 2022-08-20
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多