Selam geliştiriciler! Bugün, FastAPI ile birim test etme dünyasına dalıyoruz. İster deneyimli bir profesyonel olun, ister FastAPI'ye yeni başlamış olun, bu rehber, API'nizin mümkün olduğunca sağlam olmasını sağlamanıza yardımcı olacaktır. Birim test etmenin temellerinden FastAPI uygulamalarını test etmeye yönelik özel tekniklere kadar her şeyi ele alacağız. Ayrıca, test sürecinizi kolaylaştırabilecek Apidog adlı kullanışlı bir araçtan bahsedeceğiz.
Neden Birim Test Etme Önemlidir?
FastAPI'yi birim test etmenin inceliklerine girmeden önce, birim test etmenin neden önemli olduğundan bahsedelim. Basitçe söylemek gerekirse, birim test etme, uygulamanızın her bir parçasının amaçlandığı gibi çalıştığını doğrulamanıza olanak tanır. Tek tek bileşenleri test ederek, hataları erken yakalayabilir ve uygulamanızın doğru davrandığından emin olabilirsiniz.
İşte birim test etmeyi benimsemek için bazı önemli nedenler:
- Hataları Erken Yakalayın: Küçük kod birimlerini test ederek, sorunları önemli sorunlar haline gelmeden önce belirleyebilir ve düzeltebilirsiniz.
- Kod Kalitesini Sağlayın: Birim testleri bir güvenlik ağı görevi görür ve projeniz geliştikçe yüksek kaliteli kodu korumanıza yardımcı olur.
- Yeniden Düzenlemeyi Kolaylaştırın: Sağlam bir test kümesiyle, herhangi bir sorunun hemen yakalanacağını bilerek kodunuzu güvenle yeniden düzenleyebilirsiniz.
- Belgelemeyi İyileştirin: Testler, uygulamanızın farklı bölümlerinin nasıl çalışması gerektiğini gösteren ek belgeler olarak hizmet eder.
Birim test etmenin önemini anladığımıza göre, FastAPI ile birim test etmenin ayrıntılarına dalalım.

FastAPI Projenizi Kurma
Her şeyden önce, bir FastAPI projenizin kurulu olması gerekir. Henüz yapmadıysanız, şu adımları izleyerek yeni bir FastAPI projesi oluşturabilirsiniz:
FastAPI ve Uvicorn'u Yükleyin: FastAPI web çerçevesidir ve Uvicorn ASGI sunucusudur.
pip install fastapi uvicorn
FastAPI Uygulamanızı Oluşturun: main.py
adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
Uygulamanızı Çalıştırın: Sunucuyu Uvicorn kullanarak başlatın.
uvicorn main:app --reload
FastAPI uygulamanız artık çalışıyor!
Birim Test Etmeye Başlarken
Test Bağımlılıklarını Yükleme
Birim test etmeye başlamak için bir test çerçevesine ihtiyacınız olacak. Kullanımı kolay ve yaygın olarak benimsenen pytest'i kullanmanızı öneririz.
Pytest'i pip kullanarak yükleyin:
pip install pytest
Ayrıca, testler sırasında FastAPI uygulamanıza HTTP istekleri yapmak için httpx
'i yükleyin:
pip install httpx
İlk Testinizi Yazma
Kök uç noktamızın beklenen yanıtı döndürdüğünü doğrulamak için basit bir test yazalım. test_main.py
adında bir dosya oluşturun ve aşağıdaki kodu ekleyin:
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() == {"Hello": "World"}
Bu testte, kök uç noktasına bir GET isteği göndermek ve yanıtın doğru olduğunu doğrulamak için FastAPI'nin TestClient
'ını kullanıyoruz. Testi pytest kullanarak çalıştırın:
pytest
Testlerinizi Yapılandırma
Testlerinizi düzenli tutmak için, test dosyalarınız için aşağıdaki yapıyı göz önünde bulundurun:
project/
├── app/
│ ├── main.py
│ └── ... (other application code)
├── tests/
│ ├── __init__.py
│ └── test_main.py
Testlerinizi özel bir tests
dizinine yerleştirerek, temiz ve düzenli bir kod tabanını koruyabilirsiniz.
Gelişmiş Birim Test Etme Teknikleri
Parametreli Uç Noktaları Test Etme
FastAPI, uç noktalarınızda parametreleri yönetmeyi kolaylaştırır. Bir parametre alan bir uç nokta ekleyelim ve bunun için bir test yazalım.
main.py
dosyanızı yeni bir uç nokta ile güncelleyin:
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
Ardından, test_main.py
dosyasına bu uç nokta için bir test ekleyin:
def test_read_item():
item_id = 42
response = client.get(f"/items/{item_id}")
assert response.status_code == 200
assert response.json() == {"item_id": item_id}
Bu test, uç noktanın URL'de geçirilen öğe kimliğini doğru bir şekilde döndürüp döndürmediğini kontrol eder.
Bağımlılık Enjeksiyonunu Test Etme
FastAPI'nin bağımlılık enjeksiyon sistemi güçlü ve esnektir. Bağımlılıkları kullanan uç noktaları nasıl test edebileceğinizi görelim.
main.py
dosyasına bir bağımlılık ekleyin:
from fastapi import Depends
def get_query(q: str = None):
return q
@app.get("/search/")
def search(query: str = Depends(get_query)):
return {"query": query}
test_main.py
dosyasında bu uç nokta için bir test yazın:
def test_search():
query = "fastapi"
response = client.get(f"/search/?q={query}")
assert response.status_code == 200
assert response.json() == {"query": query}
Burada, bağımlılık enjeksiyonunun sorgu parametresini doğru bir şekilde işleyip işlemediğini test ediyoruz.
Gelişmiş Test İçin Apidog'u Tanıtalım
Apidog Nedir?
Apidog, API testini ve dokümantasyonunu basitleştiren harika bir araçtır. Test sürecinizi otomatikleştirmenize ve kolaylaştırmanıza olanak tanıyarak FastAPI ile sorunsuz bir şekilde entegre olur.

