Integration Test Trong Python: Hướng Dẫn Chi Tiết
📌 Nội dung bài viết
1️⃣ Integration Test là gì?
2️⃣ Sự khác biệt giữa Unit Test và Integration Test
3️⃣ Công cụ phổ biến để viết Integration Test
4️⃣ Viết Integration Test với unittest
5️⃣ Viết Integration Test với pytest
6️⃣ Integration Test cho API (Flask/Django)
7️⃣ Tích hợp Integration Test vào CI/CD
8️⃣ Best Practices khi viết Integration Test
1. Integration Test là gì?
💡 Integration Test (Kiểm thử tích hợp) là quá trình kiểm thử sự tương tác giữa các module hoặc thành phần trong hệ thống.
🚀 Mục tiêu của Integration Test:
- Kiểm tra các module hoạt động chính xác khi kết hợp với nhau.
- Xác minh cách các API, cơ sở dữ liệu, và các dịch vụ bên ngoài tương tác.
- Giảm thiểu lỗi khi triển khai hệ thống thực tế.
📌 Ví dụ thực tế:
- Một ứng dụng web có Frontend, Backend, và Database → Kiểm tra xem Frontend có gọi API đúng cách không, và API có đọc dữ liệu đúng từ Database không.
2. Sự khác biệt giữa Unit Test và Integration Test
| Đặc điểm | Unit Test 🛠️ | Integration Test 🔗 |
|---|---|---|
| Mục đích | Kiểm tra từng module/hàm riêng lẻ | Kiểm tra sự kết hợp của nhiều module |
| Phạm vi | Chỉ test một đơn vị nhỏ | Test nhiều thành phần cùng lúc |
| Thời gian chạy | Nhanh, vài mili-giây | Chậm hơn, có thể mất vài giây/phút |
| Phụ thuộc | Không phụ thuộc vào hệ thống bên ngoài | Có thể phụ thuộc vào API, Database, UI |
📌 Tóm lại:
- Unit Test đảm bảo code nhỏ lẻ chạy đúng.
- Integration Test đảm bảo các thành phần hoạt động đúng khi kết hợp.
3. Công cụ phổ biến để viết Integration Test
🔥 Các công cụ hỗ trợ Integration Test trong Python:
✔ unittest (có sẵn trong Python)
✔ pytest (hỗ trợ mạnh mẽ cho test API)
✔ requests (test API HTTP)
✔ Selenium (test UI cho web)
✔ mock (giả lập dữ liệu khi test)
4. Viết Integration Test với unittest
👉 Cài đặt (Python đã có sẵn unittest, không cần cài thêm).
🔹 Ví dụ: Test sự kết nối giữa hai module
Giả sử bạn có module math_utils.py:
def add(a, b):
return a + b
def multiply(a, b):
return a * b
👉 Tạo file test test_math_utils.py
import unittest
import math_utils
class TestMathIntegration(unittest.TestCase):
def test_add_and_multiply(self):
result = math_utils.multiply(math_utils.add(2, 3), 4)
self.assertEqual(result, 20) # (2+3) * 4 = 20
if __name__ == '__main__':
unittest.main()
✅ Chạy test:
python test_math_utils.py
📌 Điểm chính:
✔ Test sự kết hợp giữa add() và multiply().
✔ Nếu một module thay đổi, test sẽ giúp phát hiện lỗi.
5. Viết Integration Test với pytest
🔥 pytest giúp viết Integration Test đơn giản hơn
👉 Cài đặt pytest
pip install pytest
🔹 Ví dụ: Test tích hợp API
Giả sử bạn có API Flask như sau:
📌 File app.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/hello', methods=['GET'])
def hello():
return jsonify({"message": "Hello, World!"})
if __name__ == '__main__':
app.run()
👉 Tạo file test test_app.py
import pytest
from app import app
@pytest.fixture
def client():
app.testing = True
return app.test_client()
def test_hello(client):
response = client.get('/api/hello')
assert response.status_code == 200
assert response.json == {"message": "Hello, World!"}
✅ Chạy test:
pytest test_app.py
📌 Điểm chính:
✔ Dùng pytest.fixture để tạo client gọi API.
✔ Kiểm tra API trả về status code và dữ liệu JSON đúng.
6. Integration Test cho API (Flask/Django)
👉 Test API Flask:
def test_api(client):
response = client.get('/api/data')
assert response.status_code == 200
assert "data" in response.json
👉 Test API Django với Django Test Client:
from django.test import TestCase, Client
class APITest(TestCase):
def setUp(self):
self.client = Client()
def test_api(self):
response = self.client.get('/api/data/')
self.assertEqual(response.status_code, 200)
📌 Lợi ích:
✔ Kiểm tra API có hoạt động đúng không.
✔ Đảm bảo API trả về dữ liệu mong đợi.
7. Tích hợp Integration Test vào CI/CD
🔥 Tích hợp test vào GitHub Actions để kiểm tra code tự động
📌 Tạo file .github/workflows/test.yml
name: Integration Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: '3.10'
- name: Install dependencies
run: pip install pytest flask
- name: Run tests
run: pytest
📌 Lợi ích:
✔ Tự động chạy test khi push code lên GitHub.
✔ Báo lỗi ngay lập tức nếu có lỗi test.
8. Best Practices khi viết Integration Test
✅ Luôn kiểm tra cả dữ liệu đầu vào và đầu ra
✅ Tránh phụ thuộc vào dữ liệu thật (dùng Mock)
✅ Viết test dễ đọc, dễ bảo trì
✅ Tích hợp test vào CI/CD để kiểm tra tự động
📌 Ví dụ về Mock API Response
import requests
from unittest.mock import patch
def get_data():
response = requests.get("https://api.example.com/data")
return response.json()
def test_get_data():
with patch('requests.get') as mock_get:
mock_get.return_value.json.return_value = {"data": "mocked"}
assert get_data() == {"data": "mocked"}
📌 Lợi ích:
✔ Giảm thời gian test (không gọi API thật).
✔ Test ổn định, không bị ảnh hưởng bởi lỗi server API.
9. Tổng Kết
✔ Integration Test giúp kiểm tra sự kết nối giữa các module, API, database.
✔ Dùng unittest hoặc pytest để viết Integration Test dễ dàng.
✔ Tích hợp test vào CI/CD giúp kiểm tra code tự động.
✔ Dùng Mock để test nhanh hơn và ít phụ thuộc vào hệ thống bên ngoài.