POSTMAN VÀ MỘT SỐ TÍNH NĂNG HỮU ÍCH

POSTMAN VÀ MỘT SỐ TÍNH NĂNG HỮU ÍCH

Được ra mắt lần đầu tiên vào năm 2012, trải qua gần 1 thập kỷ với hơn 25 triệu người dùng, POSTMAN đã trở thành công cụ phổ biến nhất được sử dụng trong kiểm thử API (Application Programming Interface – Giao diện lập trình ứng dụng).

POSTMAN cung cấp đa dạng các tính năng như gửi request với các phương thức POST, PUT, GET, DELETE của HTTP, kiểm tra dữ liệu trả về với các định dạng khác nhau như JSON, XML, quản lý request với tính năng Collection, chia sẻ dữ liệu với tính năng Import / Export, v.v. giúp cho những người dù không có kiến thức về lập trình cũng có thể dễ dàng sử dụng.

Sau một thời gian dài làm việc với các tính năng cơ bản, chắc hẳn bạn cũng muốn tìm hiểu thêm những tính năng nâng cao của POSTMAN. Nếu vậy thì bạn không thể bỏ qua các thông tin hữu ích được Briswell Việt Nam chia sẻ trong bài viết lần này.

1. CÀI ĐẶT POSTMAN

Là một công cụ mã nguồn mở (Open Source), bạn có thể dễ dàng tải và cài đặt POSTMAN tại đường dẫn sau:

Trang chủ POSTMAN: https://www.postman.com/downloads/

2. MỘT SỐ TÍNH NĂNG HỮU ÍCH

Ngoài những tính năng cơ bản đã được liệt kê ở đầu bài viết, POSTMAN còn cung cấp 1 số tính năng nâng cao như sau.

2.1 Thiết lập Biến (Variable)

2.1.1 Tại sao nên sử dụng biến?

Đối với các request trong cùng 1 dự án, sẽ có nhiều giá trị được sử dụng chung và được khai báo lặp lại nhiều lần ở các request, ví dụ như tên của domain trên URL hay giá trị của Authorization, v.v.

Nếu tên của domain bị thay đổi hoặc giá trị Authorization được cập nhật sang một giá trị mới thì cần phải cập nhật giá trị mới cho từng request, như vậy khá mất thời gian cũng như dễ xảy ra sai sót và lỗi. Ví dụ: Trường hợp khi đối ứng phase 1, URL của site được đặt là https://api-example1.com/, nhưng khi đối ứng phase 2, URL của site được đổi thành https://api-example2.com/. Khi đó, chúng ta cần tốn nhiều thời gian để cập nhật tên domain mới cho tất cả các request.

Để giải quyết vấn đề này, POSTMAN cung cấp 5 loại biến có phạm vi sử dụng khác nhau bao gồm: Biến Global, biến Collection, biến Environment, biến Data, biến Local. Bằng cách sử dụng biến, khi cần cập nhật các thông tin như tên domain trên URL hay giá trị của Authorization, chúng ta chỉ cần vào nơi khai báo biến, cập nhật giá trị mới cho biến đó, thì tất cả các request đang gọi đến biến đó sẽ được tự động cập nhật giá trị mới nhất.

Trong bài viết lần này, Briswell Việt Nam sẽ hướng dẫn cách khai báo biến trong phạm vi Collection (các biến khác cũng có cách khai báo tương tự). Tức là biến này chỉ có hiệu lực trong phạm vi Collection được khai báo và các request bên trong Collection đó.

2.1.2 Khai báo biến trong Collection trên POSTMAN

Bước 1: Nhấn vào biểu tượng ba chấm ・・・ bên phải tên Collection và chọn Edit
Bước 2: Tại dropdown menu Edit Collection, chọn tab Variables
Bước 3: Ở cột VARIABLE, nhập tên biến
Bước 4: Ở cột CURRENT VALUE, gán giá trị cho biến
Bước 5: Nhấn nút Save

Cách khai báo biến

2.1.3 Gọi biến trong Request

Bước 1: Mở file Request
Bước 2: Gọi biến theo định dạng {{variable_name}}
Bước 3: Nhấn nút Save
Gọi biến

2.2 Cửa sổ Console

Thông thường, chúng ta sẽ kiểm tra giá trị được trả về ở tab Body. Tuy nhiên, đối với trường hợp số lượng parameter trả về nhiều thì việc xem kết quả ở tab Body có chút khó khăn, phải thao tác lăn chuột nhiều lần để kiểm tra được các thông tin ở phía dưới. Để giải quyết vấn đề này, chúng ta có thể sử dụng câu lệnh console.log(pm.response.json()) để in giá trị trả về ra cửa sổ Console và kiểm tra thông tin trả về ở đó.

2.2.1 In thông tin trả về bằng câu lệnh console.log(pm.response.json())

Bước 1: Nhấn vào biểu tượng Console (ở góc dưới bên trái màn hình) để bật cửa sổ Console
Bước 2: Chọn tab Tests
Bước 3: Viết câu lệnh console.log(pm.response.json())
Bước 4: Nhấn nút Send
Bước 5: Xem thông tin trả về được in ra ở cửa sổ Console
Bước 6: Để xóa thông tin được in ra, nhấn nút Clear ở góc phải cửa sổ Console
Cửa sổ Console

