Forum Discussion

smpa01's avatar
smpa01
New Contributor
4 years ago

Urgent Help req: DataSink step to return each response with all the children

I learnt very recently how to use data-driven testing in Ready API and loop calls based on the data. My goal is to run the steps in loop and at the end create an auto-export facility with DataSink so that the results get auto exported.

 

Now when I try go to DataSink, as I understood I need to create column headers as below

DataSink

to store the corresponding child values

Column Mapping from Response

It would work well, if the soap response for each of the siteId has the same XML structure. But in my case each of the 2000+ response that I get has different number of children within

<retrun> </return>

 

For e.g. please take a look at the response 1 and response 2. Both these responses have different number of children.

Response 1

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:getSiteInfoResponse xmlns:ns2="http://billing.xyz.cc/">
         <return>
            <address1>A</address1>
            <city>B</city>
            <closeDate>2018-10-15T00:00:00-05:00</closeDate>
            <contact1/>
            <contact2>TBD</contact2>
            <country>X1</country>
            <customerNbr>288</customerNbr>
            <emailAddr1/>
            <emailAddr2/>
            <fax1>0</fax1>
            <fax2>0</fax2>
            <gps>C</gps>
            <grouping2>Leased</grouping2>
            <grouping4>D</grouping4>
            <jobTitle1/>
            <jobTitle2/>
            <phone1>0</phone1>
            <phone2>0</phone2>
            <siteId>862578</siteId>
            <siteName>D</siteName>
            <squareFoot>0.0</squareFoot>
            <state>E</state>
            <weatherStation>D</weatherStation>
            <zip4>4</zip4>
            <zip5>F</zip5>
        </return>
  </ns2:getSiteInfoResponse>
   </soap:Body>
</soap:Envelope>

 

Response 2

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:getSiteInfoResponse xmlns:ns2="http://billing.xyz.cc/">
         <return>
            <address1>1202</address1>
            <city>QA</city>
            <contact1/>
            <contact2>BL</contact2>
            <country>A</country>
            <customerNbr>288</customerNbr>
            <emailAddr1/>
        <emailAddr2/>
        <fax1>0</fax1>
        <fax2>0</fax2>
        <gps>LTE</gps>
        <grouping1>1345</grouping1>
        <grouping2>Leased</grouping2>
        <grouping3>ZX</grouping3>
        <grouping4>AA</grouping4>
        <grouping5>2000</grouping5>
        <jobTitle1/>
        <jobTitle2/>
        <phone1>0</phone1>
        <phone2>0</phone2>
        <services>
           <accountNbr>11099942</accountNbr>
           <liveDt>2013-07-01T00:00:00-05:00</liveDt>
           <service>2</service>
           <serviceType>gas</serviceType>
           <vendorAddr1/>
           <vendorAddr2>M</vendorAddr2>
           <vendorCity>N</vendorCity>
           <vendorName>O</vendorName>
           <vendorNbr>P</vendorNbr>
           <vendorPhone>Q</vendorPhone>
           <vendorState>R</vendorState>
           <vendorZip>S</vendorZip>
        </services>
        <services>
           <accountNbr>13064944</accountNbr>
           <liveDt>2018-05-20T00:00:00-05:00</liveDt>
           <service>2</service>
           <serviceType>gas</serviceType>
           <vendorAddr1/>
           <vendorAddr2>A</vendorAddr2>
           <vendorCity>B</vendorCity>
           <vendorName>C</vendorName>
           <vendorNbr>677</vendorNbr>
           <vendorPhone>D</vendorPhone>
           <vendorState>E</vendorState>
           <vendorZip>F</vendorZip>
        </services>      
        <siteId>101567</siteId>
        <siteName>X</siteName>
        <squareFoot>4226.0</squareFoot>
        <state>Y</state>
        <weatherStation>Z</weatherStation>
        <zip4>0</zip4>
        <zip5>L</zip5>
     </return>
  </ns2:getSiteInfoResponse>
   </soap:Body>
</soap:Envelope>

 

Now, I need to further create a table using the whole response to be utilized in business intelligence. If I have to create matching headers in DataSink I need to go through each and every responses to ensure that I have created a corresponding property in datasink. It is not humanly possible without compromising the accuracy.

Is there any way to program Ready API to store individual XML response by each looping call in a file specified by me (2000+ XML responses) or to store all the values by children of the response node without needing me to specify all the header names in the DataSink window. If it happens, i will be fine in both cases to utilize a BI tool to create a corresponding table from there.

 

Thank you in advance.

  • richie's avatar
    richie
    Community Hero
    Hey smpa01,

    Apologies, i thought id already answered this.

    I can suggest two options....1 is totally overkill but it does give you what you need and more but the other option also its a bit awkward as you have to do it for each request. Also im unsure how it handles loops.

    The overkill option (that i know handles loops) is using an event handler and you have a simple script that writes out the requests and responses (i use it to archive my test evidence). Advantage of this is that you only have to create one event handler script and it does all the work writing to a specific directory the inputs and outputs for each teststep.

    The other option: double click the request to the navigator frame to view the request's properties. The Dump File property is the one you need.

    Ta

    Rich