[Bài 5] Request PUT sử dụng Rest-Assured

Requirement: Thay đổi thông tin của Student có Id = 1
Hiện tại, Student id =1 đang có thông tin như sau:

I. Cách tạo PUT request

Cách tạo PUT request tương tự như tạo POST request, các bạn có thể xem lại bài trước.

Response res = given()
                .contentType(ContentType.JSON)
                .when()
                .body(student)
                .put("/1");

Điểm khác biệt duy nhất ở chỗ put("/1") có path [/:id]

II. Test

package giangtester;

import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;
import model.Student;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;

import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;

class PUTStudentTest {
    @BeforeAll
    static void init() {
        RestAssured.baseURI = "http://localhost";
        RestAssured.basePath = "/student";
        RestAssured.port = 8080;
    }

    @Test
    void changeInformationOfAnExistingStudent() {
        List<String> courses = new ArrayList&lt;>();
        courses.add("Math");
        courses.add("Economics");

        Student student = new Student();
        student.setId(101);
        student.setFirstName("Giang");
        student.setLastName("Nguyen");
        student.setEmail("giang.nguyen@gc.com");
        student.setProgramme("Computer Science");
        student.setCourses(courses);

        Response res = given()
            .contentType(ContentType.JSON)
            .when()
            .body(student)
            .put("/1");
        res.then().statusCode(200).body("msg", equalTo("Student Updated"));

        JsonPath jsonPath = given().when().get("/list").then().extract().body().jsonPath();
        List <Student> students = jsonPath.getList("", Student.class);
        assertThat(students.get(0).getFirstName(), equalTo("Giang"));
    }
}

Ở đây mình sử dụng 2 assertions:

  • Check message sau khi update: “Student Updated”
  • Check firstName của Student đầu tiên trong list Student khi gọi API get Students. (bài 3)

III. Cách sử dụng De-Serialization trong Rest-Assured

Khi tạo ra body cho POST hoặc PUT thì ta sử dụng Serialization để chuyển từ POJO –> JSON. Ngược lại, chuyển từ JSON –> POJO thì ta sử dụng De-Serialization. Cú pháp để làm việc đó là as(ClassName.class), để tìm hiểu thêm thì bạn đọc ở đây.

Tuy nhiên, trong bài này API get Student lại trả về 1 list Student nên mình sử dụng JsonPath để De-Serialization thành List<Student>

JsonPath jsonPath = given().when().get("/list").then().extract().body().jsonPath();
List<Student> students = jsonPath.getList("", Student.class);

Sau đó, mình mới sử dụng assert của Hamcrest để kiểm tra FirstName của Student đầu tiên trong List.

assertThat(students.get(0).getFirstName(), equalTo("Giang"));

IV. Tổng kết

Bài này mình đã có dịp giới thiệu thêm cách tạo PUT request và việc sử dụng De- Serialization. Mình không thường xuyên sử dụng De-Serialization nhưng nó cũng là phần không thể thiếu trong Rest-Assured, nếu bạn định học Rest-Assured để làm được việc thì bạn phải nắm chắc nó. Bài sau, mình sẽ hướng dẫn về DELETE request trước khi chuyển đến phần xây dựng project và hướng dẫn thêm về các library khác.

0 0 votes
Article Rating
Subscribe
Notify of
guest
3 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback

[…] ← Previous Next → […]

Nguyễn Xuân Hoàn
Nguyễn Xuân Hoàn
3 years ago

cho em hỏi là lúc em viết patch() để update 1 function
thì em ko biết chỗ Cookie với token. anh có thể mẫu ví dụ hoặc viết sample được ko anh