multi-part file upload using RestAssured

Carvia Tech | November 30, 2019 | 2 min read | 474 views | Rest Assured


In this article we will learn how to test multi-part file upload feature using RestAssured library, various assertions, and kotlin support.

Let’s assume you have a fileupload server that accepts a param + a file and returns a json with upload status. You can download such Spring Boot based server from this github repository:

Optionally, you can follow Spring Boot file upload with Gradle, Kotlin and Junit 5 to setup the file upload server.

RestAssured gradle setup

We will add the latest rest-assured dependencies to our gradle build file.

build.gradle
dependencies {
    testImplementation 'io.rest-assured:json-path:4.1.2'
    testImplementation 'io.rest-assured:xml-path:4.1.2'
    testImplementation 'io.rest-assured:kotlin-extensions:4.1.2'
    testImplementation group: 'io.rest-assured', name: 'rest-assured', version: '4.1.2'
}

test {
	useJUnitPlatform()  (1)
}
1 Configuring JUNIT 5 Platform

You can check the latest version of rest-assured artifacts from https://mvnrepository.com/artifact/io.rest-assured/rest-assured

RestAssured File Upload

Now we will develop a RestAssured test that will upload a file and validate the status.

Lets assume that file upload controller has signature similar to deplicted by the below HTML form:

HTML form for file uplaod
<form id="uploadForm" action="/fileupload" method="post" enctype="multipart/form-data">
        <input type="file" name="file" size="40">
        <input type=submit value="Upload!">
</form>

The server response for successful file upload looks like this:

File upload response
{
  "success": true
}
FileUploadTest.java
import io.restassured.http.ContentType;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.util.Date;

import static io.restassured.RestAssured.given;
import static org.hamcrest.core.IsEqual.equalTo;

public class FileUploadTest {

    private final Logger logger = LoggerFactory.getLogger(FileUploadTest.class);

    @Test
    public void fileUploadTest() {
        given()
            .param("timestamp", new Date().getTime())
            .multiPart("file", new File("/path/to/file.json"))
            .accept(ContentType.JSON)
        .when()
            .post("http://localhost:8080/fileupload")
        .then()
            .statusCode(200)
            .body("success", equalTo(true));
    }
}

RestAssured FileUpload Kotlin version

REST Assured has introduced a new module called "kotlin-extensions" which provides useful extension functions when working with Kotlin.

You can add this kotlin extension library to your project to start developing beautiful rest assured testcases written in kotlin.

build.gradle
testImplementation 'io.rest-assured:kotlin-extensions:4.1.2'

For maven users:

pom.xml
<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>kotlin-extensions</artifactId>
    <version>4.1.2</version>
    <scope>test</scope>
</dependency>

Advantages with Kotlin

Besides a more pleasing API for Kotlin developers it also has a couple of major benefits to the Java API:

  1. All failed expectations are reported at the same time

  2. Formatting the code in your IDE won’t mess up indentation

The same file upload testcase in Kotlin will lokk like below:

REST Assured based Fileupload testcase in Kotlin
@Test
fun `test rest assured file upload with kotlin`() {
    val success: Boolean =
        Given {
            port(8080)
            multiPart("file", File("/path/to/file.json"))
            accept(ContentType.JSON)
        } When {
            post("http://localhost:8080/fileupload")
        } Then {
            statusCode(200)
            body("success", equalTo(true))
        } Extract {
            path("success")
        }
    println("operation status = $success")
}

That’s all.

You can download source for this article from Github repository:


Rest Assured:
  1. Basic Authentication in Rest Assured
  2. SDET: Rest Assured Interview Questions
  3. OAuth2 protected resources in RestAssured Testcases
See all articles in Rest Assured
Top articles in this category:
  1. SDET: Rest Assured Interview Questions
  2. SDET: JUnit interview questions for automation engineer
  3. Top 50 SDET Java Programming Interview Questions & Answers
  4. Top 15 coding problems for SDET Java Interviews
  5. OAuth2 protected resources in RestAssured Testcases
  6. Commonly used Http methods in RESTful services
  7. What is difference between Enumeration and Iterator in Java


Find more on this topic:
SDET Interviews image
SDET Interviews

SDET Java Interview pattern and collection of questions covering SDET coding challenges, automation testing concepts, functional, api, integration, performance and security testing, junit5, testng, jmeter, selenium and rest assured

Last updated 1 week ago


Recommended books for interview preparation:

This website uses cookies to ensure you get the best experience on our website. more info