Make a new "Groovy Script" Step in your SoapUI TestCase for Async calls to a database for waiting for a certain result:
import groovy.sql.Sql
import com.eviware.soapui.support.GroovyUtils
import static org.junit.Assert.assertThat
import static org.hamcrest.CoreMatchers.containsString
log.info("")
log.info(" init DB connection...")
com.eviware.soapui.support.GroovyUtils.registerJdbcDriver("oracle.jdbc.driver.OracleDriver")
sql = Sql.newInstance("jdbc:oracle:thin:<USERNAME>/<password>@<HOSTNAME:PORT/DATABASENAME>", "oracle.jdbc.OracleDriver")
def timeout = 0
log.info("setup done")
while (true)
{
def itemCount = sql.firstRow("select count(*) from <TABLENAME> where <QUERY>")
def itemCount_nr = itemCount[0].toString()
log.info("while count = " + itemCount_nr)
sleep(2000)
timeout++
if (itemCount_nr == "1") break
else if (timeout % 22 == 0) break
}
log.info("sql close")
sql.close()
In this above example the result will depend on the count (expect 1 row) if not then loop 2000msec with the max of 22 x 2000 msec then "break". If between this 44 sec there is a result then "break". After that always close the SQL connection.
If you need properties from you SoapUI testcase in your Groovy Script, then you can use this option:
BeantwoordenVerwijderendef functIdSubstr = testRunner.testCase.testSteps['setFunctionalId'].getPropertyValue("bulkFunctionalIdSubstr")
Then in your SQL query:
def itemCount = sql.firstRow("select count(*) from where part1" + functIdSubstr + "part2")