•2 min read

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

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

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.

Audio Briefing
0:00 / 0:00
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


Advertisement

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)
Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement