top of page
hand-businesswoman-touching-hand-artificial-intelligence-meaning-technology-connection-go-
Writer's picturevidhya ganesan

Creating Request Payload (Request Body) in API Testing using REST Assured

What is API Testing?

API -Application Programming Interface Testing is a software testing practice that tests the APIs directly — from their functionality, reliability, performance, to security. Part of integration testing, API testing effectively validates the logic of the build architecture within a short amount of time. In software application (app) development, API is the middle layer between the presentation (UI) and the database layer. APIs enable communication and data exchange from one software system to another.



API Restaurant Analogy


API Testing Types

  • Validation Testing

  • Functional Testing

  • UI Testing

  • Security Testing

  • Load Testing

  • Runtime and error detection

  • Penetration Testing

  • Fuzz Testing


What is Request Body?


A request body is data sent by the client to your API. A response body is the data your API sends to the client. The request body is used to send and receive data via the REST API. If we are using POST/PUT API, then based on the REST API contract, we should send the whole resource information because these methods work on the whole resource.


API Framework



Sample API framework


Request body creation:

We can send payload using the following ways.

  • Hashmap

  • org.json

  • POJO (Plain Old Java Object)

  • External json file


Example: Sending POST request with the valid URL and valid data


Step 1:Create Feature file for POST request


Scenario: Verify POST request to post data into program module with valid base URL and valid data

Given User sets request for Program module with valid base URL and valid request body

When User sends POST request with valid data

Then Request should be successful with status code "201" for POST request


Note: Gherkin is highlighted since we have not created stepDefinition file and the steps are still unimplemented


Step 2: Create Payload File. This file is required for sending request body using POJO class. Please refer "Scenario THREE"


public class PostProgramPOJO {

String programName;

String programType;

String location;

String studentName;

public String getStudentName() {

return studentName;

}

public void setStudentName(String studentName) {

this.studentName = studentName;

}

public String getProgramName() {

return programName;

}

public void setProgramName(String programName) {

this.programName = programName;

}

public String getProgramType() {

return programType;

}

public void setProgramType(String programType) {

this.programType = programType;

}

public String getLocation() {

return location;

}

public void setLocation(String location) {

this.location = location;

}

}

Step 3: Create json file to send request body using external file. Please refer to "Scenario four"

We have to create a file with extension .json and save it at project level. All the data must be entered only in json format. (Example: Timesheet1.json)


Step 4: Create StepDefinition file and add unimplemented steps


Scenario ONE : Sending Request Body using "HashMap"

@Given("User sets request for Program Module with valid base URL and valid request body")

public void user_sets_request_for_program_module_with_valid_base_url_and_valid_request_body() {

this.uri = Config.PostProgram_URL;

this.request = RestAssured.given().header("Content-Type", "application/json");

logger.info("Request set for Program module with valid base URL and valid data");

}


@When("User sends POST request with valid data")

public void user_sends_post_request_with_valid_data() {

HashMap data = new HashMap();

data.put("studentName", "John");

data.put("programName", "Business Analytics");

data.put("programType", "Geaduate");

data.put("location", "Boston");


response = this.request

.body(data)

.when()

.post(this.uri)

.then().log().all().extract().response();

logger.info("Post request sent with valid data");

}


@Then("Request should be successful with status code {string} for POST request")

public void request_should_be_successful_with_status_code_for_post_request(String statuscode) {

int Poststatuscode = response.getStatusCode();

if (Poststatuscode == 201) {

response.then().statusCode(Integer.parseInt(statuscode));

logger.info("Post Request Successful");





 

Scenario TWO : Sending Request Body using "org.Json"

@Given("User sets request for Program Module with valid base URL and valid request body")

public void user_sets_request_for_program_module_with_valid_base_url_and_valid_request_body() {

this.uri = Config.PostProgram_URL;

this.request = RestAssured.given().header("Content-Type", "application/json");

logger.info("Request set for Program module with valid base URL and valid data");

}


@When("User sends POST request with valid data")

public void user_sends_post_request_with_valid_data() {

JSONObject body = new JSONObject();

body.put("studentName", "John");

body.put("programName", "Business Analytics");

body.put("programType", "Geaduate");

body.put("location", "Boston");


response = this.request

.body(body.toJSONString())

.when()

.post(this.uri)

.then()

.log().all().extract().response();

}


@Then("Request should be successful with status code {string} for POST request")

public void request_should_be_successful_with_status_code_for_post_request(String statuscode) {

int Poststatuscode = response.getStatusCode();

if (Poststatuscode == 201) {

response.then().statusCode(Integer.parseInt(statuscode));

logger.info("Post Request Successful");



 

Scenario THREE: Sending Request Body using "POJO (PLAIN OLD JAVA OBJECT") CLASS

@Given("User sets request for Program Module with valid base URL and valid request body")

public void user_sets_request_for_program_module_with_valid_base_url_and_valid_request_body() {

this.uri = Config.PostProgram_URL;

this.request = RestAssured.given().header("Content-Type", "application/json");

logger.info("Request set for Program module with valid base URL and valid data");

}


@When("User sends POST request with valid data")

public void user_sends_post_request_with_valid_data() {

PostProgram data = new PostProgram();

data.setStudentName("John");

data.setProgramName("Business Analytics");

data.setProgramType("Graduate");

data.setLocation("Boston");

response = this.request.body(data).when().post(this.uri).then().log().all().extract().response();

logger.info("Post request sent with valid data");

}

@Then("Request should be successful with status code {string} for POST request")

public void request_should_be_successful_with_status_code_for_post_request(String statuscode) {

int Poststatuscode = response.getStatusCode();

if (Poststatuscode == 201) {

response.then().statusCode(Integer.parseInt(statuscode));

logger.info("Post Request Successful");



 

Scenario FOUR: Sending Request Body using "External json File"

@Given("User sets request for Program Module with valid base URL and valid request body")

public void user_sets_request_for_program_module_with_valid_base_url_and_valid_request_body() {

this.uri = Config.PostProgram_URL;

this.request = RestAssured.given().header("Content-Type", "application/json");

logger.info("Request set for Program module with valid base URL and valid data");

}


@When("User sends POST request with valid data")

public void user_sends_post_request_with_valid_data() {

File jsonfile = new File("JsonFiles/Timestamp1.json");

response = this.request.body(jsonfile).when().post(this.uri).then().log().all().extract().response();

logger.info("Post request sent with valid data");

}

@Then("Request should be successful with status code {string} for POST request")

public void request_should_be_successful_with_status_code_for_post_request(String statuscode) {

int Poststatuscode = response.getStatusCode();

if (Poststatuscode == 201) {

response.then().statusCode(Integer.parseInt(statuscode));

logger.info("Post Request Successful");



 

Conclusion:

In this blog, our main focus was to learn about different ways to request body. There are many features which could be incorporated to API testing to make it efficient and time saving. Example: Data Driven testing, various response body validations (header, cookie, status line, json schema), chaining concept, serialization and deserialization. Please leave your valuable comments to improve the blog.

5,370 views0 comments

Opmerkingen

Beoordeeld met 0 uit 5 sterren.
Nog geen beoordelingen

Voeg een beoordeling toe
bottom of page