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 & ' ^ " * 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>
我有以下网络服务请求。我正在尝试使用 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 & ' ^ " * 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>