CYBERSOFT
Đăng nhập

Từ test API thủ công đến chạy collection tự động trong CI với Newman

Chuyên công nghệPostman/APIAPICI/CDThực tế
🗓 1 tháng trước22 phút đọc·👁 1,724 lượt xem👤 390 người đọc

Hành trình ngân hàng số: cấu trúc collection và environment, viết test script pm.*, kiểm định lược đồ JSON, chạy Newman với reporter và gác cửa merge trong pipeline CI.

1. Vì sao chuyển test API thủ công sang tự động

Trong một ngân hàng số, mỗi ngày đội QA phải kiểm thử hàng trăm endpoint: mở tài khoản, chuyển khoản, tra cứu số dư, khóa thẻ. Ở giai đoạn đầu, kiểm thử viên thường mở Postman, bấm Send từng request, rồi mắt thường so sánh phản hồi với đặc tả. Cách làm này rất chậm, dễ bỏ sót và không lặp lại được: khi lập trình viên sửa một API lúc nửa đêm, không ai chạy lại toàn bộ. Bài viết này đi từ thao tác thủ công đó tới một quy trình chạy collection tự động, có cổng kiểm định trong CI, để mỗi lần đẩy code là toàn bộ API được gác cửa.

Manual Postman → Newman → CI gate Collection folders + pm.test Environment baseUrl · token newman run CLI + reporters CI gate exit code ≠ 0 → fail htmlextra · junit report → artifact + kiểm định merge
Từ Postman thủ công đến cổng CI với Newman
  • Lặp lại được: cùng một collection chạy giống nhau trên máy dev và trên CI
  • Nhanh: hàng trăm assertion chạy trong vài giây thay vì vài giờ bấm tay
  • Có bằng chứng: report HTML/JUnit lưu lại kết quả cho audit ngân hàng
  • Gác cửa: pipeline fail khi có assertion sai, chặn code lỗi vào nhánh chính
Tự động hóa không thay thế tư duy kiểm thử; nó chỉ giải phóng bạn khỏi thao tác lặp để tập trung vào thiết kế ca kiểm thử tốt hơn.

2. Mô hình Collection, Folder và Request

Đơn vị tổ chức trong Postman là collection: một cây chứa các folder và request. Với hệ core-banking, ta thường tạo một collection cho từng miền nghiệp vụ, ví dụ Accounts, Transfers, Cards. Bên trong mỗi folder là các request cụ thể như POST /accounts, GET /accounts/:id. Cấu trúc rõ ràng giúp Newman chạy đúng thứ tự và giúp người mới đọc hiểu luồng nghiệp vụ. Một collection được lưu dưới dạng file JSON theo chuẩn Collection Format v2.1, nhờ đó có thể đưa vào Git và review như mã nguồn.

  • Collection: đơn vị chạy của Newman, tương ứng một bộ kiểm thử
  • Folder: nhóm logic (ví dụ luồng đăng nhập, luồng chuyển khoản)
  • Request: một lời gọi HTTP với method, URL, header, body
  • Collection JSON: đưa vào Git, review như code, so sánh diff qua các bản
bash
# Cấu trúc thư mục kiểm thử trong repo ngân hàng
banking-api-tests/
├── collections/
│   ├── accounts.postman_collection.json
│   └── transfers.postman_collection.json
├── environments/
│   ├── dev.postman_environment.json
│   └── staging.postman_environment.json
├── data/
│   └── transfer-cases.csv
└── package.json   # scripts newman + reporters
💡 Đặt tên request theo dạng "METHOD /path — mục tiêu" để report đọc như một danh sách checklist nghiệp vụ.

3. Test Script và pm.* trong Postman Sandbox

Mỗi request có hai ô script chạy trong Postman Sandbox (một môi trường JavaScript): Pre-request Script chạy trước khi gửi, và Tests chạy sau khi có phản hồi. Đối tượng trung tâm là pm. Ta dùng pm.test để khai báo một ca kiểm thử có tên, pm.response để đọc phản hồi, và pm.expect (thư viện Chai) để viết khẳng định. Đây chính là cách biến việc "nhìn bằng mắt" thành assertion tự động, chạy được cả trên Newman.

Vòng đời một request trong Postman Sandbox Pre-request Script set biến, ký, sinh data HTTP Request gửi tới API thật/mock Test Script pm.test · pm.expect pm.variables · pm.environment · pm.collectionVariables scope biến chia sẻ giữa các bước → chaining request
Vòng đời request: pre-request → HTTP → test
javascript
// Tab "Tests" cho request GET /accounts/:id
pm.test("Status code là 200", function () {
  pm.response.to.have.status(200);
});

pm.test("Thời gian phản hồi dưới 800ms", function () {
  pm.expect(pm.response.responseTime).to.be.below(800);
});

const body = pm.response.json();
pm.test("Trả về đúng accountId đã yêu cầu", function () {
  pm.expect(body.accountId).to.eql(pm.collectionVariables.get("accountId"));
  pm.expect(body).to.have.property("balance");
  pm.expect(body.currency).to.be.oneOf(["VND", "USD"]);
});
pm.response.to.have.status và pm.expect là hai phong cách khẳng định; cả hai đều hợp lệ, chọn một để nhất quán trong đội.
🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 25% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!