在空手道 DSL 功能文件中使用模拟与 stanalone 运行

Kon*_*nin 4 karate

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

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

我想为A运行系统测试,有些测试需要B或/和C在线并从A执行查询。

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

我还写了一些 a-test-smth.feature 文件来对A运行测试

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

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

  • A 的一些 API 调用不是必需的BC
  • 无法模拟服务B关闭或例如缓慢或不正确的响应答案获取

谢谢。

Pet*_*mas 5

你在使用 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-测试

(过时的)

首先创建这段足够智能的 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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