Chúng ta cũng đã có thể build OpenAPi Sepcification/Swagger UI để làm tài liệu mô tả APIs một cách chỉnh chu, chuyên nghiệp hơn; đã có thêm một chút hiểu biết về GraphQL là gì? cũng đã có một góc nhìn riêng về GraphQL và Rest API.  Giờ thì cần một công cụ mạnh mẽ nữa ...

    Sau một thời gian loay hoay tìm kiếm những công cụ có thể dễ dàng thiết kế, phát triển, test các APIs một cách mượt mà. Bài viết này sẽ giúp tìm hiểu một công cụ mà hầu như ai trong ngành IT này cũng biết - nhưng có thể chưa biết nó tuyệt vời đến thế nào :)

Chúng ta cùng đi qua vài gạch đầu dòng như sau:

1.  Postman - API Testing và hơn thế

2. Test Scripts cho Zerobug API

3. "API Testing và hơn thế" ?

Trong bài viết này, chúng ta sẽ đi tổng quát để hiểu được có thể làm được những gì với Postman.Nếu thực sự cần thiết, sẽ có những ví dụ cụ thể hơn về những chức năng, cách sử dụng cho từng trường hợp ở các bài viết sau nhé.

1. Postman - API Testing và hơn thế

Có thể sử dụng Postman qua app, extention của trình duyệt hoặc sử dụng ngay trên hệ thống online.

Trên app thì trông nó như thế này đây

Postman


Cùng list lại những thứ có trong Postman mà chúng ta cần lưu ý:

- Collection: Có thể tạo ra collection cho những API thuộc cùng dự án, service. Trong mỗi collection chúng ta có thể tạo ra các sub folder. Việc này giúp việc quản lý các API project, service một cách thuận tiện, gọn gàng.

- Environments: Đây là một chức năng giúp chúng ta có thể định nghĩa rất nhiều các biến môi trường. Nhờ chức năng này có thể re-use/test được nhiều môi trường mà không cần phải định nghĩa lại Requests cho từng môi trường [local, testing, staging, production]. Các variables có thể định nghĩa theo global hoặc theo từng collection.

environments


environments function


Ví dụ: biến baseUrl ở đây được định nghĩa trong Zerobug trong environment là Zerobug Local. Và trong trường hợp Zerobug được đưa lên testing thì hoàn toàn có thể thay đổi URI và các biến khác có trong environment một cách thuận tiện.

- Pre-request Script/Tests: Ngôn ngữ sử dụng ở đây là Javascript. Quá tuyệt, hầu như chúng ta cũng đã ít nhiều sử dụng nó rồi. Chúng ta cũng không muốn sử dụng một ngôn ngữ phát triển API cụ thể nào đó - như chúng ta đã quen dùng như Python, PHP, .NET vì như vậy qua các dự án, ngôn ngữ khác nhau hay với đội Tester sẽ không tận dụng lại được. Việc sử dụng một ngôn ngữ phổ biến nhất ... thế giới là "Japascript" thì hẳn sẽ rất thuận lợi. 
    
    Ngoài những SNIPPETS có sẵn luôn ở đây, thì hoàn toàn có thể vẽ hươu vẽ vượn gì trong Pre-request Script/Tests này cũng được. Tất nhiên, mục đích quan trọng nhất của phần Tests này là để assert các kết quả rồi để thực hiện các test cases rồi. Cũng từ phần Pre-request Script/Tests này chúng ta sẽ phát triển rất nhiều những thứ hữu ích cho cho ta trong phần "hơn thế" - như ở title của bài viết nhé ;)

- History: Cái này không những thật sự tốt cho người não cá vàng, mà cả khi chúng ta cao hứng muốn xem lại một request nào đó đã được thực hiện.

- Monitors: Là một chức năng cho phép theo dõi về chức năng và hiệu suất của các API. Một chức năng tuyệt vời khi chúng ta làm việc với vai trò của Devops, PM hay Team Lead... Tuy nhiên, bản free thì khá giới hạn việc tracking. Với các dự án cần theo dõi một cách cẩn thận, cũng cần phải tính toán để trả phí cho những request vượt ngưỡng free.

- Runner/Newman: Để thực hiện chạy automation test cho collection. Chúng ta cần tới Runner trên Postman hoặc là Newman trên commandline. Việc có thể chạy automation test bằng Newman trên commandline => nên nó làm được rất nhiều việc khác trong quá trình thực hiện CI. Nó hoàn toàn có thể làm việc được với Jenkins, Circle CI hay Gitlab CI ..
 
- Mock Servers: Có luôn Mock Servers trên Postman! Thật khó tin với một công cụ miễn phí, quả thực nó quá tốt. Với Mock Server chúng ta có thể thiết kế trước các APIs với các các tham số input, output, content-type ... Với mỗi Mock Server sẽ có 1 URI và có thể gửi tới cho đội phát triển hay gửi cho khách hàng confirm ... Chắc chắn rằng, chúng ta sẽ cần tới nó để vẽ ra một cái API cho cả phía front-end và back-end có thể mường tượng, nhìn thấy tận mắt, query tận tay một API - thứ mà team Back-end sẽ phải làm ra và team front-end sẽ sử dụng.  Nó thật sự là một công cụ rất linh hoạt trong việc thiết kế API.

mock server

