如何只从SOAPUI中获取JSON响应

时间:2015-09-25 07:10:37

标签: web-services groovy soapui

我正在研究提供XML和JSON类型响应的项目​​。我只需从SOAPUI中获取JSON响应即可处理下一步。

是否有任何SOAPUI api可以通过groovy脚本获得JSON类型的响应。

提前致谢。

3 个答案:

答案 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));