top of page

Validate Response Header

How To Validate Response Header in REST Assured ?

REST Assured facilitates us to fetch and validate the header of REST APIs.Rest API has a set of headers that can be divided into two parts as 'Header name' and 'Header value'.

A class Headers is provided by REST Assured for fetching the entire headers :

import io.restassured.http.Headers;

Headers allHeaders = response.headers();

import io.restassured.http.Header;

  • To fetch header name : Header header = header.getName()

  • To fetch header value :  Header header = header.getValue()

When headers have been fetched then assertions are done on it :

import org.testng.Assert;

Assert.assertEquals(header.getName(), expectedHeaderName[i], "Incorrect Header Name Returned");   // Validating header name

Assert.assertEquals(header.getValue(), expectedHeaderValue[i], "Incorrect Header Value Returned");      // Validating header value

Assert.assertEquals(header.getName()+header.getValue(), expectedHeaderName[i]+expectedHeaderValue[i], "Incorrect Header  Returned"); //

Validating both at the same time

  • Here's an Sample Code for Validating Response Header Names and Values :

package apiTesting;

import org.testng.annotations.Test;

import io.restassured.RestAssured;
import io.restassured.http.Header;
import io.restassured.http.Headers;
import io.restassured.specification.RequestSpecification;

import org.testng.Assert;
import org.testng.annotations.BeforeClass;

public class ValidateResponseHeader {
   RequestSpecification httpRequest;
   io.restassured.response.Response response;

    String expectedHeaderName[] = { "Content-Type", "Content-Length", "Date", "Keep-Alive", "Connection" };

    String expectedHeaderValue[] = { "application/json", "493", "", "timeout=20", "keep-alive" };

    @Test
   public void validateResponseHeaderName() {
       Headers allHeaders = response.headers();
       int i = 0;
       for (Header header : allHeaders) {
           Assert.assertEquals(header.getName(), expectedHeaderName[i], "Incorrect Header Name Returned");
           i++;
       }
   }

    @Test
   public void validateResponseHeaderValue() {
       Headers allHeaders = response.headers();
       int i = 0;
       for (Header header : allHeaders) {
           if (i != 2)       
// To skip the Date Header
               Assert.assertEquals(header.getValue(), expectedHeaderValue[i], "Incorrect Header Value Returned");
           i++;
       }
   }

    @Test
   public void validateResponseHeaderName_Value() {
       Headers allHeaders = response.headers();
       int i = 0;
       for (Header header : allHeaders) {
           if (i != 2)     
// To skip the Date Header
               Assert.assertEquals(header.getName() + header.getValue(),
                       expectedHeaderName[i] + expectedHeaderValue[i], "Incorrect Header  Returned");
           i++;
       }
   }

    @BeforeClass
   public void apiSetUP() {
       RestAssured.baseURI = "http://localhost:8080/msg/webapi";
       httpRequest = RestAssured.given();
       response = httpRequest.get("/userProfiles");
   }

}
 

Output :

[RemoteTestNG] detected TestNG version 6.14.3
[TestNGContentHandler] [WARN] It is strongly recommended to add "<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >" at the top of your file, otherwise TestNG may fail or not work as expected.
PASSED: validateResponseHeaderName
PASSED: validateResponseHeaderName_Value
PASSED: validateResponseHeaderValue

===============================================
    Default test
    Tests run: 3, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================

 

  • Validating A Particular Response Header :    io.restassured.response.Response response = httpRequest.get("/Books");

response.header(Write header name here); 

 

package apiTesting;

import org.testng.Assert;
import org.testng.annotations.Test;

import io.restassured.RestAssured;
import io.restassured.specification.RequestSpecification;

 

public class ValidateSpecificHeader {


   @Test
   public void validateHeader_ContentLength() {
       RestAssured.baseURI = "http://localhost:8080/msg/webapi";
       RequestSpecification httpRequest = RestAssured.given();
       io.restassured.response.Response response = httpRequest.get("/userProfiles");

        Assert.assertEquals(response.header("Content-Length"), "493", "Incorrect Header Content-Length Returned");
   }

}
 

Output :

[RemoteTestNG] detected TestNG version 6.14.3
[TestNGContentHandler] [WARN] It is strongly recommended to add "<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >" at the top of your file, otherwise TestNG may fail or not work as expected.
PASSED: validateHeader_ContentLength

===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================

Refer next page Read JSON Response Body

bottom of page