- Kiểm thử API REST: trạng thái, JSON, trường hợp lỗi
- Tự động hoá bằng pytest và requests
- Hiểu mục đích của contract testing
API là tầng quan trọng nhất để kiểm thử tự động: nhanh, ổn định và gần với logic nghiệp vụ.
API là gì và vì sao kiểm thử ở tầng API?
Phần lớn logic nghiệp vụ nằm sau các API (REST, GraphQL, gRPC). Kiểm thử ở tầng này nhanh hơn kiểm thử giao diện, ổn định hơn và phát hiện lỗi sớm. Một ca kiểm thử API thường kiểm tra: mã trạng thái HTTP, cấu trúc và giá trị JSON, tiêu đề (header), thời gian phản hồi, và các trường hợp lỗi (401, 403, 404, 422).
Thử nhanh với curl
Gửi yêu cầu đến API mẫu công khai và quan sát phản hồi:
curl -s -i https://jsonplaceholder.typicode.com/posts/1Phần đầu cho biết mã trạng thái (200 OK) và tiêu đề, phần sau là nội dung JSON.
Tự động hoá bằng pytest và requests
Hãy kiểm tra cả đường đi đúng lẫn đường lỗi:
import requests
BASE = "https://jsonplaceholder.typicode.com"
def test_lay_bai_viet():
r = requests.get(f"{BASE}/posts/1", timeout=10)
assert r.status_code == 200
data = r.json()
assert data["id"] == 1
assert {"userId", "title", "body"} <= data.keys()
def test_khong_ton_tai():
r = requests.get(f"{BASE}/posts/999999", timeout=10)
assert r.status_code == 404
def test_tao_bai_viet():
r = requests.post(f"{BASE}/posts", json={"title": "t", "body": "b", "userId": 1}, timeout=10)
assert r.status_code == 201
assert r.json()["title"] == "t"Luôn đặt timeout cho yêu cầu mạng, và không đưa khoá API hay mật khẩu thật vào mã nguồn: hãy đọc từ biến môi trường (os.environ) hoặc kho bí mật của CI.
Kiểm thử hợp đồng (contract testing)
Khi nhiều dịch vụ (microservice, frontend–backend) gọi nhau, mỗi bên phụ thuộc vào "hợp đồng" về hình dạng yêu cầu/phản hồi. Với kiểm thử hợp đồng hướng người tiêu dùng (ví dụ công cụ Pact), bên tiêu dùng ghi lại những gì nó mong đợi, bên cung cấp xác minh hợp đồng đó trong CI. Cách này giúp phát hiện thay đổi phá vỡ tương thích mà không cần dựng toàn bộ hệ thống để chạy E2E. Với API mô tả bằng OpenAPI, có thể dùng thêm công cụ sinh/kiểm tra theo lược đồ (schema).
Postman, Bruno và công cụ khác
Postman và Bruno cho phép lưu bộ yêu cầu, viết khẳng định bằng JavaScript và chạy trong CI bằng dòng lệnh (Newman với Postman, bru với Bruno). Chúng phù hợp để khám phá và thử API; khi bộ kiểm thử lớn dần, nhiều đội chuyển sang mã (pytest, Playwright API testing, REST Assured) để dễ tái sử dụng và review.
- Dùng curl gọi /users/1 và /todos?userId=1 trên jsonplaceholder, mô tả phản hồi.
- Viết 4 kiểm thử pytest cho /users: lấy một người dùng, danh sách, id không tồn tại, tạo mới.
- Mô tả bằng lời một "hợp đồng" giữa trang web và API đăng nhập (trường nào bắt buộc, mã lỗi nào).
Bạn đã biết cách kiểm thử API bằng curl và pytest, kiểm tra cả trường hợp lỗi, và hiểu contract testing giúp các dịch vụ phát triển độc lập mà không phá vỡ nhau.

