NỘI DUNG BÀI HỌC

✳️ Hàm Given() When() Then() trong REST Assured
✳️ Sử dụng cú pháp Request với Params và Header
✳️ Sử dụng cú pháp Response với phương thức GET

✅ Hàm Given() When() Then() trong REST Assured

Trong REST Assured hỗ trợ chúng ta 3 hàm chính given() when() then() để thể hiện code theo kiến trúc BDD. Mỗi hàm sẽ có ý nghĩa riêng của nó để đảm bảo được nhu cầu kiểm thử tự động API theo kiểu RESTful. Và chúng ta sẽ sử dụng những hàm này để thiết kế code test automation cho API sau này.

Ví dụ sử dụng 3 hàm given when then để send một request và validate response:



given(): để khai báo phần sau nó là một sự chuẩn bị trước khi send request, như chỉ định URI, khai báo Header, khai báo Params,...

when(): để khai báo phần sau nó là một hành động trực tiếp để send request, như chỉ định body đầu vào, chỉ định phương thức trong REST,...

then(): để khai báo phần sau nó là một kết quả trả về và có thể validate kết quả trả về đó, như kiểm tra status code, kiểm tra body kết quả,...

Cách viết là chúng ta sẽ sử dụng một cú pháp viết liền nhau giữa given when và then thông qua dấu chấm nối liền nhau như mẫu trên.

Ví dụ khi hàm then() validate kết quả và nhận thấy bị sai, không đúng status code như mẫu sau:



✅ Sử dụng cú pháp Request với Params và Header

Như ví dụ trên từ hàm given when then thì các bạn cũng thấy rất đơn giản để send một request API. Cụ thể chúng ta sử dụng hàm given() để khai báo một URI (HTTP URI) để send request đến URL đầy đủ. (URI + PATH endpoint)

Ngoài ra còn có thể khai báo thêm các Params và Header cho sự chuẩn bị trước khi send request.

Ví dụ chúng ta muốn get all users: https://api.anhtester.com/swagger/index.html#/User%20Management/getUsers




Từ tài liệu trên thì chúng ta có thể biết được yêu cầu cho hàm get all users là:

- Dùng phương thức GET để send request

- Dùng URL là https://api.anhtester.com/api/users nghĩa là lúc bấy giờ cái URIhttps://api.anhtester.com/api còn cái path endpoint là /users. Chổ này trong REST Assured sẽ hỗ trợ đầy đủ để chúng ta khai báo từng phần.

- Cần chỉ định thêm phần Headeraccept: application/json



🔆 Request với Header

Chúng ta sẽ khai báo trong code với REST Assured như sau:

//Khai báo đối tượng request để thiết lập điều kiện đầu vào
//Dùng given() chỉ thị sự thiết lập sẵn điều kiện
RequestSpecification request = given();
request.baseUri("https://api.anhtester.com/api")
    .basePath("/users")
    .header("accept", "application/json");​


Trong chổ khai báo hàm header thì các bạn có thể sử dụng trực tiếp hàm accept để chỉ định thẳng giá trị application/json

//Khai báo đối tượng request để thiết lập điều kiện đầu vào
//Dùng given() chỉ thị sự thiết lập sẵn điều kiện
RequestSpecification request = given();
request.baseUri("https://api.anhtester.com/api")
    .basePath("/users")
    //.header("accept", "application/json")
    .accept("application/json");

Tuy nhiên dùng header thấy chuyên nghiệp hơn và đáp ứng được cho nhiều trường hợp.

Các bạn có thể dùng nhanh đoạn code đầy đủ dưới đây để send request dùng hàm GET cho trường hợp trên:

@Test
public void testGetAllUsers() {
    //Khai báo đối tượng request để thiết lập điều kiện đầu vào
    //Dùng given() chỉ thị sự thiết lập sẵn điều kiện
    RequestSpecification request = given();
    request.baseUri("https://api.anhtester.com/api")
        .basePath("/users")
        //.header("accept", "application/json")
        .accept("application/json");

    //Khai báo đối tượng response để nhận giá trị trả về từ hàm when() làm gì đó
    //Cụ thể thì chúng ta dùng phương thức GET với hàm get() một endpoint 
    Response response = request.when().get();

    //In ra giá trị của response nhận về
    //prettyPrint() là in với nội dung body đã format đẹp mắt
    response.prettyPrint();
}


Thư viện dùng:

import io.restassured.specification.RequestSpecification;
import static io.restassured.RestAssured.given;
import io.restassured.response.Response;

 

🔆 Request với Parameter

Trong trường hợp chúng ta send request có thêm tham số đầu vào như docs API https://api.anhtester.com/swagger/index.html#/User%20Management/getUserByName



Thì chúng ta cần gọi thêm hàm queryParam để truyền tham số vào.

//Khai báo đối tượng request để thiết lập điều kiện đầu vào
//Dùng given() chỉ thị sự thiết lập sẵn điều kiện
RequestSpecification request = given();
request.baseUri("https://api.anhtester.com/api")
    .basePath("/user")
    .accept("application/json");

//Khai báo tham số đầu vào với hàm queryParam
request.queryParam("username", "anhtester");


