Как я могу разобрать и обновить раздел CDATA запроса SoapUI, используя groovy? - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь написать скрипт Groovy для обновления части раздела CDATA запроса SoapUI.

Я новичок в отношении как 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 Ответ

0 голосов
/ 15 мая 2019

следующий код:

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 в виде строки, а затем разобрать эту часть отдельно.

Я также использую метод groovy with во втором примере для более короткого способа доступа к тем же данным.

...