Quay lại blog
Đối với Tester, Postman cần học những gì?

Đối với Tester, Postman cần học những gì?

Làm Chủ Postman: Hướng Dẫn Toàn Diện Để Tối Ưu Hóa Quy Trình Làm Việc Với API

📋 Mục Lục


Giới thiệu

Postman không chỉ là một công cụ để gửi request và xem response. Nó là một nền tảng API toàn diện, giúp bạn từ khâu thiết kế, thử nghiệm, đến giám sát và xuất bản tài liệu. Với hơn 20 triệu người dùng trên toàn thế giới, Postman đã trở thành tiêu chuẩn de facto trong việc phát triển và kiểm thử API.

Để khai thác tối đa sức mạnh của nó, hãy cùng đi sâu vào các phương pháp và tính năng sau đây.


Cài đặt và Thiết lập ban đầu

🚀 Tải và Cài đặt Postman

  1. Truy cập: https://www.postman.com/downloads/
  2. Chọn phiên bản:
  • Desktop App (Khuyến nghị): Tốt nhất cho development
  • Web App: Chạy trên trình duyệt, tiện cho demo
  1. Đăng ký tài khoản: Tạo account miễn phí để đồng bộ dữ liệu

⚙️ Thiết lập ban đầu

  1. Tạo Workspace đầu tiên:
  • Click vào "Create Workspace"
  • Chọn "Personal" hoặc "Team" tùy nhu cầu
  • Đặt tên có ý nghĩa: "My API Development"
  1. Cấu hình Settings:
  • SettingsGeneral: Bật "Send cookies automatically"
  • SettingsProxy: Cấu hình proxy nếu cần
  • SettingsCertificates: Thêm SSL certificates nếu cần
  1. Import/Export cấu hình:
  • Export settings để backup
  • Import từ team khác nếu có sẵn

1. 🏗️ Nền Tảng Vững Chắc: Tổ Chức Workspace Khoa Học

Đây là bước quan trọng nhất. Một cấu trúc lộn xộn sẽ khiến bạn và team của bạn tốn rất nhiều thời gian về sau.

Collections: Trái tim của sự tổ chức

Hãy coi mỗi Collection là một kho lưu trữ cho một dự án, một microservice hoặc một API cụ thể.

  • Lợi ích:
  • Quản lý tập trung: Tất cả mọi thứ liên quan đến một API (requests, test cases, tài liệu, biến) đều nằm ở một nơi.
  • Dễ dàng chia sẻ: Bạn có thể export/import hoặc chia sẻ toàn bộ Collection cho đồng nghiệp.
  • Tái sử dụng: Chạy toàn bộ kịch bản nghiệp vụ chỉ với vài cú click.

Folders: Phân cấp để rõ ràng

Trong một Collection, hãy dùng Folder để nhóm các endpoint theo chức năng hoặc luồng nghiệp vụ.

Ví dụ cấu trúc cho một API E-commerce:

🛍️ E-commerce API (Collection)
├── 📜 Mô tả & Hướng dẫn chung
├── 👤 User & Authentication (Folder)
│ ├── POST /auth/register
│ ├── POST /auth/login
│ ├── GET /auth/me
│ └── POST /auth/logout
├── 📦 Products (Folder)
│ ├── GET /products
│ ├── GET /products/:id
│ └── GET /products/search?q=...
├── 🛒 Shopping Cart (Folder)
│ ├── GET /cart
│ ├── POST /cart/items
│ └── DELETE /cart/items/:itemId
└── 💳 Orders (Folder)
 ├── POST /orders
 └── GET /orders/:id

✨ Mẹo hay: Bạn có thể thêm Authorization hoặc Scripts ở cấp Collection/Folder. Mọi request bên trong sẽ thừa hưởng các cài đặt này, giúp bạn không phải cấu hình lặp đi lặp lại.

