Chào các nhà phát triển! Hôm nay, chúng ta sẽ khám phá thế giới kiểm thử đơn vị với FastAPI. Dù bạn là một chuyên gia dày dạn kinh nghiệm hay là một người mới làm quen với FastAPI, hướng dẫn này sẽ giúp bạn đảm bảo API của mình vững chắc nhất có thể. Chúng tôi sẽ đề cập mọi thứ từ những kiến thức cơ bản về kiểm thử đơn vị đến các kỹ thuật cụ thể cho việc kiểm thử ứng dụng FastAPI. Thêm vào đó, chúng tôi sẽ giới thiệu đến bạn một công cụ hữu ích gọi là Apidog có thể giúp bạn đơn giản hóa quy trình kiểm thử.
Tại sao kiểm thử đơn vị lại quan trọng
Trước khi đi vào chi tiết về kiểm thử đơn vị với FastAPI, hãy cùng bàn về lý do tại sao kiểm thử đơn vị cần thiết. Nói một cách đơn giản, kiểm thử đơn vị cho phép bạn xác minh rằng từng phần của ứng dụng của bạn hoạt động như mong muốn. Bằng cách kiểm thử từng thành phần riêng lẻ, bạn có thể phát hiện lỗi sớm và đảm bảo rằng ứng dụng của bạn hoạt động đúng cách.
Dưới đây là một số lý do thuyết phục để bạn chấp nhận kiểm thử đơn vị:
- Phát hiện lỗi sớm: Bằng cách kiểm thử các đơn vị mã nhỏ, bạn có thể xác định và sửa chữa vấn đề trước khi chúng trở thành các vấn đề lớn.
- Đảm bảo chất lượng mã: Kiểm thử đơn vị hoạt động như một mạng lưới an toàn, giúp bạn duy trì mã chất lượng cao khi dự án của bạn phát triển.
- Thuận tiện cho việc tái cấu trúc: Với một bộ kiểm thử vững chắc, bạn có thể tự tin tái cấu trúc mã của mình, biết rằng bất kỳ vấn đề nào cũng sẽ được phát hiện ngay lập tức.
- Cải thiện tài liệu: Các bài kiểm thử phục vụ như tài liệu bổ sung, cho thấy cách thức hoạt động của các phần khác nhau trong ứng dụng của bạn.
Bây giờ chúng ta đã hiểu tầm quan trọng của kiểm thử đơn vị, hãy đi sâu vào chi tiết của việc kiểm thử đơn vị với FastAPI.

Cài đặt dự án FastAPI của bạn
Điều đầu tiên, bạn cần có một dự án FastAPI được thiết lập. Nếu bạn chưa làm điều này, bạn có thể tạo một dự án FastAPI mới bằng cách làm theo các bước sau:
Cài đặt FastAPI và Uvicorn: FastAPI là framework web, và Uvicorn là server ASGI.
pip install fastapi uvicorn
Tạo ứng dụng FastAPI của bạn: Tạo một tệp có tên main.py
và thêm đoạn mã sau:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
Chạy ứng dụng của bạn: Khởi động server bằng Uvicorn.
uvicorn main:app --reload
Ứng dụng FastAPI của bạn giờ đã hoạt động!
Bắt đầu với kiểm thử đơn vị
Cài đặt các phụ thuộc kiểm thử
Để bắt đầu kiểm thử đơn vị, bạn sẽ cần một framework kiểm thử. Chúng tôi khuyên bạn nên sử dụng pytest vì nó dễ sử dụng và được chấp nhận rộng rãi.
Cài đặt pytest bằng cách sử dụng pip:
pip install pytest
Thêm vào đó, cài đặt httpx
để thực hiện các yêu cầu HTTP tới ứng dụng FastAPI của bạn trong quá trình kiểm thử:
pip install httpx
Viết bài kiểm thử đầu tiên của bạn
Hãy viết một bài kiểm thử đơn giản để xác minh rằng endpoint gốc của chúng ta trả về phản hồi mong muốn. Tạo một tệp có tên test_main.py
và thêm đoạn mã sau:
from fastapi.testclient import TestClient
from main import app
client = TestClient(app)
def test_read_root():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Hello": "World"}
Trong bài kiểm thử này, chúng tôi sử dụng TestClient
của FastAPI để gửi một yêu cầu GET đến endpoint gốc và khẳng định rằng phản hồi là chính xác. Chạy bài kiểm thử bằng cách sử dụng pytest:
pytest
Cấu trúc các bài kiểm thử của bạn
Để giữ cho các bài kiểm thử của bạn được tổ chức, hãy xem xét cấu trúc sau cho các tệp kiểm thử của bạn:
project/
├── app/
│ ├── main.py
│ └── ... (mã ứng dụng khác)
├── tests/
│ ├── __init__.py
│ └── test_main.py
Bằng cách đặt các bài kiểm thử của bạn trong một thư mục tests
riêng biệt, bạn có thể duy trì một mã nguồn sạch sẽ và có tổ chức.
Kỹ thuật kiểm thử đơn vị nâng cao
Kiểm thử các endpoint với tham số
FastAPI rất dễ dàng để xử lý các tham số trong các endpoint của bạn. Hãy thêm một endpoint nhận một tham số và viết một bài kiểm thử cho nó.
Cập nhật main.py
của bạn với một endpoint mới:
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
Tiếp theo, thêm một bài kiểm thử cho endpoint này trong test_main.py
:
def test_read_item():
item_id = 42
response = client.get(f"/items/{item_id}")
assert response.status_code == 200
assert response.json() == {"item_id": item_id}
Bài kiểm thử này kiểm tra rằng endpoint trả về đúng item ID đã được truyền vào URL.
Kiểm thử hệ thống injection phụ thuộc
Hệ thống injection phụ thuộc của FastAPI rất mạnh mẽ và linh hoạt. Hãy xem cách bạn có thể kiểm thử các endpoint sử dụng phụ thuộc.
Thêm một phụ thuộc vào main.py
:
from fastapi import Depends
def get_query(q: str = None):
return q
@app.get("/search/")
def search(query: str = Depends(get_query)):
return {"query": query}
Viết một bài kiểm thử cho endpoint này trong test_main.py
:
def test_search():
query = "fastapi"
response = client.get(f"/search/?q={query}")
assert response.status_code == 200
assert response.json() == {"query": query}
Ở đây, chúng tôi kiểm thử rằng hệ thống injection phụ thuộc xử lý đúng tham số truy vấn.
Giới thiệu Apidog để nâng cao kiểm thử
Apidog là gì?
Apidog là một công cụ tuyệt vời giúp đơn giản hóa việc kiểm thử và tài liệu API. Nó tích hợp liền mạch với FastAPI, cho phép bạn tự động hóa và đơn giản hóa quy trình kiểm thử của mình.

