[Bài 6] Request DELETE sử dụng Rest-Assured

Requirement: Xóa Student theo id

Solution: Thông thường để test chức năng delete (cả API hoặc UI) thì cũng nên tạo ra trước rồi xóa, thay vì xóa luôn những cái đang có. Trong TH này mình cũng làm tương tự, mình sẽ gọi API create new Student trước, sau đó sẽ gọi API delete Student.

I. Cách tạo Student

Trong bài số 4, mình đã giới thiệu cách để tạo ra 1 Object Student, tuy nhiên là chúng ta mất khá nhiều công sức để tạo ra được 1 Object như vậy.

Bây giờ, mình sẽ sửa để sao cho mỗi lần khởi tạo 1 Object là đã có chứa đầy đủ thông tin luôn, có id, firstName, lastName…Sau này mình cần sửa field nào, chỉ cần override lại đúng field đó thôi.

Quay trở lại với class Student, mình sẽ viết thêm như sau:

package model;

import com.github.javafaker.Faker;
import lombok.Data;

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

@Data
public class Student {

    private int id;
    private String firstName;
    private String lastName;
    private String email;
    private String programme;
    private List<string> courses;

    private Student(){
        Faker faker = new Faker();
        this.id = 101;
        this.firstName = faker.name().firstName();
        this.lastName = faker.name().lastName();
        this.email = faker.internet().emailAddress();
        this.programme = "Test";
        this.courses = new ArrayList<>();
        courses.add(faker.educator().course());
        courses.add(faker.educator().course());
    }
    public static Student getInstance(){
        return new Student();
    }
}

Ở đây, có 3 điểm đáng lưu ý:

  • Sử dụng Faker để generate fake data, mình đã viết hướng dẫn ở đây. Bạn không nên khai báo Faker như 1 field của Object vì như thế khi Jackson convert từ POJO –> JSON sẽ bị lỗi.
  • Sử dụng getInstance() thay vì public Constructor để sau này mình cần sửa ở Object thì mình không phải sửa những lại những chỗ mình khởi tạo object. Giả sử mình sử dụng public Constructor Student(int id), hôm sau mình sửa thành Student(int id, String firstName) thì mình phải đi sửa lại tất cả những chỗ nào mình đã sử dụng Student(int id), rất mất thời gian.
  • Mình sử dụng private Constructor để việc khởi tạo Object Student chỉ có 1 cách duy nhất là sử dụng method getInstance().

Hãy nhớ add Faker vào file pom.xml

<dependency>
      <groupid>com.github.javafaker</groupid>
      <artifactid>javafaker</artifactid>
      <version>0.18</version>
</dependency>

II. Viết Test

package giangtester;

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

import static io.restassured.RestAssured.given;

class DELETEStudentTest {

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

    @Test
    void deleteAnExistingStudent() {
        // Arrange: Setup data
        Student student = Student.getInstance();
        given().log().all().contentType(ContentType.JSON)
                 .when().body(student).post();

        // Act: Call API delete student
        Response res = given()
                .contentType(ContentType.JSON)
                .when()
                .delete("/{id}", student.getId());

        // Assert
        res.then().statusCode(204);
    }
}

Ở đây có 2 thứ cần lưu tâm:

  • Mình sử dụng given().log().all() để log toàn bộ các thông tin của request. Nếu bạn muốn log response thì sẽ dùng then().log().all()
  • Rest-Assured cho phép sử dụng {varName} với path nên mình có thể dùng delete("/{id}", student.getId()) —> {id} chính là student.getId()

Thôi hết rồi, chào các bạn 😀

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

[…] ← Previous Next → […]

Phạm thị Quyên
Phạm thị Quyên
1 year ago

Có thể có 1 bài cụ thể về teardown xóa không ạ, tại mình mới bắt đầu học mà tìm chưa ra