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

问题描述 投票:0回答:2

我对 Groovy 和 SOAPUI 完全陌生。

场景:比较两个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 放入 Holder 后,我正在更新节点值。我不知道如何进一步进行。我需要将更新后的 xml 写入文件。

xml groovy soapui
2个回答
0
投票

这里是一个示例 groovy 脚本,它使用任意 xml 并根据特定条件更新元素值。然后它根据请求将更新的数据写回文件。请遵循脚本的内嵌注释。

我相信这将有助于您的理解,并且您将能够将其应用到您的实际 xml 中。

这个脚本实际上做了什么?
当汽车名称为

madeBy
时,此 xml 的
i30
值不正确。并喜欢用
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>

您可能还会发现这个示例很有用,它说明了如何创建一个新的 xml。


0
投票

谢谢你的回答,对我很有帮助

© www.soinside.com 2019 - 2024. All rights reserved.