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:
Nội dung bài viết
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<>(); 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.
[…] ← Previous Next → […]
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
Anh có thể viết sample cho em nhưng đó không phải là ưu tiên trong blog của anh. Nếu em muốn biết thì:
– lên đọc docs của Rest-Assured. https://github.com/rest-assured/rest-assured/wiki/Usage#cookies
– ping skype, anh chỉ trực tiếp