FastAPI তে TestClient ব্যবহার করে সহজেই API টেস্ট করা যায়। FastAPI নিজেই TestClient ক্লাস সরবরাহ করে, যা httpx লাইব্রেরির উপর ভিত্তি করে কাজ করে। এই ক্লাসটি API এন্ডপয়েন্টগুলোকে ইন-মেমোরি রান করায় এবং অ্যাপ্লিকেশনটির সাথে HTTP রিকোয়েস্ট পাঠিয়ে টেস্ট করতে সক্ষম করে।
এখানে FastAPI অ্যাপ্লিকেশনের API টেস্ট করার জন্য TestClient কিভাবে ব্যবহার করা হয় তা ব্যাখ্যা করা হলো।
Step 1: প্রয়োজনীয় লাইব্রেরি ইনস্টল করা
FastAPI এবং httpx লাইব্রেরি ইনস্টল করতে হবে। httpx হল FastAPI-র জন্য ব্যবহৃত HTTP ক্লায়েন্ট।
pip install fastapi httpx pytest
এখানে, pytest হলো টেস্টিং ফ্রেমওয়ার্ক যা FastAPI-এর সাথে ব্যবহৃত হয়।
Step 2: FastAPI অ্যাপ তৈরি করা
প্রথমে একটি FastAPI অ্যাপ তৈরি করা যাক।
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
@app.post("/items/")
def create_item(name: str):
return {"name": name, "message": "Item created"}
এখানে:
GET /items/{item_id}: একটি ডাইনামিক পাথ প্যারামিটারitem_idনিয়ে ইনপুট গ্রহণ করবে।POST /items/: একটি স্ট্রিংnameনিয়ে ইনপুট গ্রহণ করবে এবং একটি নতুন আইটেম তৈরি করবে।
Step 3: API টেস্ট করার জন্য TestClient ব্যবহার করা
FastAPI-তে API টেস্ট করার জন্য TestClient ব্যবহার করা হয়। নিচে কিভাবে TestClient ব্যবহার করতে হয় তা দেখানো হলো।
টেস্ট ফাইল তৈরি করা
এখন একটি টেস্ট ফাইল তৈরি করি, যেমন test_main.py, যেখানে TestClient ব্যবহার করে API টেস্ট করা হবে।
from fastapi.testclient import TestClient
from main import app # এখানে main.py ফাইলের অ্যাপটি ইমপোর্ট করতে হবে
client = TestClient(app)
# GET রিকোয়েস্ট টেস্ট
def test_read_item():
response = client.get("/items/42")
assert response.status_code == 200
assert response.json() == {"item_id": 42}
# POST রিকোয়েস্ট টেস্ট
def test_create_item():
response = client.post("/items/", json={"name": "Laptop"})
assert response.status_code == 200
assert response.json() == {"name": "Laptop", "message": "Item created"}
ব্যাখ্যা:
TestClient: FastAPI অ্যাপ্লিকেশনের HTTP রিকোয়েস্ট পাঠাতে ব্যবহৃত হয়। এটি স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশনকে ইন-মেমোরি চালায়, যাতে টেস্টিং করা সহজ হয়।client.get(): একটি GET রিকোয়েস্ট পাঠানোর জন্য ব্যবহার করা হয়। এতে পাথ প্যারামিটারitem_id=42প্রেরণ করা হয়েছে।client.post(): একটি POST রিকোয়েস্ট পাঠানোর জন্য ব্যবহার করা হয়। এটি একটি JSON ডাটা পাঠায়, যেমন{ "name": "Laptop" }।
রেসপন্স যাচাই:
assert response.status_code == 200: রেসপন্স কোডের মান সঠিক কিনা যাচাই করা।assert response.json() == ...: রেসপন্স JSON ডাটা সঠিক কিনা যাচাই করা।
Step 4: টেস্ট চালানো
আপনি pytest ব্যবহার করে টেস্টগুলো চালাতে পারেন। টেস্ট চালানোর জন্য নিচের কমান্ডটি ব্যবহার করুন:
pytest test_main.py
এটি আপনার টেস্ট ফাইলটি চালাবে এবং প্রতিটি ফাংশনের জন্য ফলাফল দেখাবে।
Step 5: টেস্টের আউটপুট
pytest টেস্ট চালানোর পর আউটপুট কিছুটা এইরকম হতে পারে:
$ pytest test_main.py
============================= test session starts ==============================
collected 2 items
test_main.py .. [100%]
============================== 2 passed in 0.03 seconds ==============================
এখানে দুটি টেস্টই সফলভাবে পাস করেছে।
Step 6: অন্যান্য টেস্ট কেস
১. Bad Request Error Handling:
এখন, যদি আমরা POST /items/ এ ভুল ইনপুট পাঠাই, তাহলে 400 Bad Request রেসপন্স আসবে।
def test_create_item_invalid_data():
response = client.post("/items/", json={"wrong_field": "Laptop"})
assert response.status_code == 422 # 422 Unprocessable Entity
এখানে, ইনপুট ফিল্ডের নাম সঠিক না হওয়ায় 422 Unprocessable Entity ত্রুটি আসবে।
২. Testing Query Parameters:
যদি আপনি Query Parameters ব্যবহার করেন, তাহলে তাদেরও টেস্ট করা যায়।
@app.get("/search/")
def search_items(query: str):
return {"query": query}
def test_search_items():
response = client.get("/search/?query=fastapi")
assert response.status_code == 200
assert response.json() == {"query": "fastapi"}
এখানে GET /search/ এ query প্যারামিটার ব্যবহার করে টেস্ট করা হয়েছে।
FastAPI তে TestClient ব্যবহার করে API টেস্টিং খুবই সহজ এবং কার্যকর। TestClient ইন-মেমোরি অ্যাপ্লিকেশন রান করে এবং HTTP রিকোয়েস্ট পাঠানোর মাধ্যমে API ফাংশনালিটি টেস্ট করতে দেয়। pytest-এর মাধ্যমে আপনি সহজেই একাধিক টেস্ট কেস চালাতে পারেন এবং অ্যাপ্লিকেশনের বিভিন্ন এন্ডপয়েন্টের সঠিকতা যাচাই করতে পারেন। এটি ডেভেলপারদের জন্য একটি অত্যন্ত কার্যকর টুল, যা API ডেভেলপমেন্ট এবং মেইনটেন্যান্সকে আরও সহজ করে তোলে।
Read more