#xml #groovy #soapui
#xml #groovy #soapui
Вопрос:
Если у меня есть следующий ответ в Soap UI:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ConvertTempResponse xmlns="http://www.webserviceX.NET/">
<ConvertTempResult>40</ConvertTempResult>
</ConvertTempResponse>
</soap:Body>
</soap:Envelope>
Я могу скопировать весь ответ в текстовый файл, используя:
//create folder and file.
createFolder = new File("C:/SOAPUI")
createFolder.mkdir()
file = new File("C:/SOAPUI/test.txt")
file.createNewFile()
a = testRunner.testCase.getTestStepByName("Property Transfer")
responsedata = a.getProperty('transfer')
file.write(responsedata)
Как мне скопировать данные для определенного узла. Например, если требуется только скопировать ’40’. Как я могу этого добиться?
Ответ №1:
Вы можете использовать XmlHolder, а затем применить XPath для получения значения узла, см. Код ниже:
//create folder and file
createFolder = new File("C:/SOAPUI")
createFolder.mkdir()
file = new File("C:/SOAPUI/test.txt")
file.createNewFile()
a = testRunner.testCase.getTestStepByName("Property Transfer")
responsedata = a.getProperty('transfer')
// create an XmlHolder
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
// get the response as string
def responseAsString = responsedata.getProperty('response').getValue()
def xml = groovyUtils.getXmlHolder(responseAsString)
// get the node value
def nodeValue = xml.getNodeValue("//*:ConvertTempResult")
log.info nodeValue;
file.write(nodeValue)
Надеюсь, это поможет,
Комментарии:
1. При использовании приведенного выше кода я получаю следующую ошибку: groovy.lang.MissingMethodException: нет подписи метода: com.eviware.soapui.support.GroovyUtils.getXmlHolder() применяется для типов аргументов: (com.eviware.soapui.impl.wsdl.teststeps. WsdlTestRequestStep$3) значения: [com.eviware.soapui.impl.wsdl.teststeps. WsdlTestRequestStep$3@781081b9] Возможные решения: getXmlHolder(java.lang. Строка) ошибка в строке: 11
2. Извините, я предположил, что ваши responsedata были строкой с ответом, но это тестовый шаг, поэтому вам нужно получить ответ в виде строки, прежде чем работать с XmlHolder. Я обновляю ответ этим изменением :).