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

在SoapUI响应上使用XMLParser

佘茂才
2023-03-14

在SoapUI Pro中使用XmlParser的问题

您好,我正在尝试使用“xml解析器”在SoapUI Pro中验证我的xml响应。

我一直在一个groovy脚本中玩这个,如果我像这样在groovy脚本中声明和分配我的xml,我可以访问标签

如果我在脚本中声明xml,这会起作用。。

def xml = """
<NS1:createShipmentResponse xmlns:NS1="http://www.royalmailgroup.com/api/ship/V1">
         <NS1:integrationHeader>
            <dateTime xmlns="http://www.royalmailgroup.com/integration  /core/V1">2013-12-24T22:20:34</dateTime>
            <version xmlns="http://www.royalmailgroup.com/integration/core/V1">1</version>
            <identification xmlns="http://www.royalmailgroup.com/integration/core/V1">
               <applicationId>111111113</applicationId>
               <transactionId>420642961</transactionId>
            </identification>
         </NS1:integrationHeader>
         <NS1:completedShipmentInfo>
            //xml not complete, other info in here.
         </NS1:completedShipmentInfo>
         <NS1:integrationFooter>
            <warnings xmlns="http://www.royalmailgroup.com/integration/core/V1">
               <warning>
                  <warningCode>W0022</warningCode>
                  <warningDescription>The customerReference specified is longer than   12 characters and has been truncated</warningDescription>
               </warning>
               <warning>
                  <warningCode>W0026</warningCode>
                  <warningDescription>The departmentReference specified is invalid and     will be ignored</warningDescription>
               </warning>
            </warnings>
         </NS1:integrationFooter>
      </NS1:createShipmentResponse>
"""

def parser = new XmlParser().parseText(xml)

parser.'NS1:integrationFooter'.warnings.warning.warningCode.each{ 
     log.info it.text()
}

但是当我从我的Soap响应中实例化xmlParser变量时,它似乎在正在运行的测试实例中不起作用,如下所示。

def response        = context.expand( '${createShipment_v04#Response}' );

我知道解析器变量已经被分配了xml响应,因为当我可以将其打印到日志中时。。

i、 e.日志。信息分析器打印。。。

Wed Jan 08 16:33:38 GMT 2014:INFO:{http://schemas.xmlsoap.org/soap/envelope    /}Envelope[attributes={}; value=[{http://schemas.xmlsoap.org/soap/envelope/}Body[attributes={}; value=[{http://www.royalmailgroup.com/api/ship/V1}createShipmentResponse[attributes={}; value=[{http://www.royalmailgroup.com/api/ship/V1}integrationHeader[attributes={}; .......

但当我从soap响应实例化xmlParser请求时,下面的代码不会打印任何内容。

parser.'NS1:integrationFooter'.warnings.warning.warningCode.each{ 
         log.info it.text()
}

任何帮助都将不胜感激。

共有3个答案

郜驰
2023-03-14

以下应起作用:

def response = context.expand( '${createShipment_v04#Response}' );
def parser = new XmlSlurper().parseText(response)


def warningCodes = parser.'**'.findAll {
    it.name()=='warningCode'
}

warningCodes.each {
  log.info it
}
訾旭
2023-03-14

好的。原来我不需要“NS1:”部分。下面的作品...

slurper.Body.createShipmentResponse.integrationFooter.warnings.warning.warningCode.each{ 
     log.info it.text()
}
云煌
2023-03-14

我认为你的工作水平不对。

解析器。正文…。

 类似资料:
  • 我想比较从SOAP响应和JDBC请求获取的节点下元素的值。我可以用下面的groovy代码打印这些值,但由于我不太擅长编码,所以无法进行比较。 注意:两个响应中的元素名称相同,但顺序不同。 我想根据两个响应中的元素名称比较值,而不管元素的顺序如何。注意:仅当JDBC元素值不为空时才进行比较。 def groovyUtils=新com。eviware。soapui。支持GroovyUtils(上下文)

  • 使用 Windows 7 和 Soap 5.2.0 免费软件。 我也在Smart Bear社区询问过这一点,他们只给了我推荐阅读的帖子。这些帖子与这个问题无关。 我有一个 REST 项目,它有一个测试套件和一个包含两个测试步骤的测试用例。第一步是一个时髦的步骤,带有一个时髦的脚本,它调用第二个测试步骤。第二个测试步骤是 REST GET 请求,该请求将字符串发送到我们的 API 服务器,并以 JS

  • 我将传递任何成员ID或活动卡进行匹配,以验证activecard(卡号)与传递的成员ID匹配。 请求: 编辑:运行步骤后 编辑2:运行脚本断言后添加自定义属性

  • 例如,在本文中,我试图理解为什么在流中使用flatmap()(直接从引用中粘贴副本) AFAIK,应用于流的平面图会为流中的每个输入值产生任意数量的值(0... n)。所以一个平面图需要一个产生流的函数。 通量发射0个或多个项目,然后可选地完成或偏离。 那么,响应流上到底发生了什么?这是接收响应流并发出0个或更多类警报对象的函数吗?因此,如果我们

  • 不确定是怎么回事。任何想法都将不胜感激。

  • 我在Bootstrap工作室工作,似乎无法修复这个愚蠢的问题。 我看到每个人都建议我将meta name=“viewport”content=“initial-scale=1.0,maximum-scale=1.0”添加到中,但不幸的是,我无法编辑这部分代码,因为它锁定在BootStrap studio中。 但我确实在我的代码中看到了这一点: 。.. 有没有什么方法可以在不导出的情况下删除Boot