REST Testing with Java – Rest-Assured Quick Start

rest-assured
PerfectoTopAd

Getting Started with Rest-Assured

I'm currently putting together a test automation framework that will handle both UI and APIs for some new development my company is starting.

Rather than start from scratch, I'm leveraging open-source libraries like Thucydides. One of the framework requirements is to be able to verify responses from REST services using Java and BDD.

One of the open-source libraries that I've found meets all our needs is REST-Assured.


What is Rest-Assured?

Rest-Assured is an open-source Java Domain-specific language (DSL) that makes testing REST service simple. It simplifies things by eliminating the need to use boiler-plate code to test and validate complex responses. It also supports XML and JSON Request/Responses.

Let's take a quick look at how to get started using Rest-Assured in Java with Maven.

Getting Rest-Assured set up in your pom.xml file

The first thing you'll need to do is add the following REST-Assured dependency to your project's pom.xml file:

<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>rest-assured</artifactId>
<version>2.1.0</version>
<scope>test</scope>
</dependency>

For me, this actually caused a classpath clash with groovy and jersey-spring due to incompatibility issues. Because of this, I had to add an exclusion and the following groovy-all dependency in order to get it to work in my environment:

<exclusions>
<exclusion>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
</exclusion>
</exclusions>

<dependency>

<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<!– Needs to be the same version that REST Assured depends on –>
<version>2.2.0</version>

</dependency>

So the final pom.xml entry looks like this:


Sample REST Service to Test

Being a confirmed bibliomaniac, I normally use my favorite Google Rest service, GoogleBooks, for test examples, but my company's network blocks access, so in case you have the same issue I decided to use a local install or WordPress with a REST plugin for our examples. Now you shouldn't have any excuse for not trying this yourself! J

First, we need an application to test in which we can use both UI and REST APIs, so we will install a local copy of WordPress on our machines. This is actually pretty simple when using Microsoft WebMatrix, which makes it easy for anyone to create a local WordPress site.

Install local copy of WordPress

Simply navigate to the following URL, run the wordpress.exe and follow the install wizard:

