My requirement: Get the URI/WADL as input from user, create the new REST project and generates the TestSuite and Test Case for each resource.
1. is that possible to do using groovy scripting/soapUI APIs ?
2.if yes kindly tell me the way how i can achive this?
I would expect that to create a REST project, TestSuite and TestCase from a WADL is certainly possible using Groovy Script, but before going any further, given that you say this is based on a URI/WADL that the user provides, may I ask:
a) Why you want to do this and why the usr cannot just use the menu driven functionality e.g. new REST project from WADL?
b) Is it that you want to generate the project on the fly and have many different WADLs to use? If you just want to vary the REST service endpoint / request values of the tests, then there are easier ways to achieve this.
Thanks for the quick response
a) I will have GUI for user to provide the URI / WADL as input. based on that it generates TestSuites,Testcase automatically.
b) Generate the new REST Project and override the endpoint/request params.
Ok, no problem.
for a) I take it you know how to get the GUI to generate a REST project / TestSuite / TestCase based on the WADL/URI? e.g. File New REST Project > Import WSDL (or use URI) etc and generate TestSuite, TestCase and REST Test Request Test Step? Sorry if this is not what you meant.
for b) You would need to parameterise (using property expansions) the enpoint / request params for the REST Test Request TestStep - to do this, have you seen this other questsion & answer that came up today it covers this topic:
Once parameterised, you can then provide the values for the endpoint/request from anywhere you like e.g. files, databases, other service responses, property files etc.
Is this the sort of thing you meant?
a) Yes i know this option avilable in soapUI GUI. But my question here is how i can do this using groovy script. (e.g ) just executing the .bat file will call the groovy script and create the project.xml in specified location. all the inputs (URI/WADL, project name, path) will be passed as parameters.
Ok, sorry, I did wonder if that was what you meant i.e. generate the whole project etc from a command line.
Its definately an interesting question, but unfortunately apart from feeling that it is very doable with Groovy (as I have done / seen bits od scripts like this before), I don't have the script yet and it might take me a while - maybe someone else can jump in if they have such a script?
I did see this post where on page 2 the guy has a Groovy script to create the TestSteps dynamically (but not the project):
I must admit I am quite curious to know why you need to generate the whole thing? As I have always been able to simply create the project / TestSuite / TestCase / Steps manually, parameterise all the aspects that need to be dynamic as property expansions and then pass the poperty vales when running from the command like script - do you need to generate everything on the fly as part of some kind of CI process?
Sorry not to have a quick answer,
It’s ok Rup. Yes I need to generate the whole project from command line and execute as part of the CI process. If you can get me the code it will be very useful…
Ok, no problem.
I will put this on my list of things to do. I did wonder about it some time back, but didn't know how useful it would be. When I crack it I'll share the script with you so you can test it, I might even do a quick blog on it.
Let me know if you crack it first please.
I managed to get a chance to work a little on what we discussed... here is my first quick shot and results, please let me know what you think:
Create a Groovy script with the following content (note if you do this in Eclipse, you'll need to reference all the SoapUI libs):
def uri = "http://jsonplaceholder.typicode.com/posts/1"
WsdlProject project = new WsdlProject()
RestServiceBuilder serviceBuilder = new RestServiceBuilder()
println "service name: "+project.getInterfaceList().name
println "Resource: "+project.getInterfaceList().getOperationList()
RestRequest request = project.getInterfaceList().getOperationList().getRequestList()
Submit submit = (Submit) request.submit( new WsdlSubmitContext(), false );
Response response = submit.getResponse();
String responseContent = response.getContentAsString();
println( responseContent );
Running this gives:
2015-05-15 14:01:13,769 [main] WARN com.eviware.soapui.SoapUI - Could not find jfxrt.jar. Internal browser will be disabled.
14:01:14,606 WARN [SoapUI] Missing folder [/Users/bearsoftware/Documents/workspace-sts-soapui-testarea/TestSoapUIScripts/ext] for external libraries
14:01:15,565 INFO [DefaultSoapUICore] initialized soapui-settings from [/Users/bearsoftware/soapui-settings.xml]
14:01:15,755 INFO [HttpClientSupport$Helper] Initializing KeyStore
service name: http://jsonplaceholder.typicode.com
Resource: RestResource: /posts/1
14:01:19,242 DEBUG [HttpClientSupport$SoapUIHttpClient] Attempt 1 to execute request
14:01:19,242 DEBUG [SoapUIMultiThreadedHttpConnectionManager$SoapUIDefaultClientConnection] Sending request: GET /posts/1 HTTP/1.1
14:01:19,635 DEBUG [SoapUIMultiThreadedHttpConnectionManager$SoapUIDefaultClientConnection] Receiving response: HTTP/1.1 200 OK
14:01:19,640 DEBUG [HttpClientSupport$SoapUIHttpClient] Connection can be kept alive indefinitely
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et **bleep**\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
14:01:51,851 DEBUG [SoapUIMultiThreadedHttpConnectionManager$SoapUIDefaultClientConnection] Connection closed
When creating the project on-the-fly like this there is no need to persist anything or use a TestRunner script - is this allong the lines you need?