Sử dụng Apidog trong các bài kiểm thử của bạn
Apidog cung cấp các decorator để dễ dàng tài liệu và kiểm thử các endpoint của bạn. Đây là cách bạn có thể sử dụng Apidog với ứng dụng FastAPI của bạn.
Thiết lập môi trường kiểm thử của bạn: Điều đầu tiên, hãy thiết lập môi trường kiểm thử của bạn. Điều này bao gồm các hệ thống bạn muốn kiểm thử và Apidog. Mở Apidog và chuyển sang tab kiểm thử.

Xác định các trường hợp kiểm thử của bạn: Tiếp theo, xác định các trường hợp kiểm thử của bạn. Hãy nghĩ về các kịch bản khác nhau mà bạn muốn kiểm thử và ghi lại chúng.

Chạy các bài kiểm thử của bạn: Bây giờ, đã đến lúc để Apidog làm điều kỳ diệu của nó! Chạy các bài kiểm thử của bạn và chờ kết quả.

Phân tích kết quả của bạn: Khi các bài kiểm thử của bạn hoàn tất, hãy phân tích kết quả. Tìm kiếm bất kỳ lỗi nào hoặc hành vi không mong đợi.

Nếu bạn tìm thấy bất kỳ vấn đề nào, hãy sửa chữa chúng và chạy lại các bài kiểm thử của bạn. Lặp lại quy trình này cho đến khi bạn hài lòng với kết quả.
Với Apidog, bạn có thể đảm bảo rằng các bài kiểm thử của bạn không chỉ chính xác mà còn được tài liệu hóa tốt.
Các thực hành tốt nhất cho kiểm thử đơn vị FastAPI
Giữ cho các bài kiểm thử độc lập
Đảm bảo rằng mỗi bài kiểm thử là độc lập và không phụ thuộc vào trạng thái của các bài kiểm thử khác. Việc cách ly này giúp các bài kiểm thử dễ dàng hơn trong việc gỡ lỗi và bảo trì.
Sử dụng Fixtures
Fixtures trong pytest có thể giúp bạn thiết lập và dọn dẹp môi trường kiểm thử. Đây là một ví dụ về fixture cho ứng dụng FastAPI của bạn:
import pytest
from fastapi.testclient import TestClient
from main import app
@pytest.fixture
def client():
return TestClient(app)
def test_with_fixture(client):
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Hello": "World"}
Giả lập các phụ thuộc bên ngoài
Khi các endpoint của bạn phụ thuộc vào các dịch vụ hay cơ sở dữ liệu bên ngoài, hãy sử dụng giả lập để mô phỏng những phụ thuộc đó trong quá trình kiểm thử. Cách tiếp cận này giúp bạn tập trung vào việc kiểm thử logic của ứng dụng mà không bị ảnh hưởng bởi các yếu tố bên ngoài.
Kết luận
Kiểm thử các ứng dụng FastAPI không phải lúc nào cũng đáng sợ. Bằng cách làm theo các bước được nêu trong hướng dẫn này, bạn có thể đảm bảo rằng API của mình đáng tin cậy, dễ bảo trì và được tài liệu hóa tốt. Hãy nhớ sử dụng các công cụ như Apidog để đơn giản hóa quy trình kiểm thử của bạn và giữ cho các bài kiểm thử của bạn được tổ chức và biệt lập.
Giờ thì đến lượt bạn áp dụng những mẹo này vào thực hành và biến ứng dụng FastAPI của bạn trở nên hoàn hảo. Chúc bạn kiểm thử vui vẻ!