如何使用groovy更新响应xml并打印它

如何使用groovy更新响应xml并打印它

问题描述:

我对Groovy和SOAPUI完全陌生。如何使用groovy更新响应xml并打印它

情景:比较两个XML响应(两者属于不同的项目)

方法尝试:捕捉响应和写入文件的响应,比较这两个文件。

面临的问题:时间戳不匹配既要求在不同时间

由于上述问题,我试图让时间戳的节点值,并将其更改为*两者的响应运行。 但我无法写入更改的响应值。

Groovy脚本:

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context); 
log.info(groovyUtils.projectPath); 
def holder = groovyUtils.getXmlHolder("loginRequest#Response") 
holder.setNodeValue("//ns3:loginUserResponse[1]/ns3:loginUserResponse/userModel/auditModel/timestamp", "1"); 

最初def holder持有响应XML,但得到在支架上的XML后,我更新的节点值。我不知道如何进一步进行。我需要将更新的xml写入文件。

+0

你看到什么错误?请问Stacktrace? – Rao

+0

您没有在您的XPath中定义名称空间!尝试'holder.setNodeValue(“// *:loginUserResponse [1]/*:loginUserResponse/*:userModel/*:auditModel/*:timestamp”,“1”)'。 – SiKing

+0

使用// *:元素名约定的xpath,然后使用groovy代码“holder.updateProperty()”,然后将其写入文件 –

这是一个示例groovy脚本,它使用任意xml并基于特定条件更新元素值。然后它会根据请求将更新的数据写回文件。请按照脚本的在线评论。

我相信这会帮助你理解,你将能够将它应用到你的实际XML。

这个脚本实际上做了什么?
当汽车名称为i30时,此xml对于madeBy的值不正确。并想用Hyundai更新xml并将其写入指定的文件。

/** 
* below is the groovy script which read and parses xml 
* and updates its value and then writes back to file 
**/ 
import groovy.xml.* 
//Sample xml string 
def xml = '''<?xml version="1.0" encoding="utf-8"?> 
<cars> 
    <car> 
    <name>Jetta</name> 
    <madeBy>Volkswagen</madeBy> 
    </car> 
    <car> 
    <name>Polo GT</name> 
    <madeBy>Volkswagen</madeBy> 
    </car> 
    <car> 
    <name>i30</name> 
    <madeBy>Typo</madeBy> 
    </car> 
</cars>''' 
//if you want to pass the dynamic response instead of above fixed xml, then 
//use below statements by uncommenting below one and replace value for TEST_STEP_NAME and 
//comment above xml statement 
/** 
def xml = context.expand('${TEST_STEP_NAME#Response}') 
**/ 
//parse the xml string and create object 
def cars = new XmlSlurper().parseText(xml) 
//find the car whose name is i30 and update its madeBy element value to Hyundai 
cars.'**'.find { if (it.name == 'i30') it.madeBy = 'Hyundai'} 
//print changed cars object 
println XmlUtil.serialize(cars) 
//Serializes and Writes cars object into given file 
new File('c:/Temp/test1.xml').write(XmlUtil.serialize(cars)) 

如果你打开你的XML文件中,输出应该如下图所示:

<?xml version="1.0" encoding="UTF-8"?> 
<cars> 
    <car> 
    <name>Jetta</name> 
    <madeBy>Volkswagen</madeBy> 
    </car> 
    <car> 
    <name>Polo GT</name> 
    <madeBy>Volkswagen</madeBy> 
    </car> 
    <car> 
    <name>i30</name>   
    <madeBy>Hyundai</madeBy> 
    </car> 
</cars> 

您也可以找到this例如有用这说明干脆创建一个新的XML。