Mmaiqai.com
🤖 API Testing · Chương 7 · Mục 7.4

Kết nối DB để verify kết quả trong automation

🎯 Mục tiêu học: hiểu vì sao chỉ kiểm tra response trả về là chưa đủ tin cậy — cần tự tay xác nhận dữ liệu đã thực sự đổi đúng trong database.

Vì sao cần verify cả DB, không chỉ response

Response "thành công" không phải lúc nào cũng đồng nghĩa dữ liệu đã đổi đúng — API có thể trả nhầm 200 trong khi transaction DB thất bại âm thầm, hoặc do đặc thù bất đồng bộ (Mục 3.3) mà dữ liệu cần thêm thời gian mới ổn định. Automation đáng tin cậy nên luôn có bước verify trực tiếp trong DB cho các case liên quan tới thay đổi dữ liệu.

Ví dụ minh hoạ (Python + pytest)

def test_create_order_updates_inventory(api_client, db_conn, valid_sku):
    # 1) Gọi API — tầng "response contract" (nhóm 7 ở Chương 2)
    resp = api_client.post("/v1/orders", json={
        "customerId": "CUS1001",
        "items": [{"sku": valid_sku, "qty": 1}],
    })
    assert resp.status_code == 201
    order_id = resp.json()["orderId"]

    # 2) Verify trực tiếp trong DB — không chỉ tin vào response
    row = db_conn.execute(
        "SELECT status, qty_reserved FROM inventory WHERE sku = %s",
        (valid_sku,),
    ).fetchone()
    assert row is not None, "Không tìm thấy bản ghi tồn kho sau khi tạo đơn"
    assert row["qty_reserved"] >= 1, "Tồn kho chưa được trừ/giữ chỗ đúng"

    # 3) Dọn dẹp dữ liệu sau khi test — để chạy lại nhiều lần không bị lệch
    db_conn.execute("DELETE FROM orders WHERE order_id = %s", (order_id,))
    db_conn.commit()

Nguyên tắc khi kết nối DB trong automation

1. Đọc cấu hình kết nối từ biến môi trường — không hardcode host/user/password trong code, tránh commit nhầm thông tin nhạy cảm.

2. Dùng tài khoản DB chỉ có quyền cần thiết — trên môi trường test, không dùng tài khoản có toàn quyền production.

3. Luôn tự dọn dẹp dữ liệu sau test — để mỗi lần chạy lại không bị ảnh hưởng bởi dữ liệu của lần chạy trước, đặc biệt quan trọng khi chạy tự động trong Tầng 2 (Mục 7.2).

4. Với hệ thống bất đồng bộ, verify có chờ (poll) — như đã nói ở Mục 3.3, không assert ngay lập tức nếu dữ liệu được cập nhật qua message queue.

📌 Ghi nhớ

Đây là điểm khác biệt giữa automation "chỉ gọi API cho có coverage" và automation thực sự đáng tin cậy— verify tận gốc dữ liệu, không chỉ tin vào những gì API tự báo cáo về chính nó.

📖 Thuật ngữ Anh–Việt (mục này)

Đề thi dùng thuật ngữ tiếng Anh — nhớ đúng cụm bên trái. Bấm 🔊 để nghe từng từ, hoặc "Đọc tất cả" để nghe lần lượt Anh → (vài giây) → Việt.

Thuật ngữ (EN)Nghĩa & ghi nhớ nhanh
Database verificationXác nhận trực tiếp trong DB thay vì chỉ dựa vào response API
Test data cleanupDọn dẹp dữ liệu test sau khi chạy, để không ảnh hưởng lần chạy sau
Environment variableBiến môi trường — cách lưu cấu hình nhạy cảm tách khỏi source code

📎 Nội dung do maiqai.com biên soạn — ví dụ minh hoạ, không thuộc hệ thống thật nào.