Testlerinizde Apidog'u Kullanma
Apidog, uç noktalarınızı kolayca belgelemek ve test etmek için dekoratörler sağlar. FastAPI uygulamanızla Apidog'u şu şekilde kullanabilirsiniz.
Test Ortamınızı Kurun: Her şeyden önce, test ortamınızı kurun. Bu, test etmek istediğiniz sistemleri ve Apidog'u içerir. Apidog'u açın ve test Sekmesine geçin

Test Durumlarınızı Tanımlayın: Ardından, test durumlarınızı tanımlayın. Test etmek istediğiniz farklı senaryoları düşünün ve bunları yazın.

Testlerinizi Çalıştırın: Şimdi, Apidog'un sihrini yapma zamanı! Testlerinizi çalıştırın ve sonuçları bekleyin.

Sonuçlarınızı Analiz Edin: Testleriniz bittikten sonra, sonuçlarınızı analiz edin. Herhangi bir hata veya beklenmedik davranış arayın.

Herhangi bir sorun bulursanız, bunları düzeltin ve testlerinizi tekrar çalıştırın. Sonuçlardan memnun kalana kadar bu işlemi tekrarlayın.
Apidog ile, testlerinizin yalnızca doğru olmasını değil, aynı zamanda iyi belgelenmesini de sağlayabilirsiniz.
FastAPI'yi Birim Test Etme İçin En İyi Uygulamalar
Testleri İzole Tutun
Her testin bağımsız olduğundan ve diğer testlerin durumuna bağlı olmadığından emin olun. Bu izolasyon, testlerin hata ayıklamasını ve bakımını kolaylaştırır.
Fixtures Kullanın
Pytest'teki fixtures, test ortamlarını kurmanıza ve kaldırmanıza yardımcı olabilir. İşte FastAPI uygulamanız için bir örnek fixture:
import pytest
from fastapi.testclient import TestClient
from main import app
@pytest.fixture
def client():
return TestClient(app)
def test_with_fixture(client):
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Hello": "World"}
Harici Bağımlılıkları Sahte Yapın
Uç noktalarınız harici hizmetlere veya veritabanlarına bağlı olduğunda, test sırasında bu bağımlılıkları simüle etmek için sahtecilik kullanın. Bu yaklaşım, harici faktörlerden etkilenmeden uygulama mantığınızı test etmeye odaklanmanıza yardımcı olur.
Sonuç
FastAPI uygulamalarını birim test etmek göz korkutucu olmak zorunda değil. Bu kılavuzda özetlenen adımları izleyerek, API'nizin güvenilir, bakımı yapılabilir ve iyi belgelenmiş olmasını sağlayabilirsiniz. Test sürecinizi kolaylaştırmak ve testlerinizi düzenli ve izole tutmak için Apidog gibi araçlar kullanmayı unutmayın.
Şimdi, bu ipuçlarını uygulamaya koyma ve FastAPI uygulamanızı kurşun geçirmez yapma sırası sizde. İyi testler!