我正在尝试将一组代码与我在Soapui中的响应中获得的代码进行比较。 我能够将一个数组添加到一个groovy脚本中,其中包含我在excel中的条目,所以基本上就像
def MAX_SIZE = 31
def myArray = new Object[MAX_SIZE]
// Code array
myArray[0] = "EU1234qSP"
myArray[1] = "ES1234qSPwe"
myArray[2] = "EF1234qSPde"
myArray[3] = "EW1234qSPpt"
然后,我从Web服务响应中扩展了属性Xpath,该响应返回数据库中的代码。 e.g:
def OfferCode1 = context.expand( '${QuerySubsPlanList - Request 1#Response#declare namespace ns=\'http://com.ztesoft.zsmart/xsd\'; //ns:QuerySubsPlanListResponse[1]/SubsPlanDtoList[1]/SubsPlanDto[1]/SubsPlanCode[1]}' )
def OfferCode2 = context.expand( '${QuerySubsPlanList - Request 1#Response#declare namespace ns=\'http://com.ztesoft.zsmart/xsd\'; //ns:QuerySubsPlanListResponse[1]/SubsPlanDtoList[1]/SubsPlanDto[2]/SubsPlanCode[1]}' )
def OfferCode3 = context.expand( '${QuerySubsPlanList - Request 1#Response#declare namespace ns=\'http://com.ztesoft.zsmart/xsd\'; //ns:QuerySubsPlanListResponse[1]/SubsPlanDtoList[1]/SubsPlanDto[3]/SubsPlanCode[1]}' )
def OfferCode4 = context.expand( '${QuerySubsPlanList - Request 1#Response#declare namespace ns=\'http://com.ztesoft.zsmart/xsd\'; //ns:QuerySubsPlanListResponse[1]/SubsPlanDtoList[1]/SubsPlanDto[4]/SubsPlanCode[1]}' )
比较它们并在日志中打印出匹配或失败的最佳方法是什么? 一个循环?也许像是
for (item in myArray ) {
for (offerCode in offerCodesArray) {}
if (item == offerCode) {
store the finding
go to next item in myArray
}
}
}
}
如何将扩展属性输入到数组中呢?从来没有这样做过 还是初学者,有人可以帮忙吗?
干杯 阿迪
更新:数据库中的更改比我想象的更频繁,所以我确实需要节点计数才能工作。 响应的结构如下
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns:QuerySubsPlanListResponse xmlns:ns="http://com.ztesoft.zsmart/xsd">
<SubsPlanDtoList>
<SubsPlanDto>
<SubsPlanCode>TEST1</SubsPlanCode>
<ServType>M</ServType>
<CustTypeList>B2B</CustTypeList>
<Price>0.0000</Price>
</SubsPlanDto>
<SubsPlanDto>
<SubsPlanCode>TEST2 </SubsPlanCode>
<ServType>M</ServType>
<CustTypeList>B2C|B2B</CustTypeList>
<Price>0.0000</Price>
</SubsPlanDto>
谁能告诉我如何计算节点?上面的最后一个建议没有用。感谢
答案 0 :(得分:1)
您可以使用groovy-jdk中的java.util.Collection
而不是数组,然后您可以使用intersect
,plus
(用于联合)等来处理此集合比赛并失败。我给你一个源样本:
def myCollection = ["1","2","3","4"]
def myCollection2 = ["1","a","3","d"]
def matches = myCollection.intersect(myCollection2)
def fails = myCollection.plus(myCollection2)
fails.removeAll(matches)
log.info matches // --> [1,3] matches
log.info fails // --> [2,4,a,d] not match
使用此代码,您可以打印匹配并失败,并且您还可以按照自己的喜好收集匹配。
关于在集合中输入扩展属性:如果您想在答案中循环思考<SubsPlanDto>
,您可以使用XPath计算此元素的实例数,然后再添加一个循环集合的元素(请注意,您可以使用通配符*
作为命名空间来保持XPath的简化),请参阅下面的代码:
def numElements = context.expand( '${QuerySubsPlanList - Request 1#Response#//count(*:QuerySubsPlanListResponse[1]/SubsPlanDtoList[1]/SubsPlanDto)}')
def collection2 = [];
for ( i in 1..numElements.toInteger()) {
collection2.add(context.expand( '${QuerySubsPlanList - Request 1#Response#//*:QuerySubsPlanListResponse[1]/SubsPlanDtoList[1]/SubsPlanDto['+ i + ']/SubsPlanCode[1]}'))
}
最后,您可以一起完成所有工作:
// you collection definition...
def collection = ["1","2","3","4"]
// get num repetitions of <SubsPlanDto> with Xpath count
def numElements = context.expand( '${QuerySubsPlanList - Request 1#Response#//count(*:QuerySubsPlanListResponse[1]/SubsPlanDtoList[1]/SubsPlanDto)}')
def collection2 = [];
// iterate and add the values to a collection
for ( i in 1..numElements.toInteger()) {
collection2.add(context.expand( '${QuerySubsPlanList - Request 1#Response#//*:QuerySubsPlanListResponse[1]/SubsPlanDtoList[1]/SubsPlanDto['+ i + ']/SubsPlanCode[1]}'))
}
// get the matches and differences
def matches = collection.intersect(collection2)
def fails = collection.plus(collection2)
fails.removeAll(matches)
log.info matches
log.info fails
希望这有帮助,