How to write test cases for a REST service hosted somewhere - web-services

I have to write the test cases for a REST service that is hosted somewhere in the universe.I have the base url where it is hosted. How to setup the test cases to ping that service and test on the response json body?

Related

Test auto increment function of web service with simultaneous users

I have a web service that does a simple task of 'auto-incrementing' a simple field.I test it using SoapUI. That is, whenever I run SoapUI, the response would be a value that is one plus it's previous value. Now, the catch is, I want to test simultaneous users running the same web service. Meaning, if they all access the web service at once, the web service will respond with the correct incremented value.
For instance, I have 3 users who accessed the service at the same time. I am expecting that the response (integer value) they would get will not be the same with each other. It should be incremental. That's what I want to test.
I'm thinking of maybe incorporating JMeter and SoapUI, but I'm not sure if that's even possible. Do you have any suggestions on how I can handle this?
SoapUI offers some limited load testing capabilities so if you think the load from one machine will be enough and you will be happy with the load test metrics which reflect only average/min/max response times and throughput - you can conduct your load test using SoapUI only.
If you decide to go for JMeter - be aware that you can migrate your test in at least 2 ways:
Record running SoapUI test scenario using JMeter's HTTP(S) Test Script Recorder
Taurus automation framework comes with SoapUI xml to JMeter jmx converter.
If you want to do it manually check out Building a SOAP WebService Test Plan JMeter User Manual chapter
In order to "tell" JMeter to execute HTTP Request samplers with the desired amount of virtual users at exactly the same moment add Synchronizing Timer as a child of the relevant HTTP Request sampler.

SoapUI: Create mock service with pass-through behavior for selected methods

While developing a web application I have the following use case:
a 3rd party Web Service with quite a lot of methods is deployed on a test server A (with a single endpoint, e.g. http://3rdPartyServer/3rdPartySvc?WSDL)
a new method is about to be implemented in the near future, but I need to use it now
the rest of the methods are used throughout my code extensively
So I would like to do the following:
Create a mock service in SoapUI locally, based on the new WSDL which includes the new WS method (i.e. a superset of the WS methods currently on server A)
point my local application server to use the SoapUI mock service endpoint
mock only the response of the new WS method (create a dummy response for it in SoapUI)
let the other WS method calls to reach server A and return whatever it returns normally (i.e. use SoapUI as a proxy for these calls)
I've gone through the SoapUI documentation regarding service mocking and have used it numerous times, but could not find an option for such "pass-through" behavior.
When you read in your WSDL, the endpoint will point to your server.
Open your service, and select the service endpoint.
Add a second endpoint, to point to your mock. SoapUI has little bit of documentation showing this here. Only step "2. Getting Started" applies, not step 3!
In each of your tests, where you are using the mocked method, you will need to select the mock endpoint. Further discussion is here.

Is there some way to test a Grails CXF client call by providing a response?

I have a grails 2.3.x webapp that uses CXF to call to backend SOAP services. I'd like to set up a test where I call my service, but provide the response back from the service as a string directly to test it.
So, I want to set up a test that will autowire the service. I then set the response somehow as a string. Call the service method under test and under the covers it receives the response string I set and the request is ignored (or possibly even could check its validity). It parses the response which goes through the service code and returns as usual.
I don't want to have to run a separate server for the test. Is there someway to put in the response directly?

How to test multiple Web Services with one script using UFT?

I am trying to create a set of Regression Test scripts to test the different Web Services and the corresponding methods related to my Web Application in HP UFT. I am using the API testing feature of UFT. I have the request and response XMLs (obtained manually) of each web service method necessary for the testing. There are more than 50 web service methods to be tested. The test cases for all of them are same. The input data of the request is currently being set by parameterizing the data from an excel spreadsheet.
Since the test cases are exactly same and the input data for all the web service methods have similar fields, such as First Name, Last Name, LoginID etc., I want to know if there is a way to write a single script which dynamically reads the web service method name and the associated data from the spreadsheet and uses it in the request XML file (same name as the web service method) which is also loaded in run time.
In this way, after the script has been developed, all I need to do prepare a list of all the web service methods to be tested and enter them in the Test spreadsheet along with the required request data. The script would loop through all the web service methods and execute the test cases for each web service method one by one.
in your case I think you should use a Soap Request method rather than a Web Service Call. Using soap request, other than the message itself, you can parameterize also the Endpoint Address and the SoapAction
Hope this helps
Yossi

Spring Web Services: Redirect Web Service Request

I have different Spring Web Services, which are included into the context by the
Endpoint Annotation, so there are no dependencies despite the Annotation (no interface etc.). Therefore, no "context" information is present.
Now I want to chain a web service request, ie. an Endpoint is called which itself should call a web service on the same server. I can use Spring's WebServiceTemplate, however, I need the current server url for this request.
Is there any way how this url can be injected during application startup into the Endpoints? Since the Endpoints do not extend some class, there is no way to get this information anywhere inside the Endpoints, also the request parameters do not have this information (these are simple JAXB-classes, which are marshalled on request).
I believe the best option is to send the URL as part of the request.
This also enables you to dynamically change the URL to a third server later.