It will automatically install all the things that WordPress needs to run locally on your machine.

  • Once installed, you should have an option for Microsoft WebMatrix in your All Programs menu option:



  • Clicking on My Sites will give you an option to select WordPress. WordPress should now be running. (If it's not, click on the start button option.)


  • Click on the Site icon to find out what your local WordPress URL is. (Your port number may be different than mine.)


Install JSON API Plug-In

Next, we need to install a JSON API plugin which we'll use to interact with WordPress using REST-Assured.


  • Click on Add New
  • Search for JSON REST API and click on Search Plugins


  • Click on the JSON REST API Install Now link


  • Click on the Plugins>Installed Plugins menu option and make sure that the JSON REST API is activated


Become Familiar with the WordPress JSON API

Once everything is installed, you'll probably want to do some ad-hoc testing to become familiar with what is returned in the WordPress JSON response.

An excellent tool for learning your REST API and doing some exploration on which type of test you want to create – as well as which response values you may need to capture when you start coding your API tests — is a Google Chrome App REST Console.

REST Console is an HTTP Request Visualizer and Constructor tool which helps developers build, debug and test RESTful APIs. To install, open up a Chrome browser:

  • Navigate to:

https://chrome.google.com/webstore/detail/rest-onsole/cokgbflfommojglbmbpenpphppikmonn?hl=en

  • Click on the FREE button


  • (You might get prompted to sign into Google)
  • Click the Add button


  • Once installed, navigate to: chrome://apps
  • You should see the REST Console app.


USING REST CONSOLE

Next let's check out a simple GET request that we'll make to WordPress to retrieve details for post 1.

  • Open up Rest Console in Chrome
  • Add the following to the Request URI field under the Target area(FYI: your port number might be different than mine):

http://localhost:64217/wp-json.php/posts/1


  • Click on the GET button
  • Under the Response section, you should now see the JSON response

020714_1206_RESTTesting15.png








Cool! We're going to use this for our first simple example to send a request using Rest-Assured, then we'll confirm that the response's body contains a title with the value of “Hello world!”

“title”: “Hello world!”,

Finally — using REST-Assured in your IDE

If you've made the proper pom.xml entries we went over at the top of this post, you should be able to begin using REST-Assured.

  • In your IDE, create a new java class named WordPress_API
  • Import the following:
import org.junit.Test;
import org.junit.Before;
import static com.jayway.restassured.RestAssured.expect;
import static org.hamcrest.Matchers.equalTo;
  • Create a public method named simpleExample
  • Add the junit @Test annotation above it.
  • Inside simpleExample, add the following code:

expect().body(“title”, equalTo(“Hello world!”)).when().get(“http://localhost:64217/wp-json.php/posts/1”);

  • Your code should look like the following:


  • Run the jUnit test.
  • The test should pass.


Now — just to prove that this is really working, let's force it to fail so that we can be confident that everything's kosher.

  • Change the Hello world! To Hello JOE!
  • Rerun the test.
  • The test should now fail.

The REST-assured syntax is pretty flexible. For example, we could have also written our test this way:

RestAssured.baseURI = “http://localhost:64217/”;

RestAssured.get(“wp-json.php/posts/1”).then().assertThat().body(“title”, equalTo(“Hello world!”));

Also, if you're familiar with Selenium, REST-Assured can also use hamcrest for testing using hamcrest's library of matchers for building test expressions.

We're just getting started

For some reason, that picture of ham has got my mouth watering, but for now this Post should be enough to whet your appetite. Stay tuned for more REST-Assured post as we work our way through some more examples.

REST-ASSURED – HOW TO POST A JSON REQUEST

REST-assured How to Check Response Times

REST Testing with Java Part Two: Getting Started with Rest-Assured

18 comments
Johan Haleby - February 7, 2014

Good introduction, nice work :) However the idiomatic way to use REST Assured nowadays is using the given-when-then syntax.

Reply
    Joe Colantonio - February 7, 2014

    Hi Johan – I agree – that was going to be my next post:) I had started this awhile ago and did not update the simple example.

    Reply
      mohanakrishna - February 25, 2015

      Hi Joe,

      Your explanation on this rest assured is awesome.
      I like so much now I got bit confidence on Rest assured Testing.

      Please can can you cover remaining topics in Rest assured API testing.

      Reply
        Joe Colantonio - March 6, 2015

        Thanks – Yes I plan on writing more post on rest-assured this year. I also will be interviewing the creator of rest-assured on TestTalks soon. Stay tuned..

        Reply
gajju - February 11, 2014

Please share the screen shot of framework (rest assured java n json)
please share it…..

Reply
    Joe Colantonio - March 1, 2014

    Hi – what do you want to know more about? Not sure I know what screenshot to post – I can write a blog post it you have a specific question/concern. thanks

    Reply
gajju - February 11, 2014

please ..share the framwork with me.

Reply
TamilSelvan - April 23, 2014

Hi Joe,
Can you tel me how to do a PUT request using rest assured??
If we need to pass [1,2] as the request and do a PUT request.
It works perfectly fine when I pass [1,2] in the request payload,request method -PUT and URI using REST console plugin.

Reply
Karthik - April 28, 2014

Hy Joe,

Please leave the previous issue, I just found a way and fixed it !!!

Its working fine.

Thanks,
Karthik KK

Reply
[BLOCKED BY STBV] soapUI – How to Test a REST Service | Joe Colantonio - Selenium-UFT-QTP-SoapUI-ALM-LoadRunner & more - July 17, 2014

[…] be looking at soapUI but you can also programmatically test a rest service using a library like rest-assured without using a vendor […]

Reply
Vijai - July 19, 2015

Thanks for the detail explanation. I was able to do as per the above instructions. When i tried it gives in the http format, not able to get the JSON. Request your help.

Reply
    Joe Colantonio - July 19, 2015

    Not sure what error message are you getting? Are on one a company machine that block certain sites?

    Reply
Rohit - July 30, 2015

Thanks a lot Joe, you made it sound so simple and straight.
Will be trying it out now.

Thanks

Reply
jitendr - December 17, 2015

Nice Article with good example for practice. Thanks for sharing detail information.

Reply
Eyal - December 21, 2015

Great post! thanks a lot! Really helps in getting started! (-:

Reply
Click here to add a comment

Leave a comment: