es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo devolver múltiples valores desde un accesorio de pytest con ámbito = sesión

He creado el punto de prueba de pytest (pytest fixture) en conftest.py para crear un usuario y autenticarse automáticamente.

import pytest

@pytest.fixture(scope="session")
def api_client():
    from rest_framework.test import APIClient
    return APIClient()

@pytest.fixture(scope="session")
@pytest.mark.django_db
def create_user():
    def make_user(**kwargs):
        kwargs['password'] = 'strong-test-pass'
        if 'username' not in kwargs:
            kwargs['username'] = 'test-user'
        return e_ge_user.objects.create_user(**kwargs)
    return make_user

@pytest.fixture(scope="session")
@pytest.mark.django_db
def auto_login_user(api_client, create_user):
    def make_auto_login():
        print("_+==--=-=-=-===--=-=-==----=-=-=-=")
        user = create_user()
        api_client.login(username=user.username, password='strong-test-pass')
        return api_client, user
    return make_auto_login

Ahora, ¿cómo llamar al método de obtención (get) y envío (post) utilizando el cliente de la API y cómo acceder al usuario en varios casos de prueba escritos en test_views.py?

import pytest

class TestViews:

    def test_generate_token_views_post(self, auto_login_user):
        # "Para ser contestado"
        assert True == True

    def test_generate_token_views_post2(self, auto_login_user):
        # "Para ser contestado"
        assert True == True
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para utilizar el fixture API client y el fixture auto_login_user en la clase TestViews, puedes acceder a ellos como argumentos en los métodos de prueba. Aquí tienes un ejemplo:

    @pytest.mark.django_db
    class TestViews:
        def test_generate_token_views_post(self, api_client, auto_login_user):
            user = auto_login_user()[1] # obtener el objeto de usuario del fixture auto_login_user
            token_url = '/api/token/'
            data = {'username': user.username, 'password': 'strong-test-pass'}
            response = api_client.post(token_url, data=data)
            assert response.status_code == 200
    
        def test_generate_token_views_post2(self, api_client, auto_login_user):
            user = auto_login_user()[1] # obtener el objeto de usuario del fixture auto_login_user
            protected_url = '/api/protected/'
            response = api_client.get(protected_url)
            assert response.status_code == 401
            api_client.login(username=user.username, password='strong-test-pass')
            response = api_client.get(protected_url)
            assert response.status_code == 200
    

    En este ejemplo, el primer caso de prueba envía una solicitud POST a la URL del token para generar un token de autenticación, mientras que el segundo caso de prueba envía una solicitud GET a una URL protegida que requiere autenticación. El fixture auto_login_user se utiliza para iniciar sesión automáticamente al usuario antes de enviar la solicitud. Se recupera el objeto de usuario del fixture y se pasa a las solicitudes.

Comments are closed.