How to cope with the changing schema of request/response or both to test rest APIs?
- 8 years ago
Hi,
Apart from doing something hacky like a find n replace in the project.xml file (which often works fine!), I would imagine a Groovy based solution might work for you. It isn't a complete solution, but I created this script in response to a similar question a while back:
https://gist.github.com/bearsoftware/cfed4594dc3ae1ce7a419ca5fc9b5747
/* * For a chosen REST Service POST request: * * -> Manually specify a new request body * -> Update the request of ALL (POST) REST TestRequest TestSteps contained in ALL TestCases of a chosen TestSuite */ //Set TestSuite to update here: def testSuiteNameToUpdate = "TestSuite 2" //Set new request body here: def requestBodyToCopy = """{ "apiPostId" : "125", "data" : [ { "name" : "email", "value" : "aaaacccchtomosanya@yahoo.com" }, { "name" : "data_source", "value" : "Outlet" }, { "name" : "date_of_record", "value" : "2016-04-18T00:05:57Z" }, { "name" : "marketing_opt_in_mens", "value" : "1" }, { "name" : "marketing_opt_in_womens", "value" : "1" }, { "name" : "marketing_opt_in_kids", "value" : "0" }, { "name" : "email_sp3_status_id", "value" : "100" } ] }""" //Get chosen TestSuite def project = testRunner.getTestCase().getProject() def testSuiteToUpdate = project.getTestSuiteByName(testSuiteNameToUpdate) //Select ALL TestCases def testCasesToUpdate = testSuiteToUpdate.getTestCaseList() def updateCount=0 //For each TestCase testCasesToUpdate.each{testCase -> log.info "--Checking TestCase: $testCase.name" //Select ALL RESTTestRequest TestSteps def testStepsToUpdate = testCase.getTestStepList() //For each TestStep testStepsToUpdate.each{testStep -> log.info testStep.name //Is it a POST request? if (testStep instanceof com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep && testStep.restMethod.method.toString()=="POST"){ log.info "Updating request of TestStep $testStep.name ..." testStep.getHttpRequest().setRequestContent(requestBodyToCopy) updateCount++ } } } return "Total of $updateCount REST TestRequest TestSteps have been updated."
Maybe it can be adapted to your needs or form the basis for further conversation?
Regards,
Rupert
- 8 years ago
Hi Rupert,
I hope that would just help to fix the problem, I guess the Schema inference and Data driven driven tests(to centralize a test case with multiple input/output validation) feature of SAOP UI would be the right candidate going further to fix such schema issues.
- 8 years ago
I am actually trying trial version of "SoapUI Pro/ Rady!API 1.9.0 "for this.
And Schema Inference is definitely helping it out.
As you mentioned for the scripts same kind of feature like "Auto Update Schema" menu option/ button to update the schema for all test cases or test suites or the project would be a great feature.
As I am using trial version of "SoapUI Pro/ Rady!API 1.9.0 " @Community please let me know if any such feature is there already or in pipeline.