有没有办法在空手道的模拟功能文件中验证肥皂动作?

Is there a way to validate soap action inside the mock feature files in Karate?

我有一个模拟包含多个 soap 操作的 soap 服务的场景。每个肥皂操作的响应都是不同的。有没有办法在同一个模拟功能文件中定义所有这些?

我正在寻找类似下面的内容。

场景路径匹配时(url); 如果 soap 操作是操作名称或请求包含特定的 xml 标记; return 响应 1; 别的 return 响应 2;

Is there a way to define all these in the same mock feature file?

是的。为什么不。

空手道的卖点在于您可以将任何复杂的逻辑表达为 JavaScript 表达式。思路请参考条件逻辑部分:https://github.com/intuit/karate#conditional-logic

上面的 link 适用于 http 客户端,但您可以对模拟使用相同的概念。我推荐的一个简单方法是复制多个 Scenario: 部分,也许 pathMatches() 会重复,但它会非常可读。

Scenario: pathMatches('/foo') && paramValue('client') != null
  # do something

Scenario: pathMatches('/foo') && requestHeaders['SOAPAction'][0] == 'myaction'

您还可以在 Background:

中创建辅助函数
Background:
  * def isAction = function(a){ var tmp = requestHeaders['SOAPAction']; return tmp ? tmp[0] == a : null }

Scenario: pathMatches('/foo') && isAction('myaction')

您也可以使用 headerContains() 函数。

场景:pathMatches('/foo') && headerContains('SOAPAction','myaction')

参见:https://intuit.github.io/karate/karate-netty/#headercontains