使用不同端口的空手道功能

Karate feature using different ports

我有多个场景相互构建的功能。将其视为第一个请求获取一些数据,然后将这些数据泵入第二个请求,依此类推。

这工作正常,只要所有请求都发送到同一主机。然而,该行中的最后一个请求转到同一主机上的不同端口,但是从 Karate 调用的端口当然是错误的。

这里是 karate-config.js:

function fn() {
  karate.configure('connectTimeout', 10000);
  karate.configure('readTimeout', 10000);

  return {
    tenant: 'ipt',
    bank: 'ndb',
    baseUrl: karate.properties['mws.baseUrl'] ? karate.properties['mws.baseUrl'] : 'http://localhost:8080',
    errorIdentifierMatches: function (actualErrorIdentifier, expectedErrorIdentifier) {
      return actualErrorIdentifier.startsWith(expectedErrorIdentifier);
    },
    sleep: function (millis) {
      karate.log('Sleeping for ' + millis + ' ms');
      java.lang.Thread.sleep(millis)
    },
    generateUUID: function() {
      return java.util.UUID.randomUUID() + '';
    }
  }
}

这导致最后一个调用转到 http://localhost:8080/ipt/registerkey 而它应该是 http://localhost:9390/ipt/registerkey

特征中的相关部分定义在Background:

  Background:
    Given url baseUrl
    * def s2wKeyExchangeEndpoint = ("/mws/v2/" + tenant + "/" + bank + "/s2w/startkeyexchange")
    * def s2wVerifyAndSignEndpoint = ("/mws/v2/" + tenant + "/" + bank + "/s2w/verifyandsign")
    * def s2wRegisterKey = ("/ipt/registerkey")

有没有办法在我的功能中更改 baseUrl?还有其他选择吗?

您可以随时在 Scenario 中使用 url 关键字。由您来管理变量和配置。

* url 'http://localhost:8080'
* path 'foo', 'bar'
* method get

* url baseUrl
* path 'blah'
* method get

所以我觉得你误解了语法或者把事情搞得太复杂了。

不确定您的应用程序堆栈,但是否可以单独测试每个调用(通过使用模拟)然后执行有限的集成端到端黑盒测试?