在stanalone运行中将Karate DSL功能文件中的模拟功能使用

时间:2018-10-08 19:40:02

标签: karate

我有REST服务,以不同于Java的语言编写。 它几乎没有来自其他REST服务的依赖性。

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

我想为 A 运行系统测试,某些测试需要 B 或/和 C 联机并执行来自的查询> A

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

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

进行测试

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

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

  • 一些不需要 B C
  • A API调用
  • 无法模拟服务 B ,例如无法缓慢或错误地获取响应答案

谢谢。

1 个答案:

答案 0 :(得分:3)

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

您可以以此为例:https://github.com/intuit/karate/tree/master/karate-netty#consumer-provider-example

第3行显示了如何启动模拟并运行空手道测试。

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

首先创建这段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'

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