我有一个模拟包含多个肥皂动作的肥皂服务的方案。每个肥皂动作的响应都不同。有没有办法在同一个模拟功能文件中定义所有这些内容?
我正在寻找类似下面的内容。
当场景路径匹配(URL)时; 如果soap动作是操作名称或请求包含特定的xml标签; 返回响应1; 其他 返回响应2;
答案 0 :(得分:1)
是否可以在同一个模拟功能文件中定义所有这些内容?
是的。为什么不呢?
空手道的卖点是,您可以将任何复杂的逻辑表示为JavaScript表达式。请参考有关条件逻辑的本节以获取想法:https://github.com/intuit/karate#conditional-logic
上面的链接用于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')
答案 1 :(得分:0)
您也可以使用 headerContains() 函数。
场景:pathMatches('/foo') && headerContains('SOAPAction','myaction')
见:https://intuit.github.io/karate/karate-netty/#headercontains