FastAPI তে Integration Testing এবং Async Testing সেটআপ করা একটি গুরুত্বপূর্ণ অংশ, যেটি অ্যাপ্লিকেশনের কার্যকারিতা এবং নির্ভরযোগ্যতা নিশ্চিত করতে সহায়ক। এখানে আমরা দেখব কিভাবে FastAPI এ Integration Testing এবং Async Testing কনফিগার করতে হয়।
Step 1: টেস্টিং লাইব্রেরি ইনস্টল করা
FastAPI তে টেস্টিং করার জন্য সাধারণত pytest এবং httpx ব্যবহার করা হয়। httpx লাইব্রেরি FastAPI-র async ফিচারগুলো সাপোর্ট করে এবং HTTP রিকোয়েস্টের মাধ্যমে অ্যাপ্লিকেশনের পরীক্ষা করতে সহায়ক হয়।
pip install pytest httpx
Step 2: FastAPI অ্যাপ তৈরি করা
ফাস্টএপিআই অ্যাপ্লিকেশনের জন্য টেস্টিং সেটআপ করার আগে একটি সাধারণ FastAPI অ্যাপ তৈরি করি।
উদাহরণ: FastAPI অ্যাপ
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.post("/items/")
async def create_item(item: Item):
return {"name": item.name, "price": item.price}
এখানে, /items/ এন্ডপয়েন্ট একটি POST রিকোয়েস্ট গ্রহণ করে এবং একটি Item নামক মডেল ফেরত দেয়।
Step 3: Integration Testing
Integration Testing হল এমন একটি প্রক্রিয়া যেখানে পুরো সিস্টেমের কাজ পরীক্ষা করা হয়, যাতে নিশ্চিত হওয়া যায় যে বিভিন্ন অংশ একসাথে সঠিকভাবে কাজ করছে। FastAPI তে integration testing করার জন্য TestClient ব্যবহার করা হয়, যা অ্যাপ্লিকেশনের HTTP রিকোয়েস্ট ও রেসপন্স সিমুলেট করতে সহায়ক।
উদাহরণ: Integration Test
from fastapi.testclient import TestClient
from app import app # আপনার FastAPI অ্যাপ্লিকেশনের অবজেক্ট এখানে ব্যবহার করুন
client = TestClient(app)
def test_create_item():
response = client.post("/items/", json={"name": "Laptop", "price": 1500.00})
assert response.status_code == 200
assert response.json() == {"name": "Laptop", "price": 1500.00}
ব্যাখ্যা:
TestClient: FastAPI অ্যাপ্লিকেশনের জন্য HTTP ক্লায়েন্ট তৈরি করে যাGET,POST,PUT,DELETEরিকোয়েস্ট পাঠাতে সাহায্য করে।client.post(): এটি POST রিকোয়েস্ট পাঠানোর জন্য ব্যবহার করা হয় এবংjsonপ্যারামিটার দিয়ে রিকোয়েস্ট বডি পাঠানো হয়।assert: এটি রেসপন্সের স্ট্যাটাস কোড এবং কন্টেন্ট যাচাই করার জন্য ব্যবহৃত হয়।
টেস্ট রান করা:
pytest test_app.py
Step 4: Async Testing কনফিগার করা
FastAPI অ্যাপ্লিকেশন async ফিচার ব্যবহার করে, তাই async ফাংশনগুলির জন্য async test cases তৈরি করতে হবে। এজন্য pytest-asyncio প্লাগইন ব্যবহার করা হয়।
উদাহরণ: Async Test Setup
প্রথমে, pytest-asyncio ইনস্টল করতে হবে:
pip install pytest-asyncio
উদাহরণ: Async Test Case
import pytest
from httpx import AsyncClient
from app import app # আপনার FastAPI অ্যাপ্লিকেশনের অবজেক্ট
@pytest.mark.asyncio
async def test_create_item_async():
async with AsyncClient(app=app, base_url="http://test") as client:
response = await client.post("/items/", json={"name": "Laptop", "price": 1500.00})
assert response.status_code == 200
assert response.json() == {"name": "Laptop", "price": 1500.00}
ব্যাখ্যা:
AsyncClient: এটিhttpxথেকে আসছে এবং FastAPI অ্যাপ্লিকেশনের সাথে অ্যাসিঙ্ক্রোনাস HTTP রিকোয়েস্ট পাঠাতে ব্যবহৃত হয়।@pytest.mark.asyncio: এটি নিশ্চিত করে যে টেস্টটি async ফাংশন হিসেবে রান করবে।await: অ্যাসিঙ্ক্রোনাস রিকোয়েস্ট করার জন্যawaitব্যবহৃত হয়।
টেস্ট রান করা:
pytest test_app.py
Step 5: Test Database Integration (Optional)
Integration Testing যখন ডাটাবেসের সাথে যুক্ত হয়, তখন আপনাকে একটি test database ব্যবহার করতে হবে যাতে প্রোডাকশন ডাটাবেসে কোন পরিবর্তন না হয়। FastAPI তে ডাটাবেসের সাথে integration testing করার জন্য SQLAlchemy বা Databases লাইব্রেরি ব্যবহার করতে পারেন।
উদাহরণ: Test Database Configuration
from databases import Database
import pytest
from app import app # আপনার FastAPI অ্যাপ্লিকেশনের অবজেক্ট
from fastapi.testclient import TestClient
# ডাটাবেস URL
DATABASE_URL = "sqlite:///./test.db"
# ডাটাবেস কনফিগারেশন
database = Database(DATABASE_URL)
@app.on_event("startup")
async def startup():
await database.connect()
@app.on_event("shutdown")
async def shutdown():
await database.disconnect()
client = TestClient(app)
@pytest.fixture
def setup_database():
# এখানে আপনি টেস্ট ডাটাবেসের জন্য প্রয়োজনীয় টেবিল তৈরি করতে পারেন
pass
def test_create_item_with_db(setup_database):
response = client.post("/items/", json={"name": "Laptop", "price": 1500.00})
assert response.status_code == 200
assert response.json() == {"name": "Laptop", "price": 1500.00}
Step 6: Test Cleanup
Test Cleanup প্রক্রিয়া নিশ্চিত করে যে টেস্টের পরে ডাটাবেস বা অন্যান্য রিসোর্স ক্লিন করা হয়েছে, যাতে পরবর্তী টেস্টে সমস্যা না হয়।
উদাহরণ: Test Cleanup
import pytest
from databases import Database
# টেস্টের পরে ডাটাবেস ক্লিন করা
@pytest.fixture(scope="function", autouse=True)
async def cleanup_db():
# ডাটাবেস ক্লিনআপের কোড এখানে হবে
yield
# টেস্ট ডাটাবেস ক্লিনআপ কোড এখানে হবে
FastAPI তে Integration Testing এবং Async Testing অত্যন্ত গুরুত্বপূর্ণ টুল যা অ্যাপ্লিকেশনের কার্যকারিতা এবং নির্ভরযোগ্যতা পরীক্ষা করার জন্য ব্যবহৃত হয়। pytest এবং httpx ব্যবহার করে আপনি সহজেই async ও sync টেস্ট কেস লিখে আপনার অ্যাপ্লিকেশন পরীক্ষা করতে পারেন। টেস্টিং ব্যবস্থাপনা FastAPI অ্যাপ্লিকেশন ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ, যা কোডের গুণগত মান বজায় রাখতে সাহায্য করে।
Read more