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

如何使用groovy解析和更新SoapUI请求的CDATA部分?

白腾
2023-03-14

我正在尝试编写一个时髦的脚本来更新 SoapUI 请求的某些 CDATA 部分。

我对SoapUI和groovy都是新手。

我已经成功地通过使用属性转移完成了我需要的事情,但是,由于我需要在几乎所有测试用例中执行相同的处理,因此我宁愿在可以从任何需要的地方调用的脚本中执行此操作。

我试图模仿groovy中的属性转移步骤,但是没有成功,因为我似乎无法访问和解析CDATA部分。

任何关于如何使用groovy解析和更新值的帮助都将非常感谢。

请求格式示例如下所示

<soapenv:Envelope xmlns:soapenv="soappath" xmlns:myns="mynamespacepath">
   <soapenv:Header/>
       <soapenv:Body>
           <myns:CMSXMLWebImport>
           <myns:xmlIn><![CDATA[<CMSCardRequest xmlns="http://mypath2">
           <Group>
            <Name>Finance</Name>
                <OrgUnit>OU=Finance,OU=Enterprise,DC=DummyDomain</OrgUnit>
                <Parent>Enterprise</Parent>
                <User>
                <Personal>
                        <FirstName>xxx</FirstName>
                        <LastName>xxx</LastName>
                        <Email>xxxx.xxx@xxx.uk</Email>
            </Personal>
                </User>
            </Group>
            </CMSCardRequest>]]></myns:xmlIn>
            </myns:CMSXMLWebImport>
        </soapenv:Body>
</soapenv:Envelope>

共有1个答案

佟涵畅
2023-03-14

以下代码:

import groovy.xml.*

def data = '''
<soapenv:Envelope xmlns:soapenv="soappath" xmlns:myns="mynamespacepath">
 <soapenv:Header/>
 <soapenv:Body>
   <myns:CMSXMLWebImport>
     <myns:xmlIn><![CDATA[
        <CMSCardRequest xmlns="http://mypath2">
          <Group>
            <Name>Finance</Name>
            <OrgUnit>OU=Finance,OU=Enterprise,DC=DummyDomain</OrgUnit>
            <Parent>Enterprise</Parent>
            <User>
              <Personal>
                <FirstName>xxx</FirstName>
                <LastName>xxx</LastName>
                <Email>xxxx.xxx@xxx.uk</Email>
              </Personal>
            </User>
          </Group>
        </CMSCardRequest>]]>
      </myns:xmlIn>
    </myns:CMSXMLWebImport>
  </soapenv:Body>
</soapenv:Envelope>
'''

def parser = new XmlSlurper()
def xml = parser.parseText(data)
def cardXml = parser.parseText(xml.Body.CMSXMLWebImport.xmlIn.text())

println "name:       ${cardXml.Group.Name.text()}"
println "org unit:   ${cardXml.Group.OrgUnit.text()}"
println "first name: ${cardXml.Group.User.Personal.FirstName.text()}"

// or for a somewhat more succinct access pattern 
println "---------"
cardXml.Group.with { 
  println "name:       ${Name.text()}"
  println "org unit:   ${OrgUnit.text()}"
  println "first name: ${User.Personal.FirstName.text()}"
}

将导致:

~> groovy solution.groovy 
name:       Finance
org unit:   OU=Finance,OU=Enterprise,DC=DummyDomain
first name: xxx
---------
name:       Finance
org unit:   OU=Finance,OU=Enterprise,DC=DummyDomain
first name: xxx

~> 

运行时。这里的技巧是将CDATA部分作为字符串取出,然后单独解析该部分。

我还在第二个示例中使用Groovywith方法,以更短的方式访问相同的数据。

 类似资料:
  • 我在SoapUI中有一个肥皂测试项目。我已经将所有请求作为测试步骤添加到测试套件中。 每次开始测试时,我需要更新WSDL定义并重新创建请求(同时保留现有值)。 我需要一个groovy脚本的帮助来自动完成这个过程,这个脚本可以放在项目内部,每次在执行开始之前运行。

  • 我正在使用SoapUI的开源版本进行一些SOAP Web服务负载测试。 我希望每个请求与以前的请求尽可能不同,我不希望使用相同的属性进行负载测试。 我有一个属性文件,它有几个属性,每个属性值都调用groovy脚本从文件中读取一个随机值,并将其分配给测试用例属性,即在值字段中: <代码>${=(DynamicPropertyScript)} 脚本: 如果我在测试用例开始时调用这个脚本,那么这个脚本工

  • 问题内容: 我想解析传入的JSON数据,例如: 我使用的代码是: 但是我无法分配任何东西给。有什么建议? 问题答案: 该响应是一个Map,具有单个元素,键为“ 212315952136472”。地图中没有“数据”键。如果要遍历所有条目,请使用以下命令: 如果您知道它是单元素地图,则可以直接访问: 而且,如果您知道ID(例如,如果您使用它来发出请求),则可以更简洁地访问该值:

  • 我只使用了SOAP UI来测试WSDL/URL,但在这个范围内没有。我需要从SOAPUI获取请求url查询参数,并使用它们使用groovy脚本测试一些东西。 假设我有一个GetCustomers请求url,如下所示 我需要URL < code > Id = 111 < code > ModeName = ABC < code > DeltaId = 023423 中的以下内容 我在SOAP UI中

  • 问题内容: 在实现代理服务器时,我将HTTP请求作为字符串发送,如下所示: GET http:// localhost:54321 / x HTTP / 1.1 主机:localhost:54321 缓存控制:无缓存 是否有内置的类来解析此请求? 问题答案: 我对这种解析的内置支持一无所知。如果您确实需要这样的解析器,则可以签出以下库: http //hc.apache.org/index.htm

  • 我有一个具有多个操作的WSDL。对于每个操作,我想要一个模板. xml及其响应和请求。 我知道如何在soapUI中手动执行此操作,但我想使用Groovy脚本生成它们。我已经谷歌了很多,但似乎我是唯一一个正在寻找这个的人。 我的服务有16个操作,所以做这本手册会花费太多时间。由于服务每2个月更新一次,所以使用测试步骤的自动化将是完美的。 我已经为这些请求做到了: 右键单击左树中的“服务”、“生成测试