我正在研究提供XML和JSON类型响应的项目。我只需从SOAPUI中获取JSON响应即可处理下一步。
是否有任何SOAPUI api可以通过groovy脚本获得JSON类型的响应。
提前致谢。
答案 0 :(得分:0)
请检查此回复SoapUI Groovy Script’s JSON Responses Is Empty When Using Testrunner
import groovy.json.JsonSlurper
//provide the correct rest test step name
def stepName='testStepForPing'
def step = context.testCase.getTestStepByName(stepName)
def response = new String(step.testRequest.messageExchange.response.responseContent)
log.info response
def json = new JsonSlurper().parseText(response)
答案 1 :(得分:0)
假设它是一个REST服务,默认情况下这种方法将以JSON格式获取响应。
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def response = groovyUtils.getXmlHolder("RequestStepName#Response")
// as a string -> def response = context.expand('${RequestStepName#Response}')
您可以使用#ResponseAsXml将其作为xml。
答案 2 :(得分:0)
在SOAPUI Javascript环境中,我开发了这种算法。
var xmlHolder = com.eviware.soapui.support.XmlHolder(messageExchange.responseContent);
var nodes = xmlHolder.getDomNodes("//SOAP-ENV:Envelope/SOAP-ENV:Body/ns:xxxxxx");
var obj = {};
toJsonObject(nodes[0], obj);
function toJsonObject(xmlObject, jsonObject) {
for (var i = 0; i < xmlObject.getLength(); i++) {
var node = xmlObject.item(i);
if (node.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
if (node.getLength() == 1) {
if (node.hasChildNodes()) {
jsonObject[node.getNodeName()] = String(node.item(0).getNodeValue());
}
} else {
if (node.hasChildNodes()) {
jsonObject[node.getNodeName()] = {};
jsonObject[node.getNodeName()] = toJsonObject(node, jsonObject[node.getNodeName()]);
}
}
}
}
return jsonObject;
}
log.info(JSON.stringify(obj));
context.setProperty('JSON: ', JSON.stringify(obj));