groovy xml解析和修改

时间:2015-09-02 09:37:37

标签: xml parsing groovy namespaces identify

我正在尝试使用groovy构建测试自动化脚本。我的输入模板就像myXML变量

我正在从excel文件读取输入数据并替换值并通过SOAPUI触发请求。

我的代码就像这样

def myXML ='''<soapenv:Body    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="xyz.org/common" xmlns:fin="xyz.org/finance">
<fin:myBalance>
    <com:loginName>test</com:loginName>
     <fin:params>
        <fin:name value="username"/>
        <fin:Id value="12345"/>
        <fin:nickname value="usr1"/>
    </fin:params>
</fin:myBalance>
</soapenv:Body> '''

    def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
    def reqHolder = groovyUtils.getXmlHolder("InputReq#Request")

reqHolder.namespaces['soapenv']= 'http://schemas.xmlsoap.org/soap/envelope/';
reqHolder.namespaces['com']= 'xyz.org/common';
reqHolder.namespaces['fin']= 'xyz.org/common';

reqHolder.setNodeValue("//fin:myBalance[1]/${newTag.getContents()}[1]",
                        "${newValue.getContents()}");

如果我想更改节点值,这可以完美地运行。但我无法找到使用reqHolder更改属性的方法。说我想改变  fin:Id值=&#34; 12345&#34;到&#34; 6789&#34;

有没有办法改变?

1 个答案:

答案 0 :(得分:1)

您可以尝试在XmlParser中内置Groovy,而不是使用SoapUI的API。有了它,你可以改变属性。例如:

def xml = '<root><one a1="uno!"/><two>Some text!</two></root>'
def rootNode = new XmlParser().parseText(xml)
assert rootNode.one[0].@a1 == 'uno!'

来源:http://docs.groovy-lang.org/latest/html/api/groovy/util/XmlParser.html

您需要做的是获取xm,例如:

 def response = context.testCase.testSteps['Properties'].properties['response'].value

此处有更多XML处理提示:http://www.robert-nemet.com/2011/11/groovy-xml-parsing-in-soapui.html

获取XML的另一种方法: Groovy script to get the request xml

您可以在此处找到有关Groovy XML处理的更多信息: http://groovy-lang.org/processing-xml.html