2. 🌳 Biến (Variables): Nguyên Tắc DRY (Don't Repeat Yourself)

Sử dụng biến là chìa khóa để tạo ra các request linh hoạt, dễ bảo trì và có thể chạy trên nhiều môi trường khác nhau.

Hiểu Rõ Các Cấp Độ Biến (Scope)

Cấp ĐộPhạm Vi Ảnh HưởngVí Dụ Sử Dụng
GlobalToàn bộ Workspace (tất cả Collections){{admin_email}} (Dùng cho nhiều dự án). Hạn chế dùng!
CollectionChỉ trong Collection chứa nó{{userId}} được tạo sau khi đăng nhập và dùng trong cả collection.
EnvironmentChỉ khi Environment được chọn{{baseUrl}}, {{api_key}}, {{access_token}} cho môi trường Dev/Staging/Prod.
DataChỉ trong một lần chạy của Collection RunnerDữ liệu từ file CSV/JSON để test với nhiều bộ data khác nhau.
LocalChỉ trong một lần request được thực thipm.variables.set("tempValue", ...) - Biến tạm trong script.

Luồng làm việc với Environment:

  1. Tạo Environments: Click vào icon con mắt ở góc trên bên phải, chọn "Add". Tạo 2 môi trường: Local DevStaging Server.
  2. Thêm biến:
  • Trong Local Dev: baseUrl = http://localhost:8080
  • Trong Staging Server: baseUrl = https://api.staging.mycompany.com
  1. Sử dụng: Trong ô URL của request, gõ {{baseUrl}}/users.
  2. Chuyển đổi: Giờ đây, bạn chỉ cần chọn môi trường mong muốn từ menu dropdown, Postman sẽ tự động dùng đúng baseUrl.

3. 🧪 Scripting: Tự Động Hóa Mọi Thứ

Đây là nơi Postman thể hiện sức mạnh vượt trội. Bạn có thể dùng JavaScript để tự động hóa gần như mọi tác vụ.

Pre-request Scripts: Chuẩn bị trước khi gửi

Mã trong tab này sẽ chạy trước khi request được gửi đi.

  • Tạo dữ liệu động:
// Tạo một email ngẫu nhiên để đăng ký tài khoản mới
const randomString = Math.random().toString(36).substring(2, 10);
pm.collectionVariables.set("random_email", `user_${randomString}@example.com`);
  • Xử lý mã hóa phức tạp: Tạo chữ ký (signature) cho các request yêu cầu bảo mật cao (ví dụ: HMAC).
  • Lấy dữ liệu từ request trước: Dùng pm.sendRequest để gọi một API khác lấy dữ liệu cần thiết cho request hiện tại.

Tests: Kiểm thử & Trích xuất dữ liệu sau khi nhận

Mã trong tab này chạy sau khi nhận được response. Đây là cốt lõi của việc kiểm thử tự động.

  • Kiểm tra cơ bản:
pm.test("Status code is 200 OK", () => pm.response.to.have.status(200));
pm.test("Response time is less than 500ms", () => pm.expect(pm.response.responseTime).to.be.below(500));
  • Kiểm tra nội dung (Body):
const jsonData = pm.response.json();
pm.test("User ID is a non-empty string", () => {
pm.expect(jsonData.id).to.be.a('string').and.not.empty;
});
pm.test("Email matches the one sent", () => {
pm.expect(jsonData.email).to.eql(pm.collectionVariables.get("random_email"));
});
  • Trích xuất dữ liệu và Chaining Requests (Nối chuỗi request):
// Trong request "POST /auth/login"
pm.test("Login successful and token received", () => {
const jsonData = pm.response.json();
pm.expect(jsonData).to.have.property('accessToken');
// Lưu token vào biến Environment để request sau sử dụng
pm.environment.set("AUTH_TOKEN", jsonData.accessToken);
});

// Trong Pre-request Script của request "GET /auth/me"
pm.request.headers.add({ key: 'Authorization', value: `Bearer ${pm.environment.get("AUTH_TOKEN")}` });
  • Kiểm tra cấu trúc (Schema Validation) - CỰC KỲ HỮU ÍCH:
const schema = {
"type": "object",
"properties": {
"userId": { "type": "string" },
"username": { "type": "string" },
"isActive": { "type": "boolean" }
},
"required": ["userId", "username"]
};

pm.test("Response body matches schema", () => {
pm.response.to.have.jsonSchema(schema);
});

4. 🏃 Collection Runner: Thực Thi Kịch Bản Hàng Loạt

Chạy toàn bộ một Collection hoặc Folder theo thứ tự để mô phỏng một quy trình nghiệp vụ hoàn chỉnh.

  • Cách sử dụng:
  1. Click vào Collection và chọn "Run".
  2. Kéo thả để sắp xếp lại thứ tự chạy của các request.
  3. Chọn Environment tương ứng.
  4. Iterations: Số lần lặp lại toàn bộ quy trình.
  5. Data File: Chọn file CSV hoặc JSON để thực hiện test theo hướng dữ liệu (data-driven testing). Mỗi dòng trong file sẽ tương ứng với một lần lặp (iteration).
  6. Nhấn "Run" và xem kết quả. Mọi test pass hay fail đều được thống kê chi tiết.

5. 👻 Mock Servers: Giả Lập API

Đây là tính năng cứu cánh cho team front-end. Họ có thể phát triển giao diện mà không cần chờ back-end hoàn thành API.

  • Cách hoạt động:
  1. Bạn thiết kế các request trong Collection.
  2. Với mỗi request, bạn tạo một Example (ví dụ) với response mong muốn (status code, body, headers).
  3. Postman sẽ tạo ra một URL giả lập. Khi team front-end gọi đến URL này với đúng path và method, Postman sẽ trả về response bạn đã định nghĩa trong Example.

6. 📊 Monitors: Giám Sát Sức Khỏe API

Tự động chạy một Collection theo lịch trình (ví dụ: mỗi 5 phút, mỗi giờ) trên cloud của Postman để:

  • Kiểm tra xem các endpoint quan trọng có đang hoạt động hay không.
  • Đo lường hiệu năng và thời gian phản hồi.
  • Nhận cảnh báo qua email hoặc Slack nếu có bất kỳ test case nào bị fail.

7. 📖 Documentation & Collaboration

  • Tạo tài liệu sống: Postman tự động tạo ra một trang web tài liệu đẹp mắt từ Collection của bạn. Hãy viết mô tả chi tiết bằng Markdown cho từng request, parameter và thêm các Example (ví dụ 200 OK, 404 Not Found...) để tài liệu thêm phong phú.
  • Workspaces: Sử dụng Team Workspace để mọi thành viên có thể truy cập và cập nhật chung một bộ Collections, Environments.
  • Fork & Merge: Quy trình làm việc giống như Git. Bạn có thể tạo một nhánh (fork) của Collection, thay đổi, sau đó tạo Pull Request để người khác review trước khi gộp (merge) lại vào nhánh chính.

8. 🔧 Tính năng nâng cao

GraphQL Support

Postman hỗ trợ đầy đủ GraphQL với các tính năng:

# Query example
query GetUser($id: ID!) {
 user(id: $id) {
 id
 name
 email
 posts {
 title
 content
 }
 }
}

Variables:

{
 "id": "123"
}

WebSocket Testing

Kiểm thử WebSocket connections trực tiếp trong Postman:

  1. Tạo WebSocket request: ws://localhost:8080/chat
  2. Gửi messages: JSON format
  3. Monitor responses: Real-time updates

API Versioning

Quản lý nhiều phiên bản API:

📁 API v1 (Collection)
├── GET /v1/users
└── POST /v1/users

📁 API v2 (Collection) 
├── GET /v2/users
└── POST /v2/users

Custom Code Snippets

Tạo và chia sẻ code snippets:

// Snippet: Generate random UUID
const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
 const r = Math.random() * 16 | 0;
 const v = c == 'x' ? r : (r & 0x3 | 0x8);
 return v.toString(16);
});
pm.collectionVariables.set("random_uuid", uuid);

