【问题标题】:Using mocks in Karate DSL feature file with stanalone run在空手道 DSL 功能文件中使用模拟与 stanalone 运行
【发布时间】:2018-10-08 19:40:02
【问题描述】:

我有 REST 服务,用不同于 Java 的语言编写。 它与其他 REST 服务几乎没有依赖关系。

例如正在开发和测试的服务是A,其他服务分别是BC

我想为 A 运行系统测试,有些测试需要 B 或/和 C 在线并执行来自 的查询>一个

我编写了 b-mock.featue 和 c-mock.feature 来表示模拟中的服务。

我还写了一些 a-test-smth.feature 文件来针对 A

运行测试

是否可以在 a-test-smth.feature 中添加一些信息来启用一些模拟进行具体测试?

现在我应该运行两次独立的 karate.jar,首先 - 用于模拟。第二 - 用于运行测试。这种方法有效,但是,我无法检查:

  • A 的某些 API 调用不需要 BC
  • 无法模拟服务 B 宕机或例如响应缓慢或错误的响应提取

谢谢。

【问题讨论】:

    标签: karate


    【解决方案1】:

    你在使用 Java 吗?如果是这样,那么最好的方法是在 Java 代码中执行测试设置。您可以为 B 和 c 启动 2 个模拟,然后然后为您的服务 A 启动主测试。如果需要,最后进行清理。

    你可以参考这个例子:https://github.com/intuit/karate/tree/master/karate-netty#consumer-provider-example

    第 3 行展示了如何开始模拟和运行空手道测试。

    如果您不使用 Java 并且想只使用独立 JAR,实际上可以使用 Java-interop 并且非常简单,我刚刚尝试过。

    编辑:此 API 现在已内置于空手道中,因此您无需在下面编写额外的 JS 代码:https://github.com/intuit/karate/tree/master/karate-netty#within-a-karate-test

    (已过时)

    首先创建一段足够聪明的 JavaScript 代码来启动一个空手道模拟:

    function() {
      var Mock = Java.type('com.intuit.karate.netty.FeatureServer');
      var file = new java.io.File('src/test/java/mock/web/cats-mock.feature');
      var server = Mock.start(file, 0, false, null);
      return server.port;
    }
    

    这就是它在主要空手道测试的Background 中的外观。如果需要,您可以了解如何执行一些条件逻辑,并且您有很多方法可以根据您的环境进行更改。

    Background:
        * def starter = read('start-mock.js')
        * def port = karate.env == 'mock' ? starter() : 8080
        * url 'http://localhost:' + port + '/cats'
    

    这能回答你的问题吗?让我知道,我会将这个技巧添加到文档中!

    【讨论】:

    • 是的,我没有在希望使用空手道 DSL 的项目中使用 Java。 Java-interop 工作正常,并且提供的解决方案按预期工作!非常感谢!还有一件事,与运行测试用例有关。现在(在测试之前我使用 JS 开始模拟之后),测试没有用退出代码完成,它冻结了,就像我运行简单模拟时一样。我需要用手中止它。我想在 CI 中使用它,所以需要优雅地完成退出。我认为它可能是在场景之后调用的处理程序,它关闭了模拟。这可能吗?
    • @KonstantinMalinin 您可以通过简单的 GET 优雅地退出模拟,请尝试让我知道:github.com/intuit/karate/tree/master/karate-netty#stopping - 如果这不起作用,您可以在服务器参考上调用 stop()跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多