有没有办法在空手道的模拟功能文件中验证肥皂动作?
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
我有一个模拟包含多个 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