As a part of End to End REST Assured Tutorial , in this post We will learn about “How to send a JSON/XML file as payload to request in Rest Assured”.
Suppose you have a request payload (JSON or XML) in a file and you required to directly send that file as a payload to request in stead of reading it first and then passing. Sending file as a payload directly is a good idea when you have static payloads or minimal modification.
“body()” method of RequestSpecification interface is a overloaded method to allow you to pass payload in different ways. We will use body() method which accepts “File” as argument. Javadoc is below:-
Sending a .json file as a payload
Step 1:- Create a .json file and write payload in that. Keep the file in “src/test/resources” folder.
Step 2 :- Create a File in Java using “File” and pass to body() method.
package DifferentWaysOfPassingPayloadToRequest; import java.io.File; import org.hamcrest.Matchers; import org.testng.annotations.Test; import io.restassured.RestAssured; import io.restassured.http.ContentType; public class PassFileAsPayload { @Test public void passFileAsPayload() { // Creating a File instance File jsonDataInFile = new File("src/test/resources/Payloads/AuthPayload.json"); //GIVEN RestAssured .given() .baseUri("https://restful-booker.herokuapp.com/auth") .contentType(ContentType.JSON) .body(jsonDataInFile) // WHEN .when() .post() // THEN .then() .assertThat() .statusCode(200) .body("token", Matchers.notNullValue()) .body("token.length()", Matchers.is(15)) .body("token", Matchers.matchesRegex("^[a-z0-9]+$")); } }
Sending a .xml file as a payload
Step 1:- Create a .xml file and write payload in that. Keep the file in “src/test/resources” folder.
Step 2:- Create a File in Java using “File” and pass to body() method.
@Test public void passXMLFileAsPayload() { // Creating a File instance File jsonDataInFile = new File("src/test/resources/Payloads/AuthPayload.xml"); //GIVEN RestAssured .given() .baseUri("https://restful-booker.herokuapp.com/auth") // Since I am passing payload as xml. Anyway it is optional as Rest Assured automatically identifies. .contentType(ContentType.XML) .body(jsonDataInFile) // WHEN .when() .post() // THEN .then() .assertThat() .statusCode(200); }
You can clone/download example repo here.
If you have any doubt, feel free to comment below.
If you like my posts, please like, comment, share and subscribe.
#ThanksForReading
#HappyLearning
You can find all Selenium related post here.
You can find all API manual and automation related posts here.
You can find frequently asked Java Programs here.
Hi! I’m new on automation and rest assured… I’m facing the very same situation that you stated here: pass a json file in the body of rest assured. So I did exactly how you mention and I’m getting error 400 because it’s not sending the content, but the path of the file as a string.
Also, I downloaded your project on GIT and when I try to run the test of this example, and it opens another random class and the test is not executed..
I really don’t understand why it isn’t working.. 🙁
Thank you very much to post this. it resolved my xml issue.
Thank you, able to run it, just to share with everyone, when we pass as XML, the output we get as
{
“reason”: “Bad credentials”
}
can you please let me know how can I pass xml attribute value like for username attribute,you have admin value which I want to pass via testdata as variable (meaning xml format is same but value getting change based on requimrnt )…my testdata file is reading data in json form.
Hi Amod , Could you make a video for below scenario :
Update value of key for couple for parameter run time in json file while using POST request payload in rest assured