FastAPI Uç Noktalarını Tümleştirme Sınaması
İstekleri benzetmek için FastAPI'nin `TestClient` özelliğini kullanarak API uç noktalarınız üzerinde tümleştirme sınamaları gerçekleştirin.
FastAPI Uç Noktalarını Tümleştirme Sınaması, CoddyKit'te ücretsiz bir FastAPI Backend Development Bootcamp dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, FastAPI Backend Development Bootcamp öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.
What is Integration Testing?
Entegrasyon testlerine hoş geldiniz! Birim testlerini öğrendikten sonra, FastAPI uygulamanızın farklı bölümlerinin birlikte nasıl çalıştığını görmenin zamanı geldi.
- Birim testleri, bireysel işlevleri veya bileşenleri yalıtılmış bir şekilde kontrol eder.
- Entegrasyon testleri, sisteminizin birden fazla bileşeninin doğru şekilde etkileşime girdiğini doğrular. Bir FastAPI uygulaması için bu, API uç noktalarınızı test etmek, istekleri nasıl karşıladıklarını, bağımlılıklarla nasıl etkileşime girdiklerini ve beklenen yanıtları döndürüp döndürmediklerini kontrol etmek anlamına gelir.
Bu testler, tüm parçalar birbirine bağlandığında API'nizin beklendiği gibi çalıştığından emin olmanızı sağlar.
Introducing FastAPI's TestClient
FastAPI, fastapi.testclient modülünden gelen TestClient adında güçlü bir araç sunar. Bu istemci, canlı bir sunucu çalıştırmanıza gerek kalmadan FastAPI uygulamanıza HTTP istekleri göndermenizi sağlar.
- İstekleri doğrudan bellek üzerinde simüle eder.
- Popüler
httpxkütüphanesi üzerine inşa edilmiştir. - Geliştirme sırasında API uç noktalarınızı hızlıca test etmek için mükemmeldir.
Hadi nasıl kurulacağına bakalım!
Setting Up Your TestClient
TestClient kullanmak için, öncelikle FastAPI uygulama örneğinizi içe aktarmanız ve ardından bunu TestClient oluşturucusuna iletmeniz gerekir. Bu, simüle edilmiş istekler göndermeye hazır bir istemci örneği oluşturur.
Temel bir kurulumu görmek için bu örneği çalıştırmayı deneyin:
from fastapi import FastAPI
from fastapi.testclient import TestClient
# 1. Define your FastAPI app
app = FastAPI()
# 2. Define a simple endpoint
@app.get("/hello")
async def read_hello():
return {"message": "Hello Test!"}
# 3. Create a TestClient instance
client = TestClient(app)
# 4. Define a test function
def test_read_hello():
# Use the client to make a GET request
response = client.get("/hello")
# Assertions to check the response
assert response.status_code == 200
assert response.json() == {"message": "Hello Test!"}
print("Test Passed: /hello endpoint works!")
# This block makes the script runnable directly
if __name__ == "__main__":
print("Running a simple test with TestClient...")
test_read_hello()
Testing GET Requests
GET istekleri yapmak oldukça basittir. TestClient örneğiniz üzerinde .get() metodunu çağırıp, test etmek istediğiniz uç noktanın yolunu parametre olarak göndermeniz yeterlidir.
İsteği gerçekleştirdikten sonra, sonucu doğrulamak için response nesnesinin .status_code ve .json() gibi özelliklerine erişebilirsiniz.
from fastapi import FastAPI
from fastapi.testclient import TestClient
app = FastAPI()
@app.get("/items/")
async def read_items():
return [{"name": "Laptop"}, {"name": "Mouse"}]
client = TestClient(app)
def test_read_items():
response = client.get("/items/")
print(f"Status Code: {response.status_code}")
print(f"Response JSON: {response.json()}")
assert response.status_code == 200
assert len(response.json()) == 2
assert response.json()[0]["name"] == "Laptop"
print("Test Passed: /items/ returns correct data!")
if __name__ == "__main__":
print("Testing /items/ endpoint...")
test_read_items()
Testing Path & Query Parameters
TestClient, yol ve sorgu parametrelerini tıpkı gerçek bir tarayıcı gibi yönetir. Yol parametreleri doğrudan URL dizesine dahil edilirken, sorgu parametreleri URL'ye eklenebilir veya params argümanı aracılığıyla iletilebilir.
Sorgu parametreleri için params argümanını kullanmak genellikle daha temizdir ve URL kodlamasını otomatik olarak gerçekleştirir.
from fastapi import FastAPI
from fastapi.testclient import TestClient
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
if q:
return {"item_id": item_id, "q": q}
return {"item_id": item_id}
client = TestClient(app)
def test_read_item_with_query():
# Path param 5, Query param q=hello
response = client.get("/items/5", params={"q": "hello"})
assert response.status_code == 200
assert response.json() == {"item_id": 5, "q": "hello"}
print("Test Passed: Path & Query params handled!")
def test_read_item_no_query():
# Only path param 10
response = client.get("/items/10")
assert response.status_code == 200
assert response.json() == {"item_id": 10}
print("Test Passed: Path param only handled!")
if __name__ == "__main__":
print("Testing path and query parameters...")
test_read_item_with_query()
test_read_item_no_query()
Testing POST Requests with JSON
İstek gövdesi bekleyen uç noktalar için (POST veya PUT gibi), bir Python sözlüğünü doğrudan istemci metodunun json bağımsız değişkenine iletebilirsiniz. TestClient, bu sözlüğü otomatik olarak bir JSON dizgisine dönüştürecek ve uygun Content-Type başlığını ayarlayacaktır.
from fastapi import FastAPI
from pydantic import BaseModel
from fastapi.testclient import TestClient
app = FastAPI()
class Product(BaseModel):
name: str
price: float
description: str | None = None
@app.post("/products/")
async def create_product(product: Product):
return product
client = TestClient(app)
def test_create_product():
product_data = {"name": "Widget", "price": 29.99}
response = client.post(
"/products/",
json=product_data
)
assert response.status_code == 200
assert response.json() == {"name": "Widget", "price": 29.99, "description": None}
print("Test Passed: POST request with JSON body!")
if __name__ == "__main__":
print("Testing POST request...")
test_create_product()
Overriding Dependencies for Testing
FastAPI'nin en güçlü test özelliklerinden biri, bağımlılıkları kolayca geçersiz kılabilme yeteneğidir. Bu, aşağıdakileri yapmak isteyebileceğiniz entegrasyon testleri için çok önemlidir:
- Harici servisleri taklit etmek (örneğin, bir ödeme ağ geçidi).
- Üretim veritabanı yerine bir test veritabanı kullanmak.
- Belirli test verilerini veya yapılandırmalarını enjekte etmek.
app.dependency_overrides kullanarak bir bağımlılık fonksiyonunu geçici olarak farklı bir fonksiyonla değiştirebilirsiniz.
Applying Dependency Overrides
Bir bağımlılığı geçersiz kılmak için, mock fonksiyonunuzu app.dependency_overrides sözlüğündeki orijinal bağımlılık fonksiyonuna atarsınız. Testinizden sonra, bu geçersiz kılmaların diğer testleri etkilemesini önlemek için bunları temizlemeniz hayati önem taşır.
'Gerçek' bir ayarı 'test' ayarıyla nasıl değiştireceğimize bakalım:
from fastapi import FastAPI, Depends
from fastapi.testclient import TestClient
app = FastAPI()
# Our 'real' dependency function
def get_current_env():
return "production"
@app.get("/environment/")
async def get_environment(env: str = Depends(get_current_env)):
return {"current_environment": env}
client = TestClient(app)
def test_get_environment_default():
response = client.get("/environment/")
assert response.status_code == 200
assert response.json() == {"current_environment": "production"}
print("Default environment test passed!")
def test_get_environment_override():
# Our mock dependency function for testing
def override_get_current_env():
return "test"
# Apply the override
app.dependency_overrides[get_current_env] = override_get_current_env
response = client.get("/environment/")
assert response.status_code == 200
assert response.json() == {"current_environment": "test"}
print("Overridden environment test passed!")
# IMPORTANT: Clear overrides after the test
app.dependency_overrides.clear()
if __name__ == "__main__":
print("Testing dependency overrides...")
test_get_environment_default()
test_get_environment_override()
Ensuring Cleanup of Overrides
app.dependency_overrides kısmını temizlememek, bir testteki geçersiz kılmanın (override) istenmeyen bir şekilde sonraki testleri etkilediği "sızıntılı" testlere yol açabilir. app.dependency_overrides kısmını genellikle boş bir sözlüğe eşitleyerek veya .clear() kullanarak sıfırladığınızdan her zaman emin olun.
Bu, her testin temiz ve öngörülebilir bir durumda çalışmasını sağlar.
Test Your Knowledge!
FastAPI'nin TestClient öğesi hakkındaki aşağıdaki ifadelerden hangisi DOĞRUDUR?
Recap & Next Steps
Harika bir iş çıkardın! FastAPI uygulaman üzerinde nasıl entegrasyon testleri gerçekleştireceğini öğrendin:
- Entegrasyon testinin ne olduğunu ve neden çok önemli olduğunu inceledik.
- Çeşitli HTTP isteklerini simüle etmek için FastAPI'nin
TestClientyapısını kurmayı ve kullanmayı öğrendin. - Yol, sorgu ve JSON gövde parametrelerinin işlenmesi de dahil olmak üzere GET ve POST isteklerinin test edilmesini ele aldık.
- Artık test ortamını izole etmek ve kontrol etmek için bağımlılık geçersiz kılmalarını (dependency overrides) nasıl etkili bir şekilde kullanacağını biliyorsun.
Bu beceriler, sağlam ve güvenilir FastAPI uygulamaları oluşturmak için çok önemlidir. Pratik yapmaya devam et, kısa sürede kapsamlı testler yazıyor olacaksın!
Sıkça Sorulan Sorular
“FastAPI Uç Noktalarını Tümleştirme Sınaması” dersi ücretsiz mi?
Evet — “FastAPI Uç Noktalarını Tümleştirme Sınaması” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve FastAPI Backend Development Bootcamp kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.
“FastAPI Uç Noktalarını Tümleştirme Sınaması” dersinde ne öğreneceğim?
İstekleri benzetmek için FastAPI'nin `TestClient` özelliğini kullanarak API uç noktalarınız üzerinde tümleştirme sınamaları gerçekleştirin. FastAPI Backend Development Bootcamp ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
FastAPI Backend Development Bootcamp öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te FastAPI Backend Development Bootcamp, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“FastAPI Uç Noktalarını Tümleştirme Sınaması” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu FastAPI Backend Development Bootcamp dersinde kod yazıp çalıştırabilir miyim?
Evet. Her FastAPI Backend Development Bootcamp dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Pytest ile Birim Sınamaları
- FastAPI Uç Noktalarını Tümleştirme Sınaması
- FastAPI Uygulamalarında Hata Ayıklama
- FastAPI Testlerinde Bağımlılıkları Taklit Etme