REST Assured Tutorial 13 – How to write API Response in a JSON File

Introduction

As a part of the End to End REST Assured Tutorial, in this post, We will learn to write API response to a JSON file in Rest Assured.

We may require to store API JSON responses in to JSON files for future reference as a test result. It may also required to pass stored JSON response as an input to another APIs. We can also store JSON response to extract values in future.

Required Dependecies

I have used Rest Assured and TestNG dependecies here. TestNG dependecies we requires to use “Files” class from Google Common dependecies. TestNG dependecy has transitive dependecies of Guava. So here TestNG can be used for both as Test framework and File handling utils.



    io.rest-assured
    rest-assured
    4.3.3
    test



    org.testng
    testng
    7.3.0
    test

Writing response into a JSON file

Rest Assured provides below methods to get a response as:-

  1. As byte array :- asByteArray()
  2. As input stream :- asInputStream()
  3. As string :- asString()

All the above methods output can be used to write into a JSON file.

Example program

package RestfulBooker.extractResponse;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import com.google.common.io.Files;

import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;

public class WriteResponseInTextFile {

	public static void main(String[] args) throws IOException {

		// There is no need to add escape character manually. Just paste string within
		// double
		// quotes. It will automatically add escape sequence as required.
		String jsonString = "{\"username\" : \"admin\",\"password\" : \"password123\"}";

		// Create a request specification
		RequestSpecification request = RestAssured.given();

		// Setting content type to specify format in which request payload will be sent.
		// ContentType is an ENUM.
		request.contentType(ContentType.JSON);
		// Adding URI
		request.baseUri("https://restful-booker.herokuapp.com/auth");
		// Adding body as string
		request.body(jsonString);

		// Calling POST method on URI. After hitting we get Response
		Response response = request.post();

		// Getting response as a string and writing in to a file
		String responseAsString = response.asString();
		// Converting in to byte array before writing
		byte[] responseAsStringByte = responseAsString.getBytes();
		// Creating a target file
		File targetFileForString = new File("src/main/resources/targetFileForString.json");
		// Writing into files
		Files.write(responseAsStringByte, targetFileForString);

		// Getting response as input stream and writing in to a file
		InputStream responseAsInputStream = response.asInputStream();
		// Creating a byte array with number of bytes of input stream (available()
		// method)
		byte[] responseAsInputStreamByte = new byte[responseAsInputStream.available()];
		// Reads number of bytes from the input stream and stores them into the byte
		// array responseAsInputStreamByte.
		responseAsInputStream.read(responseAsInputStreamByte);
		// Creating a target file
		File targetFileForInputStream = new File("src/main/resources/targetFileForInputStream.json");
		// Writing into files
		Files.write(responseAsInputStreamByte, targetFileForInputStream);

		// Directly getting a byte array
		byte[] responseAsByteArray = response.asByteArray();
		// Creating a target file
		File targetFileForByteArray = new File("src/main/resources/targetFileForByteArray.json");
		// Writing into files
		Files.write(responseAsByteArray, targetFileForByteArray);

	}

}

Output

Refresh the project folder if you are using Eclipse. You should see three files as below:-

Open a file you should see it has stored response as below:-

You may be thinking about which way is more optimal if you want to write into a file. If you notice that we get a response as String or inputStream, we just need to convert them to Byte array before writing into a file. In the third way, we are directly getting Byte Array. Hence the third way is more optimal.

You can download/clone the above sample project from here.

You can subscribe to my YouTube channel RetargetCommon to learn from video tutorials.

If you have any doubt, feel free to comment below.
If you like my posts, please like, comment, share and subscribe.
#ThanksForReading
#HappyLearning

Find all Selenium related posts here, all API manual and automation related posts here, and find frequently asked Java Programs here.

Many other topics you can navigate through the menu.

7 thoughts on “REST Assured Tutorial 13 – How to write API Response in a JSON File

  1. Just to mention: We need to have “json-schema-validator” dependency in order to access Files.write() method from “com.google.common.io” package. Otherwise, we need to add “guava” dependency explicitly.

    1. Yes, that is correct that to use “Files” from Google Common we need “guava” dependency. Since I have TestNG in my project pom.xml and “guava” is a transitive dependency of TestNG.

  2. This is the best thing about your tutorial, you tell concepts like books that too in a noticeably short and precise manner.

    Thanks, keep up the excellent work. Will use asByteArray always

Leave a Reply

Your email address will not be published. Required fields are marked *