CYBERSOFT
Đăng nhập

Scripting nâng cao & kiểm thử dựa trên dữ liệu trong Postman

Chuyên công nghệPostman/APIAPIData-driven
🗓 1 tháng trước22 phút đọc·👁 646 lượt xem👤 148 người đọc

Đi sâu vào đối tượng pm: sinh dữ liệu trong pre-request, lấy token bằng pm.sendRequest, chaining qua biến, kiểm định lược đồ ajv, iterationData CSV/JSON và ca âm cho nền tảng SaaS.

1. Scripting nâng cao: khi request tĩnh là chưa đủ

Một nền tảng SaaS đa người thuê (multi-tenant) có API rất động: token hết hạn, mỗi tenant có gói dịch vụ khác nhau, dữ liệu tạo ở bước này lại cần cho bước sau. Nếu chỉ dùng request tĩnh với giá trị cố định, bộ kiểm thử sẽ giòn và không phản ánh hành vi thật. Bài viết này đi sâu vào khả năng lập trình của Postman qua đối tượng pm: tính toán trong pre-request, khẳng định linh hoạt trong test, nối các bước bằng biến, kiểm định lược đồ, và đặc biệt là kiểm thử dựa trên dữ liệu với nhiều ca gồm cả ca lỗi.

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
Sandbox: nơi pm.* biến request thành logic sống
  • Pre-request Script: sinh dữ liệu, ký request, chuẩn bị biến trước khi gửi
  • Test Script: khẳng định phản hồi, trích giá trị, quyết định luồng
  • pm.variables/environment/collection: chia sẻ trạng thái giữa các bước
  • pm.iterationData: đọc dữ liệu từng dòng khi chạy data-driven
Script trong Postman chạy trong sandbox JavaScript có sẵn một số thư viện (lodash, chai, moment ở bản cũ). Hãy dùng chúng vừa đủ để test dễ đọc, tránh biến test thành ứng dụng.

2. Đối tượng pm: bản đồ các API hay dùng

Trước khi viết logic phức tạp, cần nắm chắc các nhánh chính của đối tượng pm. Đây là API do Postman cung cấp, không nên tự bịa tên hàm. Nắm đúng những nhánh này giúp bạn viết script gọn và chạy được cả trên Newman.

javascript
// Các nhánh pm hay dùng (tham chiếu nhanh)
pm.request                 // request sắp gửi (đọc/sửa header, url, body)
pm.response.code           // mã trạng thái, ví dụ 200
pm.response.json()         // parse body JSON
pm.response.headers.get()  // đọc header phản hồi
pm.response.responseTime   // thời gian phản hồi (ms)
pm.test(name, fn)          // khai báo một test case có tên
pm.expect(value)           // chai expect
pm.environment.set/get()   // biến environment
pm.collectionVariables.set/get()
pm.variables.get()         // đọc biến theo thứ tự phạm vi hiện hành
pm.iterationData.get()     // dữ liệu của iteration hiện tại
pm.sendRequest()           // gửi request phụ trong script (ví dụ lấy token)
💡 Dùng pm.variables.get() khi chỉ cần đọc mà không quan tâm biến nằm ở phạm vi nào; Postman sẽ tìm theo thứ tự ưu tiên local → data → environment → collection → global.

3. Pre-request Script: sinh dữ liệu và ký request

Pre-request Script chạy trước khi gửi, là nơi lý tưởng để chuẩn bị dữ liệu động. Với SaaS, ta thường cần một email duy nhất cho mỗi lần tạo tài khoản, một dấu thời gian, hoặc một chữ ký HMAC cho webhook. Ta tính giá trị rồi lưu vào biến để body của request tham chiếu bằng {{...}}. Nhờ vậy mỗi lần chạy dùng dữ liệu mới, tránh lỗi trùng và phản ánh đúng cách hệ thống thật hoạt động.

javascript
// Pre-request Script cho POST /signup
const unique = Date.now();
pm.collectionVariables.set("signupEmail", `qa+${unique}@tenant.io`);
pm.collectionVariables.set("requestedAt", new Date().toISOString());

// Ký HMAC cho webhook bằng CryptoJS có sẵn trong sandbox
const secret = pm.environment.get("webhookSecret");
const payload = pm.collectionVariables.get("signupEmail");
const sig = CryptoJS.HmacSHA256(payload, secret).toString();
pm.request.headers.upsert({ key: "X-Signature", value: sig });
CryptoJS được nạp sẵn trong sandbox nên có thể ký request mà không cần thư viện ngoài. Với logic tạo token phụ trợ, dùng pm.sendRequest.

4. Luồng xác thực: token, refresh và pm.sendRequest

API SaaS thường dùng OAuth2 với access token ngắn hạn. Thay vì dán token bằng tay, ta để pre-request tự lấy token nếu chưa có hoặc đã hết hạn. pm.sendRequest cho phép gửi một request phụ ngay trong script rồi xử lý phản hồi qua callback. Ta lưu access token và thời điểm hết hạn vào biến, và chỉ gọi lại khi cần. Cách này giữ collection tự chủ, chạy được trên Newman mà không cần thao tác tay.

🔒

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 23% 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!