Reputation: 51
I have the following XML from querying a database
<Results>
<ResultSet fetchSize="128">
<Row rowNumber="1">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Fraud Identity Validation (NegMatch)</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>3</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>2</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Passed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.3</CREATEDATE>
</Row>
<Row rowNumber="2">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Age Verification</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>6</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>2</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Passed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.3</CREATEDATE>
</Row>
<Row rowNumber="3">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Address Validation</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>2</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>2</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Passed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.3</CREATEDATE>
</Row>
<Row rowNumber="4">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Card Limit Validation</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>4</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>2</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Passed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.3</CREATEDATE>
</Row>
<Row rowNumber="5">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Customer Identity Validation (CIP)</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>5</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>3</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Failed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.503</CREATEDATE>
</Row>
<Row rowNumber="6">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Out Of Wallet Quiz</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>11</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>4</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Skipped</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.613</CREATEDATE>
</Row>
<Row rowNumber="7">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>OFAC</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>7</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>2</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Passed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.613</CREATEDATE>
</Row>
</ResultSet>
</Results>
How do I assert in groovy that one node value is associated or tied to another node value. So for example, I want to verify that the value "Customer Identity Validation (CIP)" from the WORKFLOWACTIVITY node, is tied to the value "Failed" from the WORKFLOWACTIVITYSTATUS node. And i'm not entirely sure if this chunk:
</Row>
<Row rowNumber="5">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Customer Identity Validation (CIP)</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>5</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>3</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Failed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.503</CREATEDATE>
</Row>
will always come back as row 5
Upvotes: 0
Views: 98
Reputation: 21379
Looks like you are using SoapUI
based on above the mentioned jdbc
step result.
You can use the below Script Assertion
for the same test step.
Script Assertion:
//Check if the result is not empty
assert context.result
//Closure to get the sibling element data
def getSiblingData = { data, elementName, elementValue, siblingName ->
def parsedResult = new XmlSlurper().parseText(data)
(parsedResult.'**'.findAll {it.name() == elementName && it.text()== elementValue }*.parent()."$siblingName").inject( [] ) { result, item -> result << item.text(); result }
}
//Assert the result
//Note that data is passed to getSiblingData closure
assert ['Customer Identity Validation (CIP)'] == getSiblingData(context.response, 'WORKFLOWACTIVITYSTATUS', 'Failed', 'WORKFLOWACTIVITY')
If you want just standalone groovy script
:
def results = """<Results>
<ResultSet fetchSize="128">
<Row rowNumber="1">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Fraud Identity Validation (NegMatch)</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>3</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>2</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Passed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.3</CREATEDATE>
</Row>
<Row rowNumber="2">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Age Verification</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>6</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>2</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Passed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.3</CREATEDATE>
</Row>
<Row rowNumber="3">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Address Validation</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>2</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>2</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Passed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.3</CREATEDATE>
</Row>
<Row rowNumber="4">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Card Limit Validation</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>4</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>2</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Passed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.3</CREATEDATE>
</Row>
<Row rowNumber="5">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Customer Identity Validation (CIP)</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>5</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>3</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Failed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.503</CREATEDATE>
</Row>
<Row rowNumber="6">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>Out Of Wallet Quiz</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>11</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>4</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Skipped</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.613</CREATEDATE>
</Row>
<Row rowNumber="7">
<REGISTRATIONKEY>1644606</REGISTRATIONKEY>
<WORKFLOWACTIVITY>OFAC</WORKFLOWACTIVITY>
<WORKFLOWACTIVITYKEY>7</WORKFLOWACTIVITYKEY>
<WORKFLOWACTIVITYSTATUSKEY>2</WORKFLOWACTIVITYSTATUSKEY>
<WORKFLOWACTIVITYSTATUS>Passed</WORKFLOWACTIVITYSTATUS>
<WORKFLOWPROCESSKEY>1</WORKFLOWPROCESSKEY>
<WORKFLOWPROCESSSTATUSKEY>1</WORKFLOWPROCESSSTATUSKEY>
<WORKFLOWPROCESS>CardAccountRegistration</WORKFLOWPROCESS>
<WORKFLOWPROCESSSTATUS>Started</WORKFLOWPROCESSSTATUS>
<CREATEDATE>2016-12-29 15:29:25.613</CREATEDATE>
</Row>
</ResultSet>
</Results>"""
def getSiblingData = { data, elementName, elementValue, siblingName ->
def parsedResult = new XmlSlurper().parseText(data)
(parsedResult.'**'.findAll {it.name() == elementName && it.text()== elementValue }*.parent()."$siblingName").inject( [] ) { result, item -> result << item.text(); result }
}
assert ['Customer Identity Validation (CIP)'] == getSiblingData(results, 'WORKFLOWACTIVITYSTATUS', 'Failed', 'WORKFLOWACTIVITY')
Upvotes: 1