【问题标题】:Karate feature using different ports使用不同端口的空手道功能
【发布时间】:2021-01-22 19:11:40
【问题描述】:

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

只要所有请求都发送到同一个主机,这样就可以正常工作。但是,该行中的最后一个请求转到同一主机上的不同端口,但是从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?还有其他选择吗?

【问题讨论】:

    标签: karate


    【解决方案1】:

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

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

    所以在我看来你误解了语法或有过于复杂的事情。

    【讨论】:

    • 谢谢,这解决了我的困惑。我的印象是,baseUrlKarate 在设置配置中所需要的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多