Forum Discussion

CByler's avatar
CByler
Contributor
4 years ago

How to 'GetData' from an xsd:string

I am perplexed. I have a test case that generates a new and unique UserAPIKey for each iteration. I then have a test case following where I need to get that unique guid (as shown below) and pass it to a delete method to remove it. However, I can't for the life of me figure out how to grab just that guid and use it in the next test case. Can anyone offer advice? I am using ReadyAPI 3.5.0 with a Soap Web Service. Many thanks!

 

<NewDataSet>
<UserAPIKey>
<UserID>37</UserID>
<UserName>cbyler</UserName>
<FullName>Cherice Byler</FullName>
<UserAPIKey>68c4570c-b184-4865-871d-45ec083f9511</UserAPIKey>
</UserAPIKey>
</NewDataSet>

  • CByler wrote:

    Wait, I found it. I needed to go up a higher level to the Test Case rather than the Test Step. It worked the first time I did it, however, it seems that SampleXML and GUID Custom Test Case Property values are being retained.....


    So you are actually performing an incorrect selection which is causing this issue. At your Test Case Level (Your Test Case is DeleteUserAPIKey), there will be a Property Transfer Test Step that you have named SampleXML. So what is happening, is that every time, you are running the test case, your Property Transfer Step, is retrieving data from itself (The property transfer step has a guid that is not changing) and not the response that has the new guid. Hence why the new guid is not being retrieved. 

     


    CByler wrote:

     don't have the selection of SampleXML in the Property drop-menu

    ....


    Note that in my sample, I named a Custom Test Case Property SampleXML to play around with the data you provided as I dont have the same request/response in my system. In your sample you have named a Property Transfer Test Step SampleXML. This is 2 different things. I hope you have this clear. 

     

    If you have a look at point 3 in the Transfer properties page (https://www.soapui.org/docs/functional-testing/properties/transferring-properties) you will see that you would need to select the supplied response from the test step

     

     So looking at your screenshot

    In Step 2, the Property Transfer step that you named SampleXML  

    Source is your the request step AddUserAPIKey (correct)

    Property should be Response (because you receive the guid in the Response sent back to you by the service you are invoking with your request in Step 'AddUserApiKey'...you would not see SampleXML)

    once you select Response, the far right icon to select the field should now show the right data.

    • CByler's avatar
      CByler
      Contributor

      I appreciate the response. I will give it a shot first thing Monday. Thanks! 

  • racharla's avatar
    racharla
    New Contributor

    When you right click on the field  where you want to replace the data, are you not seeing the Get Data dialog pop up? 

    • CByler's avatar
      CByler
      Contributor

      Sure. But when I get data the entire xml response is contained within the xsd:string and there's no way for me to just parse the guid out to use in the next test case.

      • troyyerJP's avatar
        troyyerJP
        Contributor

        I have done this in 2 ways

        1) Using a combo of Property transfer Step and Properties Step (you dont need the Properties step as you could create Custom Properties at Project/Test Suite/Test Case levels) 

        with a licensed ReadyAPI you can follow the steps provided here to do what you are after 

        https://www.soapui.org/docs/functional-testing/properties/transferring-properties/ 

        I do this to capture the SessionsId and Url after the Login Request Step.

         

        2) transfer from a 'Groovy Script Test Step'/'Groovy Assertion' in the Request Step

        something like this could work for you

         

         

         

        /* Sample XML supplied. 
        <NewDataSet>
        <UserAPIKey>
        <UserID>37</UserID>
        <UserName>cbyler</UserName>
        <FullName>Cherice Byler</FullName>
        <UserAPIKey>68c4570c-b184-4865-871d-45ec083f9511</UserAPIKey>
        </UserAPIKey>
        </NewDataSet>
        */
        
        //pull the request data into the groovy Assertion step (Assuming that the xml is from the current request step)
        def Xmlnodes = new XmlParser().parseText(messageExchange.responseContentAsXml)
        def ActualUserAPIKey = Xmlnodes.'**'.'UserAPIKey'.'UserAPIKey'.text()
        /*
         note that you have 2 nodes for UserAPIKey.
        first higher node Xmlnodes.'**'.'UserAPIKey'.text(), will get you:
        37cbylerCherice Byler68c4570c-b184-4865-871d-45ec083f951168c4570c-b184-4865-871d-45ec083f9511
        second inner node Xmlnodes.'**'.'UserAPIKey'.'UserAPIKey'.text() will get you: 68c4570c-b184-4865-871d-45ec083f9511
        */
        //save value to a property to be called by other Test Steps
        context.testCase.testSuite.setPropertyValue("RequestUserAPIKey", ActualUserAPIKey)