2.2.2 Câu lệnh console.log(pm.response.json())

Câu lệnh console.log(pm.response.json()) được cấu tạo bởi 2 thành phần như sau:
console.log(): Là hàm dùng để in ra giá trị của đối tượng đang được gọi đến.
pm.response.json(): Là cú pháp được định nghĩa bởi POSTMAN dùng để trích xuất thông tin được trả về trong phần body.

Ví dụ 1: Phần Response Body là object. In ra toàn bộ thông tin phần Body.
→ Sử dụng câu lệnh console.log(pm.response.json())

Phần Response Body là object. In ra toàn bộ thông tin phần Body.

Ví dụ 2: Phần Response Body là array. In ra toàn bộ thông tin phần Body.
→ Sử dụng câu lệnh console.log(pm.response.json())
Phần Response Body là 1 array. In ra toàn bộ thông tin phần Body
Ví dụ 3: Phần Response Body là array. Chỉ in thông tin của object đầu tiên trong array.
Xét về mặt số lượng và tính chất response parameter thì các object trong một array là tương đương nhau nên chỉ cần kiểm tra đại diện một object.
→ Sử dụng câu lệnh console.log(pm.response.json()[0])
Phần Response Body là 1 array. Chỉ in thông tin của object đầu tiên trong array
Ví dụ 4: Phần Response Body là object. In ra giá trị của 1 response parameter cụ thể.
→ Sử dụng câu lệnh console.log(pm.response.json().{response parameter name})
Phần Response Body là object. In ra giá trị của 1 response parameter cụ thể.

2.3 Giới thiệu về đoạn script được sử dụng để test respone parameter

Đối với các API Search, sẽ có trường hợp trả về dư hoặc thiếu response parameter so với respone parameter được chỉ định trong thiết kế API. Trường hợp này, chúng ta có thể sử dụng đoạn script sau đây để kiểm tra response parameter được trả về từ API có trùng khớp so với các response parameter được chỉ định trong thiết kế theo đơn vị object hay không.

let expectedKeys = []
let returnKeys = Object.keys(pm.response.json())
function checkReturnKeys(expectedKeys,returnKeys){
    let duplicatedExpectedKeysAray = expectedKeys.filter((item,index) => {
        return expectedKeys.indexOf(item) !== index})
    if (duplicatedExpectedKeysAray.length === 0) {
        let missExpectedKeys = expectedKeys.filter((item) => !returnKeys.includes(item))
        let redundantExpectedKeys = returnKeys.filter((item) => !expectedKeys.includes(item))
        if(!_.isEqual(expectedKeys,returnKeys)){
            if(missExpectedKeys.length !== 0 && redundantExpectedKeys.length !== 0){
                console.log('Some parameters that are described in the specification are not being returned in the API response result, such as: '+missExpectedKeys+'. Please check again.')
                console.log('Some parameters are being returned in the API response result that are not described in the specification, such as: '+redundantExpectedKeys+'. Please check again.')
            }else if(missExpectedKeys.length !== 0){
                console.log('Some parameters that are described in the specification are not being returned in the API response result, such as: '+missExpectedKeys+'. Please check again.')
            }else{
                console.log('Some parameters are being returned in the API response result that are not described in the specification, such as: '+redundantExpectedKeys+'. Please check again.')
            }
            return false;
        }else{
            console.log('The parameters returned from the API match those described in the specification.')
            return true;
        }
    }else{
        console.log('The expectedKeys array contains elements with duplicate names, such as: '+ duplicatedExpectedKeysAray+'. Please check again.')
    }
}
pm.test("Check return keys", () => {
    pm.expect(checkReturnKeys(expectedKeys.sort(),returnKeys.sort())).eql(true);
});

2.3.1 Cơ chế hoạt động của đoạn script trên

・Dòng thứ nhất: let expectedKeys = []
expectedKeys là 1 mảng chứa các phần tử response parameter name được trích xuất từ thiết kế API (Kết quả mong đợi)
・Dòng thứ hai: let returnKeys = Object.keys(pm.response.json())
returnKeys là 1 mảng chứa các phần tử response parameter name được trả về từ API (Kết quả thực tế)
・Mục đích của đoạn script này là so sánh phần tử của 2 mảng expectedKeys (Kết quả mong đợi) và returnKeys (Kết quả thực tế) có khớp nhau hay không.
→ Nếu khớp nhau hoàn toàn thì trả về kết quả PASS ở tab Test Results và message thông báo ở tab Console.
→ Nếu không khớp nhau thì sẽ trả về kết quả FAIL ở tab Test Results và message thông báo ở tab Console.
Vì vậy, trước khi chạy đoạn script trên, cần thực hiện 2 thao tác sau:
・Ở dòng thứ nhất, dán các phần tử response parameter name được trích xuất từ thiết kế vào []
・Ở dòng thứ hai, sửa lại pm.response.json() để có thể get đúng các response parameter name của object đối tượng test.

