MongoDB as a data source for data driven testing
I want to use MongoDB as a data source for data-driven testing. I'm able to connect to MongoDB via Groovy Scripts and I'm able to retrieve data. But I'm trying to figure out how to use that data as an input for my API validations... Because the SoapUI data source only allows executing SQL sentences. In my case, I have all the data I need in Groovy variables, how can use now this data as a part of an API request? Thank you so much in advance, believe me, I've tried everything before asking...
So you already have the data and just want to iterate over it? This is a common thing to want to do.
Add the WSDL or REST resource to your project, and create a Request in the interface definition, and set up the request as a kind of template for the requests you will make in your test. You don't need any TestRequests in your TestCase, just a groovy script.
This code shows how to iterate over your data and make basic assertions against the response.
myRequest = testRunner .getTestCase() .getProject() .getInterfaceByName('SampleServiceSoapBinding') .getOperationByName('buy') .getRequestByName('Request 1') assert myRequest.requestContent == '''<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://www.soapui.org/sample/"> <soapenv:Header/> <soapenv:Body> <sam:buy> <sessionid>?</sessionid> <buystring>${myVariable}</buystring> </sam:buy> </soapenv:Body> </soapenv:Envelope>''' testData = [ [in: "A", out: "D"],[in: "B", out: "E"],[in: "C", out: "F"] ] testData.each { test -> context.myVariable = test.in myRequest .submit(context, false) .getResponse() .with { if (it.contentAsString.contains(test.out)) { log.info("Response for input of ${test.in} contains ${test.out}") } else { log.error("Response for input of ${test.in} did not contain ${test.out}") } } }
Notice how the test data for each run is added into the context, and then the context is passed into the call to submit.