9. 🎯 Best Practices

📝 Naming Conventions

Collections:

  • [Project] - [API Name] - v[Version]
  • Ví dụ: E-commerce - User API - v2

Requests:

  • [Method] [Endpoint] - [Description]
  • Ví dụ: POST /auth/login - User Authentication

Variables:

  • snake_case cho tên biến
  • UPPER_CASE cho constants
  • Ví dụ: user_id, API_KEY, base_url

🔒 Security Best Practices

  1. Không lưu sensitive data trong Global variables
  2. Sử dụng Environment variables cho API keys
  3. Enable SSL certificate verification
  4. Sử dụng OAuth 2.0 flow đúng cách
// ❌ Không nên
pm.globalVariables.set("password", "secret123");

// ✅ Nên làm
pm.environment.set("api_key", "sk-...");

📊 Performance Testing

// Test response time
pm.test("Response time is acceptable", function () {
 pm.expect(pm.response.responseTime).to.be.below(2000);
});

// Test memory usage
pm.test("Response size is reasonable", function () {
 pm.expect(pm.response.responseSize).to.be.below(1000000); // 1MB
});

🔄 CI/CD Integration

Newman CLI - Chạy Postman tests trong CI/CD:

# Cài đặt Newman
npm install -g newman

# Chạy collection
newman run collection.json -e environment.json

# Với reporting
newman run collection.json -e environment.json -r html,json

