Using Rest-assured and TestNG
In this post, we will learn to automate REST APIs using Rest-Assured library and TestNG. Rest Assured is a Java library using which we can test and validate the REST web services. Although Rest-assured provides its own validating mechanism(assertions for validating response) but we can combine Rest-assured with TestNG to get the best of both the libraries.
During the course of this tutorial, we will be using the following-
- Sample Rest API to be used in Automation - RestCountries API
- Rest-Assured and its dependencies (https://code.google.com/p/rest-assured/wiki/Downloads) (Remember to download and add to class path, the other dependencies also). POM dependencies for the Rest Assured and its dependencies-
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>3.1.1</version> </dependency>
- TestNG as testing framework
The following code snippet uses requestSpecBuilder to create a post request. We have used the following parameters in our code, you need to set them as per your requirement-
- APIUrl - Set APIUrl variable with the URL of the Rest API
- APIBody - Set APIBody variable with body of the Rest API containing parameters e.g. {"key1":"value1","key2":"value2"}
- setContentType() - Pass the "application/json", "application/xml" or "text/html" etc. headers to setContenType() method
- Authentication credentials - Pass the username and password to the basic() method and in case of no authentication leave them blank basic("","")
The comments in the following code make it self-explanatory.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package test.qaearth; | |
import org.testng.Assert; | |
import org.testng.annotations.Test; | |
import static io.restassured.RestAssured.given; | |
import java.util.List; | |
import io.restassured.builder.RequestSpecBuilder; | |
import io.restassured.http.ContentType; | |
import io.restassured.response.Response; | |
import io.restassured.specification.RequestSpecification; | |
public class RestTestPOST { | |
@Test | |
public void httpPost() { | |
// Initializing Rest API's URL | |
String APIUrl = "http://{API URL}"; | |
// Initializing payload or API body | |
String APIBody = "{API Body}"; | |
// e.g.- | |
// "{\"key1\":\"value1\",\"key2\":\"value2\"}" | |
// Building request using requestSpecBuilder | |
RequestSpecBuilder builder = new RequestSpecBuilder(); | |
// Setting API's body | |
builder.setBody(APIBody); | |
// Setting content type as application/json or application/xml | |
builder.setContentType("application/json; charset=UTF-8"); | |
RequestSpecification requestSpec = builder.build(); | |
// Making post request with authentication, leave blank in case there | |
// are no credentials- basic("","") | |
Response response = given().authentication().preemptive().basic("username", "password").spec(requestSpec).when() | |
.post(APIUrl); | |
// Fetching param | |
List alpha3Code = response.then().contentType(ContentType.JSON).extract().path("key"); | |
// Asserting that capital of Norway is Oslo | |
Assert.assertEquals(alpha3Code.get(0), "Expected value"); | |
} | |
} |