我正在使用xml响应主体,即使我的xpath不存在,也试图保持测试运行。这是我的功能文件
When request read("propertyAvail.xml")
And header CWT_DEBUG_LABELS = true
And header CWT_DEBUG_RATES_RANK_LABELS = true
And header Content-Type = "text/xml"
And header CWT_TRAVELER_ID = "A:65887F3"
And header CWT_TRAVELER_ID_TYPE = "portrait"
And method post
Then match response //BookingChannel[2]/RatePlan[1]/TPA_Extensions/InPolicy == "#notnull"
And def inPol = //BookingChannel[2]/RatePlan[1]/TPA_Extensions/InPolicy
And def inPolVal = //BookingChannel[2]/RatePlan[1]/TPA_Extensions/Labels/Label[@Type="CWT_INPOLICY_VALUE"]
And def rateIsInPolicy = Java.type("com.cwt.karate_scripts.CalculationHelper").isInPolicy(inPol, inPolVal)
And match rateIsInPolicy == true
在这里我要实现逻辑
if (//BookingChannel[2]/RatePlan[1]/TPA_Extensions/InPolicy -> does not exist){
And def inPolVal = 0.0
And def rateIsInPolicy = Java.type("com.cwt.karate_scripts.CalculationHelper").isInPolicy(inPol, inPolVal)
And match rateIsInPolicy == true
else{
And def inPolVal = //BookingChannel[2]/RatePlan[1]/TPA_Extensions/Labels/Label[@Type="CWT_INPOLICY_VALUE"]
And def rateIsInPolicy = Java.type("com.cwt.karate_scripts.CalculationHelper").isInPolicy(inPol, inPolVal)
And match rateIsInPolicy == true
所以我想保持相同的功能,相同的场景,并且即使xpath不存在,也要保持测试运行,然后再执行一些操作。我该怎么办?也许空手道中也存在try-catch逻辑?请帮忙。
答案 0 :(得分:1)
如果XPath不存在,则karate.get()
API将正常返回null。如此有效:
* def xml1 = <root><one>1</one></root>
* def temp = karate.get('$xml1/root/one')
* def result = temp ? 'yes' : 'no'
* match result == 'yes'
* def xml2 = <root><two>2</two></root>
* def temp = karate.get('$xml2/root/one')
* def result = temp ? 'yes' : 'no'
* match result == 'no'
现在,只需使用conditional logic上的文档中的技术即可,您应该可以做自己想做的事情。还有一件事,调用第二个(可重复使用的)功能文件没有任何问题,在某些情况下,它可以使事情变得更简单。