FastAPI એપ્લિકેશન્સને TestClient વડે અસરકારક રીતે ટેસ્ટ કરવાનું શીખો. મજબૂત અને વિશ્વસનીય API માટે શ્રેષ્ઠ પદ્ધતિઓ, અદ્યતન તકનીકો અને વાસ્તવિક ઉદાહરણો મેળવો.
FastAPI ટેસ્ટિંગમાં નિપુણતા મેળવવી: TestClient માટે એક વ્યાપક માર્ગદર્શિકા
પાયથોન સાથે ઉચ્ચ-પ્રદર્શનવાળી API બનાવવા માટે FastAPI એક અગ્રણી ફ્રેમવર્ક તરીકે ઉભરી આવ્યું છે. તેની ઝડપ, ઉપયોગમાં સરળતા અને સ્વચાલિત ડેટા માન્યતા તેને વિશ્વભરના વિકાસકર્તાઓમાં પ્રિય બનાવે છે. જોકે, એક સારી રીતે બનેલી API તેના પરીક્ષણો જેટલી જ સારી હોય છે. સંપૂર્ણ પરીક્ષણ સુનિશ્ચિત કરે છે કે તમારી API અપેક્ષા મુજબ કાર્ય કરે છે, દબાણ હેઠળ સ્થિર રહે છે, અને તેને વિશ્વાસપૂર્વક ઉત્પાદનમાં જમાવી શકાય છે. આ વ્યાપક માર્ગદર્શિકા તમારી API એન્ડપોઇન્ટ્સનું અસરકારક રીતે પરીક્ષણ કરવા માટે FastAPI ના TestClient નો ઉપયોગ કરવા પર ધ્યાન કેન્દ્રિત કરે છે.
FastAPI એપ્લિકેશન્સ માટે પરીક્ષણ શા માટે મહત્વનું છે?
પરીક્ષણ એ સોફ્ટવેર ડેવલપમેન્ટ લાઇફસાઇકલમાં એક મહત્વપૂર્ણ પગલું છે. તે તમને મદદ કરે છે:
- બગ્સ વહેલા ઓળખો: ભૂલો ઉત્પાદન સુધી પહોંચે તે પહેલાં પકડો, સમય અને સંસાધનો બચાવો.
- કોડની ગુણવત્તા સુનિશ્ચિત કરો: સુવ્યવસ્થિત અને જાળવી શકાય તેવા કોડને પ્રોત્સાહન આપો.
- રીગ્રેશન્સ અટકાવો: ખાતરી કરો કે નવા ફેરફારો હાલની કાર્યક્ષમતાને તોડતા નથી.
- API વિશ્વસનીયતા સુધારો: API ની સ્થિરતા અને પ્રદર્શનમાં વિશ્વાસ બનાવો.
- સહયોગને સુવિધા આપો: અન્ય વિકાસકર્તાઓ માટે અપેક્ષિત વર્તનની સ્પષ્ટ દસ્તાવેજીકરણ પ્રદાન કરો.
FastAPI ના TestClient નો પરિચય
FastAPI એક બિલ્ટ-ઇન TestClient પ્રદાન કરે છે જે તમારા API એન્ડપોઇન્ટ્સના પરીક્ષણની પ્રક્રિયાને સરળ બનાવે છે. TestClient એક લાઇટવેઇટ ક્લાયન્ટ તરીકે કાર્ય કરે છે જે સંપૂર્ણ સર્વર શરૂ કર્યા વિના તમારી API પર વિનંતીઓ મોકલી શકે છે. આ પરીક્ષણને નોંધપાત્ર રીતે ઝડપી અને વધુ અનુકૂળ બનાવે છે.
TestClient ની મુખ્ય સુવિધાઓ:
- HTTP વિનંતીઓનું અનુકરણ કરે છે: તમને તમારી API પર GET, POST, PUT, DELETE અને અન્ય HTTP વિનંતીઓ મોકલવાની મંજૂરી આપે છે.
- ડેટા સિરિયલાઇઝેશનનું સંચાલન કરે છે: વિનંતી ડેટા (દા.ત., JSON પેલોડ્સ) ને આપમેળે સિરિયલાઇઝ કરે છે અને પ્રતિસાદ ડેટાને ડિસિરિયલાઇઝ કરે છે.
- એસેર્શન પદ્ધતિઓ પ્રદાન કરે છે: પ્રતિસાદોના સ્ટેટસ કોડ, હેડર અને સામગ્રીને ચકાસવા માટે અનુકૂળ પદ્ધતિઓ પ્રદાન કરે છે.
- અસિંક્રોનસ પરીક્ષણને સપોર્ટ કરે છે: FastAPI ના અસિંક્રોનસ સ્વભાવ સાથે એકીકૃત રીતે કાર્ય કરે છે.
- પરીક્ષણ ફ્રેમવર્ક સાથે એકીકૃત થાય છે: pytest અને unittest જેવા લોકપ્રિય પાયથોન પરીક્ષણ ફ્રેમવર્ક સાથે સરળતાથી એકીકૃત થાય છે.
તમારા પરીક્ષણ પર્યાવરણને સેટ કરવું
પરીક્ષણ શરૂ કરતા પહેલા, તમારે તમારા પરીક્ષણ પર્યાવરણને સેટ કરવાની જરૂર છે. આમાં સામાન્ય રીતે જરૂરી ડિપેન્ડન્સીઝ ઇન્સ્ટોલ કરવી અને તમારા પરીક્ષણ ફ્રેમવર્કને ગોઠવવું શામેલ છે.
ઇન્સ્ટોલેશન
પ્રથમ, ખાતરી કરો કે તમારી પાસે FastAPI અને pytest ઇન્સ્ટોલ કરેલા છે. તમે તેમને pip નો ઉપયોગ કરીને ઇન્સ્ટોલ કરી શકો છો:
pip install fastapi pytest httpx
httpx એ એક HTTP ક્લાયન્ટ છે જેનો ઉપયોગ FastAPI અંદરથી કરે છે. જોકે TestClient FastAPI નો ભાગ છે, તેમ છતાં httpx પણ ઇન્સ્ટોલ કરેલું હોવાથી સુચારુ પરીક્ષણ સુનિશ્ચિત થાય છે. કેટલાક ટ્યુટોરિયલ્સ requests નો પણ ઉલ્લેખ કરે છે, જોકે, httpx FastAPI ના અસિંક્રોનસ સ્વભાવ સાથે વધુ સુસંગત છે.
ઉદાહરણ FastAPI એપ્લિકેશન
ચાલો એક સરળ FastAPI એપ્લિકેશન બનાવીએ જેનો ઉપયોગ આપણે પરીક્ષણ માટે કરી શકીએ:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
@app.get("/")
async def read_root():
return {"message": "Hello World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
@app.post("/items/")
async def create_item(item: Item):
return item
આ કોડને main.py તરીકે સાચવો. આ એપ્લિકેશન ત્રણ એન્ડપોઇન્ટ્સ વ્યાખ્યાયિત કરે છે:
/: એક સરળ GET એન્ડપોઇન્ટ જે "Hello World" સંદેશ પરત કરે છે./items/{item_id}: એક GET એન્ડપોઇન્ટ જે તેની ID ના આધારે આઇટમ પરત કરે છે./items/: એક POST એન્ડપોઇન્ટ જે નવી આઇટમ બનાવે છે.
તમારું પ્રથમ પરીક્ષણ લખવું
હવે તમારી પાસે FastAPI એપ્લિકેશન છે, તમે TestClient નો ઉપયોગ કરીને પરીક્ષણો લખવાનું શરૂ કરી શકો છો. main.py જેવી જ ડિરેક્ટરીમાં test_main.py નામની નવી ફાઇલ બનાવો.
from fastapi.testclient import TestClient
from .main import app
client = TestClient(app)
def test_read_root():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"message": "Hello World"}
આ પરીક્ષણમાં:
- અમે
TestClientઅને FastAPIappઇન્સ્ટન્સને ઇમ્પોર્ટ કરીએ છીએ. - અમે
appને પસાર કરીનેTestClientનું એક ઇન્સ્ટન્સ બનાવીએ છીએ. - અમે
test_read_rootનામનું એક પરીક્ષણ ફંક્શન વ્યાખ્યાયિત કરીએ છીએ. - પરીક્ષણ ફંક્શનની અંદર, અમે રૂટ એન્ડપોઇન્ટ પર GET વિનંતી મોકલવા માટે
client.get("/")નો ઉપયોગ કરીએ છીએ. - અમે પુષ્ટિ કરીએ છીએ કે પ્રતિસાદ સ્ટેટસ કોડ 200 (OK) છે.
- અમે પુષ્ટિ કરીએ છીએ કે પ્રતિસાદ JSON
{"message": "Hello World"}બરાબર છે.
pytest સાથે તમારા પરીક્ષણો ચલાવવા
તમારા પરીક્ષણો ચલાવવા માટે, ફક્ત તમારી test_main.py ફાઇલ ધરાવતી ડિરેક્ટરીમાં એક ટર્મિનલ ખોલો અને નીચેનો આદેશ ચલાવો:
pytest
pytest તમારા પ્રોજેક્ટના તમામ પરીક્ષણોને આપમેળે શોધી કાઢશે અને ચલાવશે. તમારે આના જેવું આઉટપુટ જોવું જોઈએ:
============================= test session starts ==============================
platform darwin -- Python 3.9.6, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: /path/to/your/project
collected 1 item
test_main.py .
============================== 1 passed in 0.01s ===============================
વિવિધ HTTP પદ્ધતિઓનું પરીક્ષણ કરવું
TestClient GET, POST, PUT, DELETE અને PATCH સહિતની તમામ પ્રમાણભૂત HTTP પદ્ધતિઓને સપોર્ટ કરે છે. ચાલો જોઈએ કે આ દરેક પદ્ધતિઓનું પરીક્ષણ કેવી રીતે કરવું.
GET વિનંતીઓનું પરીક્ષણ કરવું
અમે પાછલા વિભાગમાં GET વિનંતીના પરીક્ષણનું ઉદાહરણ જોયું. અહીં બીજું ઉદાહરણ છે, જે /items/{item_id} એન્ડપોઇન્ટનું પરીક્ષણ કરે છે:
def test_read_item():
response = client.get("/items/1?q=test")
assert response.status_code == 200
assert response.json() == {"item_id": 1, "q": "test"}
આ પરીક્ષણ ક્વેરી પેરામીટર q=test સાથે /items/1 પર GET વિનંતી મોકલે છે. તે પછી તે પુષ્ટિ કરે છે કે પ્રતિસાદ સ્ટેટસ કોડ 200 છે અને પ્રતિસાદ JSON માં અપેક્ષિત ડેટા શામેલ છે.
POST વિનંતીઓનું પરીક્ષણ કરવું
POST વિનંતીનું પરીક્ષણ કરવા માટે, તમારે વિનંતી બોડીમાં ડેટા મોકલવાની જરૂર છે. TestClient આપમેળે ડેટાને JSON માં સિરિયલાઇઝ કરે છે.
def test_create_item():
item_data = {"name": "Example Item", "description": "A test item", "price": 9.99, "tax": 1.00}
response = client.post("/items/", json=item_data)
assert response.status_code == 200
assert response.json() == item_data
આ પરીક્ષણમાં:
- અમે નવી આઇટમ માટે ડેટા ધરાવતી ડિક્શનરી
item_dataબનાવીએ છીએ. - અમે
/items/એન્ડપોઇન્ટ પર POST વિનંતી મોકલવા માટેclient.post("/items/", json=item_data)નો ઉપયોગ કરીએ છીએ,item_dataને JSON પેલોડ તરીકે પસાર કરીએ છીએ. - અમે પુષ્ટિ કરીએ છીએ કે પ્રતિસાદ સ્ટેટસ કોડ 200 છે અને પ્રતિસાદ JSON
item_dataસાથે મેળ ખાય છે.
PUT, DELETE અને PATCH વિનંતીઓનું પરીક્ષણ કરવું
PUT, DELETE અને PATCH વિનંતીઓનું પરીક્ષણ કરવું એ POST વિનંતીઓના પરીક્ષણ જેવું જ છે. તમે ફક્ત TestClient પર અનુરૂપ પદ્ધતિઓનો ઉપયોગ કરો છો:
def test_update_item():
item_data = {"name": "Updated Item", "description": "An updated test item", "price": 19.99, "tax": 2.00}
response = client.put("/items/1", json=item_data)
assert response.status_code == 200
# Add assertions for the expected response
def test_delete_item():
response = client.delete("/items/1")
assert response.status_code == 200
# Add assertions for the expected response
def test_patch_item():
item_data = {"price": 29.99}
response = client.patch("/items/1", json=item_data)
assert response.status_code == 200
# Add assertions for the expected response
પ્રતિસાદો અપેક્ષા મુજબ છે તેની ચકાસણી કરવા માટે એસેર્શન્સ ઉમેરવાનું યાદ રાખો.
અદ્યતન પરીક્ષણ તકનીકો
TestClient ઘણી અદ્યતન સુવિધાઓ પ્રદાન કરે છે જે તમને વધુ વ્યાપક અને અસરકારક પરીક્ષણો લખવામાં મદદ કરી શકે છે.
ડિપેન્ડન્સીઝ સાથે પરીક્ષણ કરવું
FastAPI ની ડિપેન્ડન્સી ઇન્જેક્શન સિસ્ટમ તમને તમારી API એન્ડપોઇન્ટ્સમાં ડિપેન્ડન્સીઝ સરળતાથી ઇન્જેક્ટ કરવાની મંજૂરી આપે છે. પરીક્ષણ કરતી વખતે, તમે મોક અથવા પરીક્ષણ-વિશિષ્ટ અમલીકરણ પ્રદાન કરવા માટે આ ડિપેન્ડન્સીઝને ઓવરરાઇડ કરવા માંગી શકો છો.
ઉદાહરણ તરીકે, ધારો કે તમારી એપ્લિકેશન ડેટાબેઝ કનેક્શન પર આધાર રાખે છે. તમે તમારા પરીક્ષણોમાં ડેટાબેઝ ડિપેન્ડન્સીને ઓવરરાઇડ કરી શકો છો જેથી ઇન-મેમરી ડેટાબેઝનો ઉપયોગ કરી શકાય:
from typing import Annotated
from fastapi import Depends, FastAPI, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker, declarative_base, Session
# Database Configuration
DATABASE_URL = "sqlite:///./test.db" # In-memory database for testing
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
# Define User Model
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String, unique=True, index=True)
password = Column(String)
Base.metadata.create_all(bind=engine)
# FastAPI App
app = FastAPI()
# Dependency to get the database session
def get_db():
db = TestingSessionLocal()
try:
yield db
finally:
db.close()
# Endpoint to create a user
@app.post("/users/")
async def create_user(username: str, password: str, db: Session = Depends(get_db)):
db_user = User(username=username, password=password)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
from fastapi.testclient import TestClient
from .main import app, get_db, Base, engine, TestingSessionLocal
client = TestClient(app)
# Override the database dependency for testing
def override_get_db():
try:
db = TestingSessionLocal()
yield db
finally:
db.close()
app.dependency_overrides[get_db] = override_get_db
def test_create_user():
# First, ensure the tables are created, which may not happen by default
Base.metadata.create_all(bind=engine) # important: create the tables in the test db
response = client.post("/users/", params={"username": "testuser", "password": "password123"})
assert response.status_code == 200
assert response.json()["username"] == "testuser"
# Clean up the override after the test if needed
app.dependency_overrides = {}
આ ઉદાહરણ get_db ડિપેન્ડન્સીને એક પરીક્ષણ-વિશિષ્ટ ફંક્શન સાથે ઓવરરાઇડ કરે છે જે ઇન-મેમરી SQLite ડેટાબેઝમાં સત્ર પરત કરે છે. મહત્વપૂર્ણ: ટેસ્ટ db ને યોગ્ય રીતે કાર્ય કરવા માટે મેટાડેટા બનાવટને સ્પષ્ટપણે આહ્વાન કરવું આવશ્યક છે. ટેબલ બનાવવામાં નિષ્ફળતા ગુમ થયેલા ટેબલ સંબંધિત ભૂલો તરફ દોરી જશે.
અસિંક્રોનસ કોડનું પરીક્ષણ કરવું
FastAPI અસિંક્રોનસ બનવા માટે બનાવવામાં આવ્યું છે, તેથી તમારે ઘણીવાર અસિંક્રોનસ કોડનું પરીક્ષણ કરવાની જરૂર પડશે. TestClient અસિંક્રોનસ પરીક્ષણને એકીકૃત રીતે સપોર્ટ કરે છે.
અસિંક્રોનસ એન્ડપોઇન્ટનું પરીક્ષણ કરવા માટે, ફક્ત તમારા પરીક્ષણ ફંક્શનને async તરીકે વ્યાખ્યાયિત કરો:
import asyncio
from fastapi import FastAPI
app = FastAPI()
@app.get("/async")
async def async_endpoint():
await asyncio.sleep(0.1) # Simulate some async operation
return {"message": "Async Hello"}
import pytest
from fastapi.testclient import TestClient
from .main import app
client = TestClient(app)
@pytest.mark.asyncio # Needed to be compatible with pytest-asyncio
async def test_async_endpoint():
response = client.get("/async")
assert response.status_code == 200
assert response.json() == {"message": "Async Hello"}
નોંધ: @pytest.mark.asyncio નો ઉપયોગ કરવા માટે તમારે pytest-asyncio ઇન્સ્ટોલ કરવાની જરૂર છે: pip install pytest-asyncio. જો તમે જૂના pytest વર્ઝનનો ઉપયોગ કરી રહ્યા હોવ તો તમારે asyncio.get_event_loop() ગોઠવેલું છે તેની પણ ખાતરી કરવી પડશે. જો pytest વર્ઝન 8 કે તેનાથી નવું હોય, તો આની જરૂર ન પણ પડે.
ફાઇલ અપલોડ્સનું પરીક્ષણ કરવું
FastAPI ફાઇલ અપલોડ્સને હેન્ડલ કરવાનું સરળ બનાવે છે. ફાઇલ અપલોડ્સનું પરીક્ષણ કરવા માટે, તમે TestClient ની વિનંતી પદ્ધતિઓના files પેરામીટરનો ઉપયોગ કરી શકો છો.
from fastapi import FastAPI, File, UploadFile
from typing import List
app = FastAPI()
@app.post("/files/")
async def create_files(files: List[bytes] = File()):
return {"file_sizes": [len(file) for file in files]}
@app.post("/uploadfiles/")
async def create_upload_files(files: List[UploadFile]):
return {"filenames": [file.filename for file in files]}
from fastapi.testclient import TestClient
from .main import app
import io
client = TestClient(app)
def test_create_files():
file_content = b"Test file content"
files = [('files', ('test.txt', io.BytesIO(file_content), 'text/plain'))]
response = client.post("/files/", files=files)
assert response.status_code == 200
assert response.json() == {"file_sizes": [len(file_content)]}
def test_create_upload_files():
file_content = b"Test upload file content"
files = [('files', ('test_upload.txt', io.BytesIO(file_content), 'text/plain'))]
response = client.post("/uploadfiles/", files=files)
assert response.status_code == 200
assert response.json() == {"filenames": ["test_upload.txt"]}
આ પરીક્ષણમાં, અમે io.BytesIO નો ઉપયોગ કરીને એક ડમી ફાઇલ બનાવીએ છીએ અને તેને files પેરામીટરમાં પસાર કરીએ છીએ. files પેરામીટર ટુપલ્સની સૂચિ સ્વીકારે છે, જ્યાં દરેક ટુપલમાં ફિલ્ડ નામ, ફાઇલનામ અને ફાઇલ સામગ્રી શામેલ હોય છે. સર્વર દ્વારા ચોક્કસ હેન્ડલિંગ માટે કન્ટેન્ટ ટાઈપ મહત્વપૂર્ણ છે.
ભૂલ હેન્ડલિંગનું પરીક્ષણ કરવું
તમારી API ભૂલોને કેવી રીતે હેન્ડલ કરે છે તેનું પરીક્ષણ કરવું મહત્વપૂર્ણ છે. તમે અમાન્ય વિનંતીઓ મોકલવા અને API યોગ્ય ભૂલ પ્રતિસાદો પરત કરે છે તેની ચકાસણી કરવા માટે TestClient નો ઉપયોગ કરી શકો છો.
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
if item_id > 100:
raise HTTPException(status_code=400, detail="Item ID too large")
return {"item_id": item_id}
from fastapi.testclient import TestClient
from .main import app
client = TestClient(app)
def test_read_item_error():
response = client.get("/items/101")
assert response.status_code == 400
assert response.json() == {"detail": "Item ID too large"}
આ પરીક્ષણ /items/101 પર GET વિનંતી મોકલે છે, જે 400 ના સ્ટેટસ કોડ સાથે HTTPException ઉભો કરે છે. પરીક્ષણ પુષ્ટિ કરે છે કે પ્રતિસાદ સ્ટેટસ કોડ 400 છે અને પ્રતિસાદ JSON માં અપેક્ષિત ભૂલ સંદેશ શામેલ છે.
સુરક્ષા સુવિધાઓનું પરીક્ષણ કરવું
જો તમારી API પ્રમાણીકરણ અથવા અધિકૃતતાનો ઉપયોગ કરે છે, તો તમારે આ સુરક્ષા સુવિધાઓનું પણ પરીક્ષણ કરવાની જરૂર પડશે. TestClient તમને પ્રમાણિત વિનંતીઓનું અનુકરણ કરવા માટે હેડર અને કૂકીઝ સેટ કરવાની મંજૂરી આપે છે.
from fastapi import FastAPI, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
app = FastAPI()
# Security
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.post("/token")
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
# Simulate authentication
if form_data.username != "testuser" or form_data.password != "password123":
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect username or password")
return {"access_token": "fake_token", "token_type": "bearer"}
@app.get("/protected")
async def protected_route(token: str = Depends(oauth2_scheme)):
return {"message": "Protected data"}
from fastapi.testclient import TestClient
from .main import app
client = TestClient(app)
def test_login():
response = client.post("/token", data={"username": "testuser", "password": "password123"})
assert response.status_code == 200
assert "access_token" in response.json()
def test_protected_route():
# First, get a token
token_response = client.post("/token", data={"username": "testuser", "password": "password123"})
token = token_response.json()["access_token"]
# Then, use the token to access the protected route
response = client.get("/protected", headers={"Authorization": f"Bearer {token}"})
assert response.status_code == 200
assert response.json() == {"message": "Protected data"}
આ ઉદાહરણમાં, અમે લોગિન એન્ડપોઇન્ટનું પરીક્ષણ કરીએ છીએ અને પછી સુરક્ષિત રૂટને ઍક્સેસ કરવા માટે પ્રાપ્ત થયેલ ટોકનનો ઉપયોગ કરીએ છીએ. TestClient ની વિનંતી પદ્ધતિઓનું headers પેરામીટર તમને કસ્ટમ હેડર સેટ કરવાની મંજૂરી આપે છે, જેમાં બેરર ટોકન્સ માટે Authorization હેડર શામેલ છે.
FastAPI પરીક્ષણ માટે શ્રેષ્ઠ પદ્ધતિઓ
તમારી FastAPI એપ્લિકેશન્સનું પરીક્ષણ કરતી વખતે અહીં કેટલીક શ્રેષ્ઠ પદ્ધતિઓ છે જેનું પાલન કરવું:
- વ્યાપક પરીક્ષણો લખો: તમારી API ના તમામ ભાગોનું સંપૂર્ણ પરીક્ષણ થાય તે સુનિશ્ચિત કરવા માટે ઉચ્ચ પરીક્ષણ કવરેજનું લક્ષ્ય રાખો.
- વર્ણનાત્મક પરીક્ષણ નામોનો ઉપયોગ કરો: ખાતરી કરો કે તમારા પરીક્ષણ નામો સ્પષ્ટપણે દર્શાવે છે કે પરીક્ષણ શું ચકાસી રહ્યું છે.
- એરેન્જ-એક્ટ-એસેર્ટ પેટર્નનું પાલન કરો: તમારા પરીક્ષણોને ત્રણ અલગ-અલગ તબક્કામાં ગોઠવો: એરેન્જ (પરીક્ષણ ડેટા સેટ કરો), એક્ટ (પરીક્ષણ કરવામાં આવી રહી છે તે ક્રિયા કરો), અને એસેર્ટ (પરિણામો ચકાસો).
- મોક ઑબ્જેક્ટ્સનો ઉપયોગ કરો: તમારા પરીક્ષણોને અલગ કરવા અને બાહ્ય સિસ્ટમો પર નિર્ભરતા ટાળવા માટે બાહ્ય ડિપેન્ડન્સીઝને મોક કરો.
- એજ કેસોનું પરીક્ષણ કરો: અમાન્ય અથવા અનપેક્ષિત ઇનપુટ સાથે તમારી API નું પરીક્ષણ કરો જેથી તે ભૂલોને સહેલાઇથી હેન્ડલ કરે તેની ખાતરી થાય.
- વારંવાર પરીક્ષણો ચલાવો: વિકાસ કાર્યપ્રવાહમાં પરીક્ષણને એકીકૃત કરો જેથી ભૂલો વહેલી અને વારંવાર પકડી શકાય.
- CI/CD સાથે એકીકૃત કરો: તમારી CI/CD પાઇપલાઇનમાં તમારા પરીક્ષણોને સ્વચાલિત કરો જેથી ખાતરી થાય કે તમામ કોડ ફેરફારોને ઉત્પાદનમાં જમાવતા પહેલા સંપૂર્ણ રીતે પરીક્ષણ કરવામાં આવે છે. આ પ્રાપ્ત કરવા માટે Jenkins, GitLab CI, GitHub Actions અથવા CircleCI જેવા સાધનોનો ઉપયોગ કરી શકાય છે.
ઉદાહરણ: આંતરરાષ્ટ્રીયકરણ (i18n) પરીક્ષણ
વૈશ્વિક પ્રેક્ષકો માટે API વિકસાવતી વખતે, આંતરરાષ્ટ્રીયકરણ (i18n) આવશ્યક છે. i18n ના પરીક્ષણમાં તમારી API બહુવિધ ભાષાઓ અને પ્રદેશોને યોગ્ય રીતે સપોર્ટ કરે છે તેની ચકાસણી શામેલ છે. FastAPI એપ્લિકેશનમાં i18n નું પરીક્ષણ કેવી રીતે કરવું તેનું ઉદાહરણ અહીં આપેલું છે:
from fastapi import FastAPI, Header
from typing import Optional
app = FastAPI()
messages = {
"en": {"greeting": "Hello, world!"},
"fr": {"greeting": "Bonjour le monde !"},
"es": {"greeting": "¡Hola Mundo!"},
}
@app.get("/")
async def read_root(accept_language: Optional[str] = Header(None)):
lang = accept_language[:2] if accept_language else "en"
if lang not in messages:
lang = "en"
return {"message": messages[lang]["greeting"]}
from fastapi.testclient import TestClient
from .main import app
client = TestClient(app)
def test_read_root_en():
response = client.get("/", headers={"Accept-Language": "en-US"})
assert response.status_code == 200
assert response.json() == {"message": "Hello, world!"}
def test_read_root_fr():
response = client.get("/", headers={"Accept-Language": "fr-FR"})
assert response.status_code == 200
assert response.json() == {"message": "Bonjour le monde !"}
def test_read_root_es():
response = client.get("/", headers={"Accept-Language": "es-ES"})
assert response.status_code == 200
assert response.json() == {"message": "¡Hola Mundo!"}
def test_read_root_default():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"message": "Hello, world!"}
આ ઉદાહરણ ઇચ્છિત ભાષાનો ઉલ્લેખ કરવા માટે Accept-Language હેડર સેટ કરે છે. API ઉલ્લેખિત ભાષામાં અભિવાદન પરત કરે છે. પરીક્ષણ સુનિશ્ચિત કરે છે કે API વિવિધ ભાષા પસંદગીઓને યોગ્ય રીતે હેન્ડલ કરે છે. જો Accept-Language હેડર ગેરહાજર હોય, તો ડિફોલ્ટ "en" ભાષાનો ઉપયોગ થાય છે.
નિષ્કર્ષ
મજબૂત અને વિશ્વસનીય FastAPI એપ્લિકેશન્સ બનાવવા માટે પરીક્ષણ એ એક આવશ્યક ભાગ છે. TestClient તમારા API એન્ડપોઇન્ટ્સનું પરીક્ષણ કરવા માટે એક સરળ અને અનુકૂળ રીત પ્રદાન કરે છે. આ માર્ગદર્શિકામાં દર્શાવેલ શ્રેષ્ઠ પદ્ધતિઓનું પાલન કરીને, તમે વ્યાપક પરીક્ષણો લખી શકો છો જે તમારી API ની ગુણવત્તા અને સ્થિરતા સુનિશ્ચિત કરે છે. મૂળભૂત વિનંતીઓથી લઈને ડિપેન્ડન્સી ઇન્જેક્શન અને અસિંક્રોનસ પરીક્ષણ જેવી અદ્યતન તકનીકો સુધી, TestClient તમને સારી રીતે પરીક્ષણ કરાયેલ અને જાળવી શકાય તેવો કોડ બનાવવાની શક્તિ આપે છે. તમારા વિકાસ કાર્યપ્રવાહના મુખ્ય ભાગ તરીકે પરીક્ષણને અપનાવો, અને તમે વિશ્વભરના વપરાશકર્તાઓ માટે શક્તિશાળી અને વિશ્વસનીય બંને API બનાવશો. પરીક્ષણને સ્વચાલિત કરવા અને સતત ગુણવત્તા ખાતરી સુનિશ્ચિત કરવા માટે CI/CD એકીકરણના મહત્વને યાદ રાખો.