我有REST服务,是用不同于Java的语言编写的。它与其他REST服务几乎没有依赖关系。
例如,正在开发和测试的服务是A,其他服务分别是B和C。
我想为A运行系统测试,某些测试要求B或/和C在线,并从A执行查询。
我编写了b-mock.featue和c-mock.feature来表示mock中的服务。
我还编写了一些a--smth.feature文件来对A运行测试
有没有可能在a- test -smth.feature中添加一些信息来启用一些用于具体测试的mock?
现在我应该运行两次独立的karate.jar,第一次是为了模拟。second -用于运行测试。这种方法是有效的,但我不能否认这一点:
对A的某些API调用不需要B或C
的响应答案缓慢或不正确
谢谢。
发布于 2018-10-09 11:38:27
你在使用Java吗?如果是这样,那么最好的方法是在Java代码中执行测试设置。您可以为B和C启动两个mock,然后为您的服务A启动主测试,并在最后根据需要进行清理。
您可以将其作为示例:https://github.com/intuit/karate/tree/master/karate-netty#consumer-provider-example
第3行显示了如何启动模拟并运行空手道测试。
如果您不使用Java,并且只想使用独立的JAR,那么使用Java-interop实际上是可行的,而且非常简单,我刚刚尝试了一下。
编辑:这个接口现在内置于空手道中,所以你不需要在下面写额外的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'
这回答了你的问题吗?让我知道,我会将这个技巧添加到文档中!
https://stackoverflow.com/questions/52709019
复制相似问题