GitHub Actions example:

name: API Tests
on: [push, pull_request]
jobs:
 test:
 runs-on: ubuntu-latest
 steps:
 - uses: actions/checkout@v2
 - name: Run Postman Tests
 run: |
 npm install -g newman
 newman run tests/collection.json -e tests/environment.json

10. 🚨 Troubleshooting

Common Issues & Solutions

❌ "Could not get any response"

Nguyên nhân:

  • Server không chạy
  • URL sai
  • Network issues
  • Firewall blocking

Giải pháp:

  1. Kiểm tra server có đang chạy không
  2. Verify URL và port
  3. Test với curl/Postman web version
  4. Check proxy settings

❌ "Authorization failed"

Nguyên nhân:

  • Token expired
  • Wrong credentials
  • Missing headers

Giải pháp:

// Auto-refresh token
if (pm.response.code === 401) {
 pm.sendRequest({
 url: pm.environment.get("auth_url"),
 method: 'POST',
 header: {
 'Content-Type': 'application/json'
 },
 body: {
 mode: 'raw',
 raw: JSON.stringify({
 refresh_token: pm.environment.get("refresh_token")
 })
 }
 }, function (err, res) {
 if (res.json().access_token) {
 pm.environment.set("access_token", res.json().access_token);
 }
 });
}

❌ "Tests are failing randomly"

Nguyên nhân:

  • Race conditions
  • Data dependencies
  • Timing issues

Giải pháp:

// Add delays between requests
pm.test("Wait for processing", function() {
 setTimeout(() => {
 pm.expect(true).to.be.true;
 }, 1000);
});

// Retry mechanism
pm.test("Retry on failure", function() {
 if (pm.response.code !== 200) {
 pm.sendRequest(pm.request, function(err, res) {
 pm.expect(res.code).to.equal(200);
 });
 }
});

🔍 Debugging Tips

  1. Console Logging:
console.log("Request URL:", pm.request.url);
console.log("Request Headers:", pm.request.headers);
console.log("Response Body:", pm.response.text());
  1. Breakpoints trong Tests:
pm.test("Debug test", function() {
 debugger; // Pause execution
 pm.expect(pm.response.code).to.equal(200);
});
  1. Environment Debugging:
pm.test("Check environment", function() {
 console.log("Current environment:", pm.environment.name);
 console.log("All variables:", pm.environment.toObject());
});

11. 🧭 Playbook cho Tester

  • Phân lớp test: Smoke → Regression → Performance (dùng cùng Collection, khác Folder/tags)
  • Tags theo kịch bản: dừng sớm chuỗi khi lỗi nghiêm trọng bằng postman.setNextRequest(null)
  • Quản lý dữ liệu: tạo seedcleanup requests; dọn dữ liệu cũ trong pre-request
  • Idempotent: random hóa input, đảm bảo có thể chạy lặp nhiều lần
// Kết thúc sớm khi lỗi nghiêm trọng
if (!pm.response.to.have.status(200)) {
 postman.setNextRequest(null);
}

12. 📂 Data-driven testing nâng cao

  • Sử dụng CSV/JSON lớn; tách file theo domain (users.csv, orders.csv)
  • Lấy dữ liệu bằng pm.iterationData.get("column")
  • Bỏ qua hàng lỗi nhưng vẫn tiếp tục iteration
// Lấy dữ liệu từ data file
const email = pm.iterationData.get("email");
const name = pm.iterationData.get("name");

// Validate đơn giản cho mỗi hàng
pm.test("Validate input row", function () {
 const valid = email && email.includes("@");
 if (!valid) {
 console.warn("Skip row due to invalid email", email);
 }
 pm.expect(valid).to.be.true;
});

13. 🔐 Auth Recipes: API Key, JWT, OAuth2

API Key qua Header

pm.request.headers.add({ key: "x-api-key", value: pm.environment.get("API_KEY") });

JWT Refresh tự động

if (pm.response.code === 401) {
 pm.sendRequest({
 url: pm.environment.get("auth_refresh_url"),
 method: "POST",
 header: { "Content-Type": "application/json" },
 body: { mode: "raw", raw: JSON.stringify({ refresh_token: pm.environment.get("REFRESH_TOKEN") }) }
 }, (err, res) => {
 const token = res.json().access_token;
 if (token) pm.environment.set("JWT", token);
 });
}

OAuth2 Client Credentials (pre-request)

