cancel
Showing results for 
Search instead for 
Did you mean: 

How to set Property Value of Sub Node of XML file in SOAP UI?

Highlighted
Occasional Contributor

How to set Property Value of Sub Node of XML file in SOAP UI?

Hi Team,

 

Thank you very much in advance.

 

I have xml in the below structure and i need to update values to sub nodes using Groovy script to automate the TestScripts.

 

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:inb="http://sap.com/xi/FI-Processing">
<soap:Header/>
<soap:Body>
<inb:OrderItemMessageBulk>
  <MessageHeader>
      <CreationDateTime></CreationDateTime>
  </MessageHeader>
  <OrderItems>
    <MessageHeader>
      <CreationDateTime></CreationDateTime>
    </MessageHeader>
    <OrderItem>
      <DocumentItemID DocumentItemTypeCode="" SendingComponentID="" LogicalSystemID="">       </DocumentItemID>

  </OrderItems>
</inb:OrderItemMessageBulk>
</soap:Body>
</soap:Envelope>

 

How can i set Value of node DocumentItemTypeCode, SendingComponentID and LogicalSystemID in the above XML structure.

 

Kindly guide me to solve the issue.

 

Regards,

Ramana.

Tags (3)
9 REPLIES 9
Highlighted
Community Leader

@Ramanasaps4hana :

 

You can refer this link from TechCorner, hope it will help you out How To Modify XML


Click "Accept as Solution" if my answer has helped,
Remember to give "Kudos" 🙂 ↓↓↓↓↓



Thanks and Regards,
Himanshu Tayal
Community Hero

It is pretty simple if you use custom properties of test case.

Change below from

<DocumentItemID DocumentItemTypeCode="" SendingComponentID="" LogicalSystemID=""> 

to

<DocumentItemID DocumentItemTypeCode="${#TestCase#TYPE_CODE}" SendingComponentID="${#TestCase#COMPONENT_ID}" LogicalSystemID="${#TestCase#SYSTEM_ID}"> 

Define test case level custom properties

TYPE_CODE

COMPONENT_ID

SYSTEM_ID

and respective values.

Please refer documentation for the same

https://www.soapui.org/scripting-properties/property-expansion/



Regards,
Rao.
Highlighted
Occasional Contributor

Hi Himanshu,

 

Thank you very much for your quick response.

 

I'm very new to Groovy and even looking for proper training too.

I tried the below logic but not able to traverse till "DocumentItemTypeCode" but i'm able to set value to "DocumentItemID" level.

 

import static java.util.UUID.randomUUID
import com.eviware.soapui.support.XmlHolder

def transactionID = "${java.util.UUID.randomUUID().toString().replaceAll('-','')}"
def reqOrder = testRunner.testCase.testSuite.testCases["Order"].testSteps["OrderItem"].getPropertyValue("Request")
def xmlOrder = new XmlHolder(reqOrder)

xmlOrder.setNodeValue("//inb:OrderItemMessageBulk/OrderItems/OrderItem/DocumentItemID", transactionID)
xmlOrder.setNodeValue("//inb:OrderItemMessageBulk/OrderItems/OrderItem/DocumentItemID('DocumentItemTypeCode'))", "GENO")

def xmlOrderNew = xmlOrder.getXml()

 

Kindly provide me a bit detail logic like what libraries to import and what syntax to be written because once i'm done with traverse till "DocumentItemTypeCode" then only i can be able to complete my work.

 

Regards,

Ramana.

Highlighted
Occasional Contributor

Hi Rao,

 

Thanks for your quick response.

 

Actually i can't do this because i want to use these properties to automate the test cases. So again passing values inside groovy script for each property will be like double work.

 

actually i tried without Groovy script initially but i'm facing issues in common property passed across test cases.

 

ex: I have a TestCase Order which has DocumentID field with dynamic value created using formula "${=UUID.randomUUID().toString().replaceAll('-','')}" and the same "DocumentID" i need to pass to the next TestCase Fulfillment automatically in "OriginalItemID" field which i'm not able to pass it from Order to Fulfillment using property Transfer.

 

Kindly guide me how can i pass a field value across TestCases in same TestSuite.

 

Or Kindly help e with Groovy script in case not possible without script.

 

Regards,

Ramana.

Highlighted
Community Hero

Thumb rule is that each and every test case should be independent.

Reorganize the tests so that they can be executed without dependency.



Regards,
Rao.
Highlighted
Community Hero

In case if you need the value to be used in multiple test cases, the generate the value in setup script of test suite and store it in suite custom property. And use property expansion , i.e use TestSuite instead of Test case in the initial reply.


Regards,
Rao.
Highlighted
Occasional Contributor

Hi Rao,

 

Thank you once again but i'm not able to see ant script menu option by right clicking on TestSuite.

 

Could you please provide some steps to follow so that i can write the UUID generation code at TestSuite level which i'll use setPropertyValue to set Custom Property at TestSuite level and the same variable i'll assign it to all TestCases. 

 

But my only point is the UUID must be same across all TestCases and it shouldn't be generated in each TestCase.

 

If comfortable to communicate with you directly then please provide personal contact to explain my issue.

 

Regards,

Ramana.

Highlighted
Occasional Contributor

Hi Rao,

 

TestCases may be independent but here the TestCases should execute one after another based on the generated UUID of first TestCase which needs to be passed to the next TestCase, because of business process.

 

I can't escape from business process and need to automate in the same way.

 

Highlighted
Community Hero
New Here?
Join us and watch the welcome video:
Announcements
Top Kudoed Authors