【问题标题】:Is there a way to run Karate tests as an integration test suite against a pre-booted spring boot server?有没有办法将空手道测试作为集成测试套件针对预启动的 Spring Boot 服务器运行?
【发布时间】:2020-03-23 17:38:12
【问题描述】:

有没有什么好方法可以让空手道测试在 Maven 构建的“集成测试”阶段测试 Spring-Boot 微服务?我的意思是:是否有一种反模式/解决方法可以很好地工作,或者我运气不好,因为这是空手道开发的事后想法?

到目前为止我收集到的事实:

  1. 这里说:“surefire 插件没有硬编码到空手道中” Is there a way to run Karate test during maven's integration test phase?

  2. 在 maven-failsafe-plugin 的上下文中运行空手道测试根本不起作用。在下面我的测试项目 url 上很容易重现。最重要的两个问题:

    1. 从 maven-failsafe 运行时,Karate 将生成 .txt 和 .html 文件,但不会生成 .json Cucumber 输出文件。
    2. 因此,您无法从黄瓜报告插件(我需要)获得任何 HTML 报告
  3. 我创建了一个项目来展示这些事实:https://github.com/djangofan/karate-api-sample

  4. 运行集成测试需要我在测试套件之前启动 Spring Boot,然后再停止 Spring Boot 服务器。 Maven SureFire 没有此功能,但 maven 故障安全插件有:maven build helper 插件有一个 pre-integration-test 钩子。仅受 Maven surefire 限制,我运气不好。

  5. 我在 karate/karate-demo 项目中看到了一个从代码启动 Spring Boot 服务器的示例。当我尝试测试已经建立的 Web 服务时,这并不容易实现。这是我唯一的选择:将surefire与类过滤器和代码一起使用来引导?

  6. 如果没有好的答案,我将恢复使用 cucumber-java + resteasy,我很确定它可以与 maven 故障安全一起使用:https://maven.apache.org/surefire/maven-failsafe-plugin/examples/cucumber.html

【问题讨论】:

    标签: karate spring-boot-test


    【解决方案1】:

    首先,这不是Karate.js 不确定它来自哪里:)

    从 maven-failsafe 运行时,Karate 将生成 .txt 和 .html 文件,但不会生成 .json Cucumber 输出文件。

    抱歉,无法复制。

    对于故障安全,只需使用命名约定即可,例如**/IT*.java

    Maven SureFire 不具备此功能,但 maven 故障安全插件具备:

    所以如上所述使用故障保护。如果您无法做到这一点,请更改您的项目以证明问题,我们承诺会修复它。另请参阅以下说明:https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

    如果没有好的答案,我将恢复使用 cucumber-java + resteasy

    这当然是你的选择。至少在我(有偏见的:) 意见中,您将miss all the JSON assertion value that Karate adds,以及并行执行+报告聚合。我相信您会尽可能提供帮助,以便我们可以为所有需要此解决方案的人提供更好的体验 - 但除此之外,嘿 - 不用担心:P

    【讨论】:

    • 好的,会的。我很惊讶您无法使用我已经创建的项目进行复制。您需要做的就是将 pom.xml 中的字符串 'surefire' 替换为 'failsafe',然后运行它,您将重现(至少部分重现)。我可以创建一个可以更详细地再现的新项目。
    • @djangofan 确保您严格按照说明进行操作:github.com/intuit/karate/wiki/How-to-Submit-an-Issue
    • 我试过了。事实证明我做不到,这是 Maven 的限制,而不是空手道。 stackoverflow.com/questions/10138559/… 。这是我的测试项目来证明这一点:github.com/djangofan/spring-boot-hello。感谢您引导我走上似乎是发现限制的正确途径。使用 Gradle 可能会解决我的问题,但这不是我项目的一个选项。如果我将空手道用于“分离的集成测试”,我需要一个单独的 mvn 测试模块。
    • @djangofan 非常感谢您的更新和链接,这将对其他人有所帮助
    • 我终于完成了这项工作,它大大减少了我在空手道测试中需要的样板代码量。基本上,我连接 Spring boot 以与 DB 和 JMS 对话,然后我的空手道测试使用它作为实际系统的代理。这意味着我的空手道测试因此是 100% 的 HTTP 调用,没有任何导入的 Java 类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2019-12-06
    • 2017-08-07
    • 2015-10-03
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多