Pytest ব্যবহার করে FastAPI এর টেস্টিং

Web Development - ফাস্টএপিআই (FastAPI) - FastAPI এর Testing Framework
219

FastAPI এর টেস্টিং খুবই সহজ এবং কার্যকর। Pytest হল Python-এর একটি জনপ্রিয় টেস্টিং লাইব্রেরি যা FastAPI-র সাথে ইন্টিগ্রেট করা যায়। FastAPI নিজে TestClient সরবরাহ করে, যা দিয়ে আমরা API রিকোয়েস্ট করতে পারি এবং টেস্ট করতে পারি। Pytest ব্যবহার করে আমরা FastAPI অ্যাপের জন্য স্বয়ংক্রিয় টেস্ট তৈরি করতে পারি।

এখানে আমরা দেখব FastAPI অ্যাপের জন্য কীভাবে Pytest ব্যবহার করে টেস্ট করা যায়।


Step 1: প্যাকেজ ইনস্টল করা

প্রথমে pytest এবং httpx ইনস্টল করতে হবে, যা FastAPI এর সাথে টেস্ট করার জন্য ব্যবহৃত হয়।

pip install pytest httpx

এছাড়া, আপনি FastAPI এবং Uvicorn (FastAPI অ্যাপ চালানোর জন্য) ইনস্টল করে রাখবেন।

pip install fastapi uvicorn

Step 2: FastAPI অ্যাপ তৈরি করা

আমরা একটি সাধারণ FastAPI অ্যাপ তৈরি করব এবং তার পর Pytest ব্যবহার করে এর টেস্ট তৈরি করব।

উদাহরণ: FastAPI অ্যাপ

# main.py

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: str | None = None
    price: float

@app.post("/items/")
def create_item(item: Item):
    return {"item_name": item.name, "item_price": item.price}

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}

এখানে, আমরা দুটি রাউট তৈরি করেছি:

  1. POST /items/ - একটি আইটেম তৈরি করা এবং তার নাম ও দাম ফেরত দেওয়া।
  2. GET /items/{item_id} - একটি আইটেমের item_id ফেরত দেওয়া।

Step 3: Pytest টেস্ট তৈরি করা

এখন Pytest ব্যবহার করে এই রাউটগুলোর জন্য টেস্ট তৈরি করা হবে। আমরা TestClient ব্যবহার করে অ্যাপের HTTP রিকোয়েস্ট পরীক্ষা করব।

উদাহরণ: Pytest টেস্ট ফাইল

# test_main.py

from fastapi.testclient import TestClient
from main import app

client = TestClient(app)

def test_create_item():
    response = client.post("/items/", json={"name": "Laptop", "price": 1000.0})
    assert response.status_code == 200
    assert response.json() == {"item_name": "Laptop", "item_price": 1000.0}

def test_read_item():
    response = client.get("/items/123")
    assert response.status_code == 200
    assert response.json() == {"item_id": 123}

এখানে দুটি টেস্ট ফাংশন তৈরি করা হয়েছে:

  1. test_create_item: এটি POST রিকোয়েস্টের মাধ্যমে একটি নতুন আইটেম তৈরি করে এবং সঠিক রেসপন্স যাচাই করে।
  2. test_read_item: এটি GET রিকোয়েস্টের মাধ্যমে একটি নির্দিষ্ট আইটেম পড়ে এবং সঠিক রেসপন্স যাচাই করে।

Step 4: টেস্ট রান করা

এখন আমরা Pytest ব্যবহার করে টেস্ট রান করব।

pytest test_main.py

এটি test_main.py ফাইলের সব টেস্ট ফাংশন চালাবে এবং রেজাল্ট দেখাবে।

টেস্ট আউটপুট (সফল টেস্ট):

================================= test session starts ================================
collected 2 items

test_main.py ..                                                            [100%]

================================== 2 passed in 0.12 seconds ================================

এখানে, দুটি টেস্টই সফলভাবে সম্পন্ন হয়েছে।


Step 5: টেস্টে Additiional Fixtures ব্যবহার করা

Fixtures ব্যবহার করে আপনি ডাটাবেস সংযোগ বা অন্যান্য রিসোর্স প্রস্তুতি নিতে পারেন, যা টেস্টের জন্য প্রয়োজন হতে পারে। FastAPI এর সাথে Pytest-এ Fixtures ব্যবহারের একটি উদাহরণ:

উদাহরণ: Fixture তৈরি

# test_main.py

import pytest
from fastapi.testclient import TestClient
from main import app

@pytest.fixture(scope="module")
def client():
    with TestClient(app) as c:
        yield c

def test_create_item(client):
    response = client.post("/items/", json={"name": "Laptop", "price": 1000.0})
    assert response.status_code == 200
    assert response.json() == {"item_name": "Laptop", "item_price": 1000.0}

def test_read_item(client):
    response = client.get("/items/123")
    assert response.status_code == 200
    assert response.json() == {"item_id": 123}

এখানে, client নামের একটি Fixture তৈরি করা হয়েছে, যা টেস্ট চলাকালীন FastAPI অ্যাপ্লিকেশনের জন্য TestClient প্রদান করবে। scope="module" এর মাধ্যমে এই Fixture শুধুমাত্র একবার পুরো টেস্ট মডিউলে ব্যবহার হবে।


Step 6: Error Handling টেস্ট করা

আপনি FastAPI তে Error Handling পরীক্ষা করেও নিশ্চিত করতে পারেন যে, অ্যাপ্লিকেশন সঠিকভাবে ত্রুটি দেখাচ্ছে।

উদাহরণ: Error Handling টেস্ট

# test_main.py

def test_create_item_invalid_data(client):
    response = client.post("/items/", json={"name": "Laptop"})
    assert response.status_code == 422  # 422 Unprocessable Entity
    assert response.json()["detail"][0]["msg"] == "field required"

এখানে, আমরা একটি POST রিকোয়েস্ট পাঠাচ্ছি যা price প্যারামিটারটি অনুপস্থিত, এবং টেস্ট নিশ্চিত করে যে 422 Unprocessable Entity ত্রুটি কোড এবং সঠিক ত্রুটি বার্তা ফেরত আসছে।


FastAPI এবং Pytest ব্যবহারের মাধ্যমে আপনি আপনার API-এর জন্য খুব সহজে এবং কার্যকরভাবে টেস্ট তৈরি করতে পারেন। FastAPI এর TestClient এর সাহায্যে HTTP রিকোয়েস্ট পাঠানো এবং রেসপন্স যাচাই করা সম্ভব, এবং Pytest এর মাধ্যমে স্বয়ংক্রিয় টেস্ট তৈরি করা যেতে পারে যা কোডের কার্যক্ষমতা নিশ্চিত করে। Pytest-এ Fixtures ব্যবহার করে আপনি ডাটাবেস সংযোগ বা অন্যান্য নির্ভরশীলতা ইনজেক্ট করতে পারেন এবং টেস্টের দক্ষতা বাড়াতে পারেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...