Forum Discussion

ripkurrle's avatar
ripkurrle
Occasional Contributor
4 years ago
Solved

DataSource Loop with variable number of child elements

Hi I've just started using ReadyAPI 3.4.5 after being on SoapUI for a while. I'm testing an external vendor API and trying to pass in all my scenario data through one DataSource, ideally. My probl...
  • richie's avatar
    4 years ago
    Hey ripkurrle,

    I wouldve picked the same event handler you did to handle the empty root element, but ive never tried events on datasourced data before.

    Rather than have to go with the individual test data approach on each test step, im wondering if perhaps your datasource step passed the data to a datasource grid (as an intermediate step before being sourced by the Rest step, perhaps this would work? I know the datasource grid is a datasource step, but it might work?

    I.e. datasource step >> datasource grid (with expanded data) event handler processes this data >> REST step sources data from datasource grid

    Or, i'm wondering if you have a datasource that writes to a properties file, groovy step to remove the empty elements and then the REST step (sourcing the data from the Properties step via ${Properties#testdata}) to submit the request which doesnt contain any empty elements? Actually id do it this way i think, so my test step object hierarchy would be as follows:

    Datasource step
    Properties step
    Groovy step
    Properties2 step (optional)
    REST step

    Groovy step would contain something like the following (code = courtesy of


    def xmlString = """<PROFILE> <NAME>Fin</NAME> <AGA>20</AGA> <CONTACT> <MOBILE>1819</MOBILE> <TELEPHONE></TELEPHONE> </CONTACT> <TEAM> <TEAM1></TEAM1> <TEAM2></TEAM2> </TEAM> </PROFILE>"""

    def xml = new XmlParser().parseText(xmlString) def nodes = xml.'**'.findAll{it.name() &amp;&amp; !it.text()} def removeNode = { node -&gt; def parent = node.parent() parent.remove(node) } nodes.each{removeNode(it)} println groovy.xml.XmlUtil.serialize

    Ta

    Rich