我对SOAPUI和自动化测试比较陌生:
我基本上试图从一个SOAPUI响应中获取结果并将它们解析为另一个,单独这很简单,但我在第一个请求中有多个响应,需要将它们逐个解析并运行到第二个请求中。
来自请求一的回复:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://tempuri.org/IWebServices/GetListOfChangedCommunicationsResponse</a:Action>
</s:Header>
<s:Body>
<GetListOfChangedCommunicationsResponse xmlns="http://tempuri.org/">
<GetListOfChangedCommunicationsResult xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:long>8888633</b:long>
<b:long>8888635</b:long>
<b:long>8888637</b:long>
<b:long>8888641</b:long>
</GetListOfChangedCommunicationsResult>
<CommunicationsIssue xmlns:b="http://schemas.datacontract.org/2004/07/International.CD.Entity" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:DigiCommErrors i:nil="true"/>
<b:Errors/>
<b:Warnings i:nil="true"/>
</CommunicationsIssue>
</GetListOfChangedCommunicationsResponse>
</s:Body>
</s:Envelope>
I need to take those 4 responses <b:long> and pass them into this 2nd method 1 at a time replacing <tem:ReferenceNumber> each time as this method only allows individual requests
请求二:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
<soap:Header/>
<soap:Body>
<tem:GetCommunicationItem>
<!--Optional:-->
<tem:ReferenceNumber>${#TestCase#REF_ID}</tem:ReferenceNumber>
<!--Optional:-->
<!--tem:BarCode>?</tem:BarCode-->
</tem:GetCommunicationItem>
</soap:Body>
</soap:Envelope>
在SOAPUI中完成此任务的最佳流程是什么?
答案 0 :(得分:0)
假设SoapUI测试用例有两个步骤。
说:
这是方法:
<circle [attr.cx]="cx" [attr.cy]="cy" r="25" fill="yellow"></circle>
更改为<tem:ReferenceNumber>204237800</tem:ReferenceNumber>
。因此,每当运行step2时,它从测试用例级别自定义属性获取值,并且在执行Step2之前,用户将此值存储在Script Assertion中。<tem:ReferenceNumber>${#TestCase#REF_ID}</tem:ReferenceNumber>
添加到 Step1 。Script Assertion
元素。 long
元素值,请将其设置为测试用例级自定义属性,例如long
,然后从此脚本本身执行 Step2 。REF_ID
完成时, Step2 会多次执行 Step1 的响应值。因此,无需再次执行 Step2 ,因此请求在开始时禁用。以下是Step1的脚本断言:
Script Assertion
答案 1 :(得分:0)
通过将线分成单独的部分来尝试调试出错的地方来管理它的工作:
def ids = new XmlSlurper().parseText(context.response).'**'.findAll{it.name() == 'long'}*.text
以下是我目前使用的基于@Rau答案的脚本。不仅仅是因为我的改变必然是最好的方式,但它对我有用
def nextStep = 'CommItem'
assert context.response, 'Response is null or empty'
def content = context.expand('${ChangedComms#Response}')
def xml = new XmlSlurper().parseText(content)
def ids =xml.depthFirst().findAll{it.name() == 'long'}*.text()
ids.each {
log.info ids
}
assert ids, 'Did not get any values from this response'
def stepToRun = context.testCase.testSteps[nextStep]
ids.each { id ->
log.info "Running $nextStep step for value $id"
context.testCase.setPropertyValue('REF_ID', id.toString())
def runner = stepToRun.run(context.testRunner, context)
}