pm.sendRequest({
 url: pm.environment.get("oauth_token_url"),
 method: "POST",
 header: { "Content-Type": "application/x-www-form-urlencoded" },
 body: { mode: "urlencoded", urlencoded: [
 { key: "grant_type", value: "client_credentials" },
 { key: "client_id", value: pm.environment.get("CLIENT_ID") },
 { key: "client_secret", value: pm.environment.get("CLIENT_SECRET") },
 { key: "scope", value: pm.environment.get("SCOPE") }
 ]}
}, (err, res) => pm.environment.set("ACCESS_TOKEN", res.json().access_token));

14. 📜 Contract Testing với OpenAPI

  • Import openapi.yaml để tạo collection skeleton nhanh
  • Dùng pm.response.to.have.jsonSchema(schema) với schema sinh từ OpenAPI
  • So khớp headers/status codes với spec để bắt lệch hợp đồng
// Ràng buộc tối thiểu của response
const schema = {
 type: "object",
 required: ["id", "createdAt"],
 properties: {
 id: { type: "string" },
 createdAt: { type: "string", format: "date-time" }
 }
};
pm.test("Contract: response matches schema", () => pm.response.to.have.jsonSchema(schema));

15. ⚙️ gRPC và Postman Flows

gRPC

  • Import .proto, chọn method, nhập message, gửi và xác thực
  • Lưu message mẫu làm Examples để tái sử dụng

Postman Flows

  • Kéo-thả xây kịch bản end-to-end: gọi API → nhánh quyết định → loop → aggregate
  • Kết hợp dữ liệu từ nhiều response để mô phỏng user journey phức tạp

16. 📈 Báo cáo & CI nâng cao

  • Dùng Newman reporters: htmlextra, junit, csv cho dashboard/CI
  • Upload artifacts (HTML, JSON) trong CI để review sau build
newman run collection.json -e env.json \
 -r cli,htmlextra,junit --reporter-htmlextra-export reports/report.html \
 --reporter-junit-export reports/junit.xml
# GitLab CI snippet
api_tests:
 image: node:20
 script:
 - npm i -g newman newman-reporter-htmlextra
 - newman run tests/collection.json -e tests/env.json -r cli,htmlextra --reporter-htmlextra-export reports/report.html
 artifacts:
 when: always
 paths:
 - reports/

17. ⌨️ Phím tắt & Năng suất

  • Cmd/Ctrl + Enter: gửi nhanh request
  • Cmd/Ctrl + S: lưu nhanh example/changes
  • Shift + Cmd/Ctrl + E: mở Collection Runner
  • Tạo Snippets cá nhân cho headers chuẩn, auth, uuid, timestamp

18. ❓ FAQ nhanh

  • Tại sao biến không cập nhật? Kiểm tra đúng scope và environment đang chọn.
  • Mock server trả sai? Đảm bảo Example khớp method + path + query.
  • Test không ổn định? Tránh phụ thuộc dữ liệu ngoài, thêm retry/delay, cô lập test.
  • Khác nhau giữa Variables và Data file? Variables cho cấu hình; Data file cho bộ dữ liệu chạy lặp.

Kết luận

Postman là một công cụ mạnh mẽ và linh hoạt cho việc phát triển và kiểm thử API. Bằng cách:

Tổ chức workspace khoa học với Collections và Folders ✅ Sử dụng Variables để tạo requests linh hoạt ✅ Tự động hóa với Scripts và Tests ✅ Chạy batch testing với Collection Runner ✅ Giả lập API với Mock Servers ✅ Giám sát với Monitors ✅ Cộng tác với Team Workspaces

Bạn sẽ có thể:

  • Tăng tốc độ phát triển API
  • Giảm bugs thông qua testing tự động
  • Cải thiện collaboration trong team
  • Tạo documentation chất lượng cao
  • Monitor API health 24/7

🚀 Next Steps

  1. Thực hành: Tạo một Collection cho project hiện tại
  2. Học thêm: Postman Learning Center
  3. Chia sẻ: Export và chia sẻ Collections với team
  4. Nâng cao: Tích hợp với CI/CD pipeline

📚 Tài liệu tham khảo


💡 Pro Tip: Hãy bắt đầu với một Collection nhỏ, làm quen với các tính năng cơ bản, sau đó dần dần áp dụng các tính năng nâng cao. Postman có learning curve khá dễ, nhưng sức mạnh thực sự nằm ở việc sử dụng đúng cách và nhất quán.

Happy API Testing! 🎉

Bài viết liên quan