Ví dụ trên có 1 tham số, trường hợp khác có thêm tham số thì các bạn cứ chấm viết tiếp phía sau nhé.

request.queryParam("username", "anhtester")
    .queryParam("param1", 10)
    .queryParam("param2", "java");


Sau đây là code đầy đủ để các bạn send request cho hàm get user by username:

@Test
public void testUserByUserName() {
    //Khai báo đối tượng request để thiết lập điều kiện đầu vào
    //Dùng given() chỉ thị sự thiết lập sẵn điều kiện
    RequestSpecification request = given();
    request.baseUri("https://api.anhtester.com/api")
        .basePath("/user")
        .accept("application/json");

    //Khai báo tham số đầu vào với hàm queryParam
    request.queryParam("username", "anhtester");

    Response response = request.when().get();
    response.prettyPrint();
}

 

✅ Sử dụng cú pháp Response với phương thức GET

Khi khai báo cú pháp Response thì chúng ta sẽ sử dụng đối tượng class Response được REST Assured hỗ trợ sẵn cùng hàm when() then() để nhận và kiểm tra kết quả.

Lấy ví dụ hàm get user by username trên nhé.

@Test
public void testGetUserByUserName() {
    //Khai báo đối tượng request để thiết lập điều kiện đầu vào
    //Dùng given() chỉ thị sự thiết lập sẵn điều kiện
    RequestSpecification request = given();
    request.baseUri("https://api.anhtester.com/api")
        .basePath("/user")
        .accept("application/json");

    //Khai báo tham số đầu vào với hàm queryParam
    request.queryParam("username", "anhtester");

    //Khai báo đối tượng response để nhận giá trị trả về từ hàm when() làm gì đó
    //Cụ thể thì chúng ta dùng phương thức GET với hàm get() một endpoint
    Response response = request.when().get();

    //In ra giá trị của response nhận về
    //prettyPrint() là in với nội dung body đã format đẹp mắt
    response.prettyPrint();
}


Các hàm RESTful API trong REST Assured:
- get() : tương ứng phương thức GET
- post() : tương ứng phương thức POST
- put() : tương ứng phương thức PUT
- patch() : tương ứng phương thức PATCH
- delete() : tương ứng phương thức DELETE
- head() : tương ứng phương thức HEAD
- options() : tương ứng phương thức OPTIONS

Để muốn nhận kết quả từ Response thì chúng ta gán giá trị từ request trực tiếp cho đối tượng response như đoạn code trên. Áp dụng cho tất cả các phương thức REST khác nêu trên.

@Test
public void testGetUserByUserName02() {
    RequestSpecification request = given();
    request.baseUri("https://api.anhtester.com/api")
        //.basePath("/user")
        .accept("application/json");

    request.queryParam("username", "anhtester");

    //Có thể truyền Path vào trực tiếp phương thức test RESTful
    Response response = request.when().get("/user");
    response.prettyPrint();
}

 

🔆 Verify kết quả từ Response với hàm then()

Khi kiểm tra kết quả thì chúng ta lấy đối tượng response chấm hàm then() để có được các hàm xây dựng sẵn từ REST Assured để hỗ trợ kiểm tra các dạng trả về như status code, content-type, body,...

@Test
public void testVerifyResultFromResponse() {
    RequestSpecification request = given();
    request.baseUri("https://api.anhtester.com/api")
        .accept("application/json");

    request.queryParam("username", "anhtester");

    Response response = request.when().get("/user");
    response.prettyPrint();

    //Verify kết quả từ response với hàm then()
    response.then().statusCode(200);
    response.then().contentType("application/json");
    //Đối với body thì cần điền cấu trúc theo xpath từ json
    //Hàm equalTo thuộc thư viện org.hamcrest.Matchers
    response.then().body("response.username", equalTo("anhtester"));
}


Khi so sánh kết quả trong body thì kiểu trả về là JSON nên chúng ta cần chấm gọi đối tượng trong JSON theo cấp bậc của nó.

Dùng các hàm hỗ trợ so sánh từ thư viện org.hamcrest.Matchers như equalTo, contains,...

import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.contains;


Phần kiểm tra kết quả chúng ta sẽ được học kĩ ở bài sau. Sử dụng thêm thư viện Assert từ TestNG và cả hamcrest

Các bạn có thể dùng thử hàm get() để kiểm thử cho các chức năng nào mà yêu cầu phương thức GET trên tài liệu API mà An đã xây dựng nhé.

https://api.anhtester.com/swagger/index.html

Teacher

Teacher

Anh Tester

Software Quality Engineer

Đường dẫu khó chân vẫn cần bước đi
Đời dẫu khổ tâm vẫn cần nghĩ thấu

Cộng đồng Automation Testing Việt Nam:

🌱 Telegram Automation Testing:   Cộng đồng Automation Testing
🌱 
Facebook Group Automation: Cộng đồng Automation Testing Việt Nam
🌱 
Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium
🌱 Telegram
Manual Testing:   Cộng đồng Manual Testing
🌱 
Facebook Group Manual: Cộng đồng Manual Testing Việt Nam

Chia sẻ khóa học lên trang

Bạn có thể đăng khóa học của chính bạn lên trang Anh Tester để kiếm tiền

Danh sách bài học