2.3.2 Các bước thực hiện

Bước 1: Dán đoạn script trên vào tab Tests trên POSTMAN.
Dán đoạn script trên vào tab Tests trên POSTMAN.
Bước 2: Mở thiết kế API, ở phần response, xác định object cần test. Trích xuất response parameter name của object đối tượng test.
Ví dụ: API autoDisplaySearchId có 1 object chính là “autoDisplay” và các object con là “material”, “laminate”, v.v.
Hình minh họa dưới đây là hướng dẫn trích xuất response parameter cho object chính là autoDisplay.

Bước 2: Trích xuất response parameter name của object đối tượng test.
Bước 3: Dán response parameter name đã trích xuất ở bước 2 vào [] ở dòng đầu tiên của đoạn script trên.
Ví dụ:
Trước khi dán: let expectedKeys = []
Sau khi dán:
let expectedKeys = ["id","type","code","name","width1","width2","paste","unit","laminateType",
"sort","supplier","maker","settingDate","beforeUnit","comment","disableFlag","createdAt","createdBy",
"createdUserName","updatedAt","updatedBy","updatedUserName"]

Bước 3: Dán response parameter name đã trích xuất ở bước 2 vào [] của dòng đầu tiên của đoạn script

Bước 4: Ở dòng thứ 2 của đoạn script trên, sửa lại phần returnKeys = Object.keys(pm.response.json()) cho phù hợp với object cần test.

Ví dụ 1: API autoDisplaySearchId trả về 1 object. Đối tượng cần test là object autoDisplay của API autoDisplaySearchId thì
returnKeys = Object.keys(pm.response.json())

Ví dụ 2: API autoDisplaySearchId trả về 1 object. Đối tượng cần test là object material của API autoDisplaySearchId thì
returnKeys = Object.keys(pm.response.json().material)

Ví dụ 3: API autoDisplaySearch trả về 1 array. Đối tượng cần test là object autoDisplay của API autoDisplaySearch thì
returnKeys = Object.keys(pm.response.json()[0])

Ví dụ 4: API autoDisplaySearch trả về 1 array. Đối tượng cần test là object material của API autoDisplaySearch thì
returnKeys = Object.keys(pm.response.json()[0].material)

Nhấn nút Send để gửi request rồi kiểm tra kết quả PASS / FAIL ở tab Test Results và xác nhận message thông báo ở tab Console.

Trường hợp 1: Các phần tử trong 2 mảng expectedKeysreturnKeys khớp nhau hoàn toàn. Tức là API trả về các parameter đúng theo thiết kế, không thiếu, không thừa.
・Tab Test Results: Hiển thị PASS
・Tab Console: Hiển thị message
"The parameters returned from the API match those described in the specification."
Trường hợp 1: Các phần tử trong 2 mảng expectedKeys và returnKeys khớp nhau hoàn toàn. (Tức là API trả về các parameter đúng theo thiết kế, không thiếu, không thừa)

Trường hợp 2: Trong mảng expectedKeys có chứa phần tử trùng tên.
・Tab Test Results: Hiển thị FAIL
・Tab Console: Hiển thị message
"The expectedKeys array contains elements with duplicate names, such as: {the same name element}. Please check again."
→ Trường hợp này cần kiểm tra mảng expectedKeys và loại bỏ phần tử trùng. Sau đó, tiến hành chạy lại API.

Trường hợp 2: Trong mảng expectedKeys có chứa phần tử trùng tên.

Trường hợp 3: Trả về dư response parameter so với thiết kế.
・Tab Test Results: Hiển thị FAIL
・Tab Console: Hiển thị message
"Some parameters are being returned in the API response result that are not described in the specification, such as: {parameter name}. Please check again."
→ Trường hợp này thông báo với developer để xóa parameter bị dư.

Trường hợp 3: Trả về dư response parameter so với thiết kế.

Trường hợp 4: Trả về thiếu response parameter so với thiết kế.
・Tab Test Results: Hiển thị FAIL
・Tab Console: Hiển thị message
"Some parameters that are described in the specification are not being returned in the API response result, such as: {parameter name}. Please check again."
→ Trường hợp này thông báo với developer để bổ sung parameter bị thiếu.

Trường hợp 4: Trả về thiếu response parameter so với thiết kế.

Trường hợp 5: Trả về vừa thiếu vừa dư response parameter so với thiết kế.
・Tab Test Results: Hiển thị FAIL
・Tab Console: Hiển thị 2 message
"Some parameters are being returned in the API response result that are not described in the specification, such as: {parameter name}. Please check again."
"Some parameters that are described in the specification are not being returned in the API response result, such as: {parameter name}. Please check again."
→ Trường hợp này thông báo với developer để xóa parameter bị dư và bổ sung parameter bị thiếu.

Trường hợp 5: Trả về vừa thiếu vừa dư response parameter so với thiết kế.

3. Tài liệu tham khảo

https://learning.postman.com/docs/sending-requests/variables/

https://giangtester.com/category/api-testing/postman/