soapui xml 使用 groovy 脚本更新标签值

soapui xml tag value update using groovy script

我有以下网络服务请求。我正在尝试使用 groovy 脚本更新 属性。

网络服务:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webserviceX.NET/">
   <soap:Header/>
   <soap:Body>
      <web:ChangeLengthUnit>
         <web:LengthValue>${=(int)(Math.random()*9999)}</web:LengthValue>
         <web:fromLengthUnit>Inches</web:fromLengthUnit>
         <web:toLengthUnit>Centimeters</web:toLengthUnit>
      </web:ChangeLengthUnit>
   </soap:Body>
</soap:Envelope>

Groovy 脚本:

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )  

// get XmlHolder for request message def 
holder = groovyUtils.getXmlHolder( "ChangeLengthUnit#RawRequest" ) 

// change password using XPath 
holder["//*:LengthValue"] = "1234"  

// write updated request back to teststep 
holder.updateProperty()
context.requestContent = holder.xml

我无法使用上述脚本更新 Lengthvalue 标签。我低于错误

org.apache.xmlbeans.XmlException: error: Unexpected element: CDATA org.apache.xmlbeans.XmlException: error: Unexpected element: CDATA error at line: 4 

我认为你可以用更简单的方式做到这一点

假设您的 xml 请求是

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webserviceX.NET/">
<soap:Header/>
<soap:Body>
  <web:ChangeLengthUnit>
     <web:LengthValue>1234</web:LengthValue>
     <web:fromLengthUnit>Inches</web:fromLengthUnit>
     <web:toLengthUnit>Centimeters</web:toLengthUnit>
     <web:name>Sherly &amp; ' ^ " * 123456 </web:name>
  </web:ChangeLengthUnit>

你可以通过下面的脚本获取name的值

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )  

// get XmlHolder for request message def 
holder = groovyUtils.getXmlHolder( "First Step#Request" ) 

def x= holder.getNodeValue("//*:name")

 log.info x

 testRunner.testCase.setPropertyValue("Prop",x)

所以我们在上面的代码中所做的是获得值 "Sherly & ' ^ " * 123456 " 并创建了一个自定义 属性 并在其中添加了值。

现在您可以在下一个请求中轻松使用该值

<web:LengthValue>${#TestCase#Prop}</web:LengthValue>