Cómo probar las API GET y POST que requieren que el usuario haya iniciado sesión en pytest Django?
He creado un elemento para crear un usuario y autenticarse automáticamente en conftest.py
@pytest.fixture
def test_password():
return ‘strong-test-pass’;
@pytest.fixture(scope=’session’)
def create_user(db, test_password):
def make_user(kwargs):
employee = e_ge_employee.objects.create()
kwargs[‘password’] = test_password
if ‘username’ not in kwargs:
kwargs[‘username’] = str(uuid.uuid4())
if ’employee’ not in kwargs:
kwargs[’employee’] = employee
return e_ge_user.objects.create(kwargs)
return make_user
@pytest.fixture
def auto_login_user(db, client, create_user, test_password):
def make_auto_login(user=None):
if user is None:
user = create_user()
client.login(username=user.username, password=test_password)
return client, user
return make_auto_login
y luego escribí una prueba para verificar la API GET en test_urls.py
class TestUrls:
@pytest.mark.parametrize(‘param’, [
(‘generate_token’),
(‘roi_report’)
])
def test_generate_token_url(self, auto_login_user, param):
url = reverse(param)
client, user = auto_login_user()
print(“client”,client)
print(“user”,user)
resp = client.get(url)
print(resp)
assert resp.status_code == 200
Me está dando el error
{“detail”:”No se proporcionaron credenciales de autenticación.”}
en mis vistas de api estoy usando las clases de autenticación = [SessionAuthentication, ]
permission_classes = [IsAuthenticated, ] estas dos clases
¿Alguien puede por favor proporcionarme la solución…..Gracias de antemano
davy.ai
Parece que las credenciales de autenticación no se están pasando a las vistas de la API al realizar la solicitud desde el caso de prueba. Para solucionar este problema, puedes hacer lo siguiente:
En la función
auto_login_user
(arreglo de inicio de sesión automático), puedes modificar el valor de retorno para incluir la información de sesión del usuario:Luego, en el caso de prueba, puedes pasar la información de sesión junto con la solicitud:
auto_login_user
para utilizar el métodoforce_login
incorporado de Django:En lugar de iniciar sesión manualmente en el usuario utilizando
client.login
, puedes utilizar el métodoforce_login
incorporado de Django que establece automáticamente los datos de sesión requeridos:Luego, en el caso de prueba, puedes realizar la solicitud sin pasar la sesión:
Estas modificaciones al caso de prueba y función deberían proporcionar las credenciales de autenticación requeridas a la vista de la API y resolver el error.