2. Test Script cho Zerobug API

    Phần này chúng ta sẽ viết một kịch bản đơn giản để thực hiện các Test Case cho Zerobug API. Ý tưởng test thì sẽ triển khai đơn giản thế này: Trước tiên là chạy API Store News (1) - để insert vào db một News mới. Sau đó lấy ID của News đã được thêm vào ở bước (1) để test API Get News information (2). Lấy ID ở bước (1) để test tiếp API Update existing News (3). Thực hiện luôn Delete existing News (4) để xoá đi News đã tạo ở bước (1) và cuối cùng là chạy API Get list of News (5). 

NOTE: Thứ tự chạy các API có thể điều trình lại trong trong phần Runner.

runner order

a. Tạo collection
    Chúng ta có thể tạo collection bằng cách sử dụng lại chính json được cung cấp trong OpenAPI Specification. Postman hỗ trợ luôn import trực tiếp luôn.

OpenAPI Specification


import OpenAPI Specification


b. Setup và viết script    
    Trước hết chúng ta cần tạo một Environment tương ứng cho collection này. Ở đây sẽ tạo một Environment như thế này:
    
Environment Zerobug Local


    Do Zerobug sử dụng Passport, nên chúng ta sẽ viết thêm một Request để lấy token chủ động luôn từ Postman. 

Requesting Token:
    
Request Token


script test requesting token

Code:

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

const response = pm.response.json();
if (response) {
    pm.environment.set("access_token", response.access_token);
    pm.environment.set("refresh_token", response.refresh_token);
    pm.environment.set("expires_in", response.expires_in);
    pm.environment.set("OAuth_timestamp", new Date());
}
pm.test("Requesting Token", () => {
    pm.expect(response.token_type).to.eql('Bearer');
});


Giờ bắt tay vào viết test script cho các APIs:

Store News:

Store News


store news script

Code:

pm.test("Status code is 201", function () {
    pm.response.to.have.status(201);
});

const response = pm.response.json();
const news = response.data;

if (news) {
    pm.environment.set("newsId", news.id);
} pm.test("News created", () => { pm.expect(news).to.be.an("object"); });

Get News:

Get News


Get News Test Script


Code:

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

Update existing News:

Update News

Update News Body


Update News

Code:

pm.test("Status code is 202", function () {
    pm.response.to.have.status(202);
});

Delete existing News:


Delete existing News

delete news test script

Code:

pm.test("Status code is 204", function () {
    pm.response.to.have.status(204);
});

Get list of News:

Get list of News

Code:

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

C. Chạy automation test
Giờ cho chạy thử nhé:

Với Runner trên Postman:

Runner Postman


Với Newman:

Newman

Test passed hết cả. Ngon rồi :)


3. "API Testing và hơn thế" ?

    Phần trên chúng ta đã viết một simple test script. Trong thực tế sẽ phải viết rất nhiều những cases phức tạp. Vậy những trường nào có thể sử dụng với Postman? Chúng ta sẽ liệt kê một vài trường hợp có thể sử dụng Postman sau đây:
    - Tạo và chia sẻ các Collection: Chúng ta có thể dễ dàng chia sẻ Collection cũng như OpenAPI Specification cho các members trong team.
    - Chia sẻ các json chứa các variables định nghĩa trong Environments: Kết hợp với Collections nữa là có thể setup một công cụ hoàn thiện để các thành viên trong team thao tác với API một cách dễ dàng rồi.
    - Tạo và chia sẻ các Test Cases: Chắc chắn rồi. Và một đặt điểm mà rất ưa thích - là nó viết trên ngôn ngữ Javascript và có thể re-use rất tốt.
    - Passing data: Trong trường hợp muốn sử dụng các data từ json file hay từ csv file. Hoàn toàn phù hợp. Postman hỗ trợ điều này:

passing data
    - Compare các APIs: Ví dụ chúng ta phải làm một hệ thống migration API, thì với Postman chỉ cần vài dòng code là có thể compare luôn được input/output của 2 API. Rất tiện lợi!
    - Tuỳ chỉnh các giá trị input/output của Request. Với việc cho phép viết Pre-request Script và Tests Script. Hoàn toàn có thể điều chỉnh, thay đổi hay làm bất cứ điều vì với các giá trị input/output của Request:
    Ví dụ: 
        - Trong json data file, các dữ liệu có thể là dạng date time để sử dụng cho nhiều APIs, mà một số API lại cần date thôi.             Việc này có thể được giải quyết rất đơn giản trong Pre-request script.
        - Chúng ta cần modify lại output của một API nào đó để làm input cho một API khác.
        - Validate các giá trị ouput của API với giá trị trong file CSV chẳng hạn.
        - Output của một API là CSV, chúng ta cần kiểm tra một trường nào đó trong file CSV đó
        - ...
    - Xử lý với file upload: Postman cũng cho phép upload file, sử dụng Multi/form-data request một cách dễ dàng.
    - Connect với Database từ Postman: Vâng, Postman làm được điều này luôn. Chúng ta hoàn toàn có thể connect database để lấy dữ liệu làm input hay checking output.  Quá tuyệt vời!
    - Other: Còn có thể làm rất rất nhiều điều khác nữa với Postman. Từ từ chúng ta sẽ xây dựng những example cho những điều thú vị này nhé.

Have you a nice day!