Pytest từ A đến Z: Tutorial ngắn gọn để chạy test đúng và tự tin deploy

Table of Contents
Pytest Thực Chiến: Ngừng Đoán Mò, Bắt Đầu Test
Có bao giờ test của bạn báo "Pass" xanh lè nhưng code thực tế lại lỗi tung tóe chưa? Pytest rất mạnh, nhưng lúc mới học, nó hay để bạn lọt những thói quen xấu.
Nguyên Tắc Vàng
Test sinh ra là để BÁO LỖI khi code sai. Nếu bạn chưa từng chủ động làm cho test bị "Fail" thử một lần, đừng vội tin nó.
1. Workflow Cơ Bản Của Pytest
Cài Đặt & Chạy
Cài bằng pip install pytest. Tại thư mục dự án, chỉ cần gõ pytest. Nó sẽ tự tìm các file có tên bắt đầu bằng test_*.py.
Viết Test Siêu Đơn Giản
Không cần học cú pháp phức tạp. Cứ viết hàm bắt đầu bằng test_ và dùng assert của Python thuần.
def test_addition():
assert 1 + 1 == 2
Chạy Đích Danh Một Test
Để code nhanh hơn, hãy chỉ chạy đúng cái test bạn đang sửa thay vì chạy lại toàn bộ hệ thống:
pytest test_math.py::test_addition
2. Những "Vũ Khí Hạng Nặng" Của Pytest
Fixtures: Setup Dùng Chung
Dùng fixtures để chuẩn bị dữ liệu giả hoặc kết nối DB một lần duy nhất, tránh việc phải copy-paste code setup vào mọi hàm test.
@pytest.fixture
def empty_cart():
return ShoppingCart()
def test_add_item(empty_cart):
empty_cart.add("apple")
assert len(empty_cart) == 1
Parametrize: Test Nhiều Trường Hợp
Đừng viết hàm test_truong_hop_1, test_truong_hop_2. Hãy dùng parametrize để truyền danh sách các input vào cùng một logic.
@pytest.mark.parametrize("a,b,expected", [(1,2,3), (-1,1,0)])
def test_add(a, b, expected):
assert add(a, b) == expected
Test Bắt Ngoại Lệ (Exceptions)
Tuyệt đối không dùng try/except để kiểm tra lỗi. Hãy dùng pytest.raises để đảm bảo code của bạn tung ra đúng loại lỗi bạn muốn.
def test_divide_by_zero():
with pytest.raises(ZeroDivisionError):
divide(1, 0)
Free In-Browser Developer Tools
Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.
Related Articles

Các mẫu Pytest Fixture và Tham số hóa nâng cao
Thiết kế các bộ kiểm thử gọn gàng với phạm vi pytest fixture, tham số hóa gián tiếp, các hook generator động và các mẫu vòng đời dọn dẹp linh hoạt.
Read more
Bộ thư viện Python mình thực sự đặt cược cho năm 2026 (theo nhu cầu, không phải theo mốt)
Đây là danh sách các thư viện Python mà mình sẽ ưu tiên cho năm 2026, được nhóm theo đúng điểm mạnh và chọn lọc theo tiêu chí “dùng được đến khi triển khai”.
Read more
Kho dữ liệu phân tích Serverless với BigQuery & Cloud Run: Từ luồng GA4 đến cảnh báo SEO tự động
Tìm hiểu cách xây dựng kho dữ liệu phân tích serverless tự động với BigQuery, Google Analytics 4 và Cloud Run: mô hình hóa lược đồ, chuyển đổi SQL theo lịch trình, chi phí không tải và cảnh báo truy vấn SEO tự động.
Read more