FastAPI-তে Unit Testing তৈরি করা খুবই সহজ এবং কার্যকর। FastAPI-তে Unit Test লেখার জন্য সাধারণত pytest ব্যবহার করা হয়। TestClient ব্যবহার করে আমরা FastAPI অ্যাপ্লিকেশনের এন্ডপয়েন্টগুলোর টেস্ট করতে পারি, যা আমাদের অটোমেটিকভাবে রিকোয়েস্ট পাঠাতে এবং রেসপন্স যাচাই করতে সহায়ক।
এই গাইডে, আমরা দেখব কিভাবে FastAPI অ্যাপ্লিকেশনের জন্য Unit Test তৈরি করা যায়।
Step 1: প্রয়োজনীয় লাইব্রেরি ইনস্টল করা
Unit Testing এর জন্য আপনাকে কিছু লাইব্রেরি ইনস্টল করতে হবে:
- pytest: টেস্টিং ফ্রেমওয়ার্ক
- httpx: HTTP রিকোয়েস্ট পাঠানোর জন্য (TestClient সহ FastAPI-তে ব্যবহার করা হয়)
pip install pytest httpx
Step 2: FastAPI অ্যাপ তৈরি করা
প্রথমে একটি সহজ FastAPI অ্যাপ তৈরি করি, যাতে টেস্টিং করা যাবে।
উদাহরণ: FastAPI অ্যাপ
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
এটি একটি সাধারণ FastAPI অ্যাপ যেখানে দুটি GET এন্ডপয়েন্ট রয়েছে:
/: একটি সাধারণ রুট এন্ডপয়েন্ট যা একটি বার্তা ফেরত দেয়।/items/{item_id}: একটি ডাইনামিক রাউট যাitem_idপ্যারামিটার গ্রহণ করে।
Step 3: Unit Test তৈরি করা
এখন আমরা pytest ব্যবহার করে এই FastAPI অ্যাপের জন্য Unit Test তৈরি করব। TestClient এর সাহায্যে FastAPI অ্যাপের এন্ডপয়েন্টগুলোকে টেস্ট করা যাবে।
টেস্ট ফাইল তৈরি করা
from fastapi.testclient import TestClient
from app import app # FastAPI অ্যাপের ইনস্ট্যান্স
client = TestClient(app)
def test_read_root():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"message": "Hello, World!"}
def test_read_item():
response = client.get("/items/42")
assert response.status_code == 200
assert response.json() == {"item_id": 42}
এখানে:
test_read_root:/এন্ডপয়েন্টে একটি GET রিকোয়েস্ট পাঠানো হচ্ছে এবং রেসপন্সের স্ট্যাটাস কোড এবং কন্টেন্ট চেক করা হচ্ছে।test_read_item:/items/{item_id}এন্ডপয়েন্টে একটি GET রিকোয়েস্ট পাঠানো হচ্ছে এবংitem_idচেক করা হচ্ছে।
Step 4: টেস্ট চালানো
এখন আপনি pytest ব্যবহার করে টেস্টগুলো চালাতে পারেন। টেস্ট ফাইলটি যদি test_app.py নামে থাকে, তাহলে নিচের কমান্ডটি ব্যবহার করুন:
pytest test_app.py
টেস্টের আউটপুট:
================================ test session starts ================================
collected 2 items
test_app.py .. [100%]
================================ 2 passed in 0.12 seconds ==========================
এখানে, দুটি টেস্টই সফলভাবে পাস করেছে।
Step 5: Error Handling Test
FastAPI অ্যাপ্লিকেশনে Error Handling টেস্ট করা খুবই গুরুত্বপূর্ণ। এখানে একটি উদাহরণ দেওয়া হল যেখানে ভুল item_id পাঠানো হলে অ্যাপ একটি ত্রুটি ফিরিয়ে দেবে।
টেস্টে Error Handling
def test_read_item_not_found():
response = client.get("/items/9999") # এমন একটি ID পাঠানো হচ্ছে যা নেই
assert response.status_code == 404 # 404 Not Found হওয়া উচিত
এখানে /items/9999 পাথে একটি ID পাঠানো হচ্ছে যা বিদ্যমান নেই, তাই FastAPI 404 ত্রুটি ফেরত দেবে।
Step 6: Testing with Query Parameters
FastAPI অ্যাপ্লিকেশনে Query Parameters টেস্ট করা ও বেশ সহজ।
উদাহরণ: Query Parameter সহ রাউট
@app.get("/items/")
def read_items(q: str = None):
return {"query": q}
টেস্ট:
def test_read_items():
response = client.get("/items/?q=test_query")
assert response.status_code == 200
assert response.json() == {"query": "test_query"}
এখানে q=test_query কোয়েরি প্যারামিটার পাঠানো হয়েছে এবং রেসপন্সে সেই কোয়েরি ভ্যালু চেক করা হচ্ছে।
Step 7: Dependency Injection Testing
FastAPI তে Dependency Injection এর মাধ্যমে ফাংশন বা ক্লাসের মধ্যে নির্দিষ্ট ডিপেনডেন্সি ইনজেক্ট করা যায়। Unit Testing এ এটি পরীক্ষা করার জন্য FastAPI-তে TestClient ব্যবহার করে Dependencies ইনজেক্ট করা হয়।
উদাহরণ: Dependency Injection
from fastapi import Depends
def get_query_param(q: str = None):
return q
@app.get("/items/")
def read_item_with_dependency(query: str = Depends(get_query_param)):
return {"query": query}
টেস্ট:
def test_read_item_with_dependency():
response = client.get("/items/?q=test_query")
assert response.status_code == 200
assert response.json() == {"query": "test_query"}
এখানে, Depends ডিপেনডেন্সি ফাংশনটি get_query_param টেস্ট করা হচ্ছে।
Step 8: Async Function Testing
FastAPI অ্যাপ্লিকেশনগুলো Asynchronous কাজ করে থাকে। আপনি TestClient ব্যবহার করে async এন্ডপয়েন্টগুলোর টেস্টও করতে পারেন।
উদাহরণ: Async Function
@app.get("/async-items/")
async def async_read_item():
return {"message": "This is an async item"}
টেস্ট:
def test_async_read_item():
response = client.get("/async-items/")
assert response.status_code == 200
assert response.json() == {"message": "This is an async item"}
FastAPI-তে Unit Testing তৈরি করা সহজ এবং কার্যকর। pytest এবং TestClient ব্যবহার করে আপনি অ্যাপের বিভিন্ন এন্ডপয়েন্ট, রিকোয়েস্ট, রেসপন্স, ডিপেনডেন্সি, এবং এরর হ্যান্ডলিং চেক করতে পারেন। FastAPI স্বয়ংক্রিয়ভাবে রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়া পরিচালনা করে, যা Unit Testing কে আরও সহজ ও মডুলার করে তোলে।
Read more