Wie kann ich die Authentifizierung in einem einzelnen Test mit einem Fixture in Fast API zusammen mit Pytest überspringePython

Python-Programme
Guest
 Wie kann ich die Authentifizierung in einem einzelnen Test mit einem Fixture in Fast API zusammen mit Pytest überspringe

Post by Guest »

Ich habe eine Authentifizierung erstellt, die der Beschreibung in der Dokumentation ähnelt. Also habe ich diese Abhängigkeit von dort kopiert:

Code: Select all

async def get_current_user(token: str = Depends(oauth2_scheme)):
credentials_exception = HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Could not validate credentials",
headers={"WWW-Authenticate": "Bearer"},
)
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
username: str = payload.get("sub")
if username is None:
raise credentials_exception
token_data = TokenData(username=username)
except JWTError:
raise credentials_exception
user = get_user(fake_users_db, username=token_data.username)
if user is None:
raise credentials_exception
return user
Was ich in einer Reihe von Endpunkten verwende, zum Beispiel im anderen Beispiel der Dokumentation, für Benutzer habe ich GET, POST, PUT, DELETE und GET ALL.
Die einzige Methode, die keine Authentifizierung erfordert, ist die POST-Methode zum Erstellen eines neuen Benutzers.
Ich möchte in der Lage sein, Komponententests zu definieren, die überprüfen Auf die Methode kann nicht ohne Authentifizierung zugegriffen werden, und ich möchte die Authentifizierung auch vollständig überspringen, wenn ich mich auf den Inhalt der Methode konzentriere.
Daher habe ich die Override-Funktionalität in einem Fixture verwendet. Zum Beispiel für diesen Test:

Code: Select all

test_user.py

Code: Select all

def test_create_user(test_db, create_user, user, skip_authentication):
"""
Verify a user can be created and retrieved
"""
response = client.post(
"/api/v1/users/",
json=create_user,
)

# Assert creation
assert response.status_code == 200, response.text
data = response.json()
assert "id" in data
user_id = data["id"]
del data["id"]
assert data == user

# Assert get user
response = client.get(f"/api/v1/users/{user_id}")
assert response.status_code == 200, response.text
data = response.json()
assert user_id == data["id"]
del data["id"]
assert data == user

Code: Select all

conftest.py

Code: Select all

@pytest.fixture
def skip_authentication() -> None:

def get_current_user():
pass
app.dependency_overrides[get_current_active_user] = get_current_user
Und dies scheint zu funktionieren, um die Authentifizierung zu entfernen, aber es entfernt sie in allen Tests, nicht nur in denen mit der Vorrichtung „skip_authentication“.
Wie kann ich es nur auf die Tests beschränken, die ich möchte?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post