当前位置: 首页 > 知识库问答 >
问题:

如何使用groovy更新响应xml并将其打印出来

杨利
2023-03-14

我对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持有者保存响应xml,但在持有者中获取xml后,我正在更新节点值。我不确定如何进一步进行。我需要将更新后的xml写入文件。

共有1个答案

宇文智敏
2023-03-14

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

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

这个脚本实际上做什么
当汽车名称为i30时,此xml对于madeBy的值不正确。并且喜欢使用现代更新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。

 类似资料:
  • 我是groovy的初学者,正在尝试解析XML并将结果记录插入MySQL数据库示例SOAP XML响应 SOAPUI GROOVY teststep脚本 提前感谢您的任何帮助!

  • 我正在使用改型,我想访问从服务器返回的JSON响应。有人能给我提个建议吗?谢谢

  • APIService: 在活动调用API中:

  • 问题内容: 我有一个包含XML的Java字符串,没有换行或缩进。我想将其转换为格式正确的XML字符串。我该怎么做呢? 注意:我的输入是String。我的输出是String。 (基本)模拟结果: 问题答案: 注意:结果可能因Java版本而异。搜索特定于你的平台的解决方法。

  • 显然,是一种新的建议的HTTP请求方式,所以我尝试使用它向美味的API发出请求,它返回一个XML响应。我得到的是: 但是,它会在位上引发异常, 其他信息:无法加载文件或程序集“NewtonSoft.json,Version=4.5.0.0,Culture=Neutral,PublicKeyToken=30AD4FE6B2A6AEED”或其依赖项之一.系统找不到指定的文件。 也许我错过了一些集会,但

  • 问题内容: 我不太了解React Material-UI网格系统。如果要使用表单组件进行登录,最简单的方法是在所有设备(移动设备和台式机)的屏幕上居中显示它? 问题答案: 由于您将在登录页面中使用它。这是我在使用Material-UI的登录页面中使用的代码 这将使此登录表单位于屏幕中央。 但是IE仍然不支持Material-UI网格,您将在IE中看到一些放错位置的内容。 希望这会帮助你。