python - test django rest framework
Uso de autenticación de acceso HTTP básica en el marco de prueba de Django (5)
Así es como lo hice:
from django.test import Client
import base64
auth_headers = {
''HTTP_AUTHORIZATION'': ''Basic '' + base64.b64encode(''username:password''),
}
c = Client()
response = c.get(''/my-protected-url/'', **auth_headers)
Nota: También deberá crear un usuario.
Para algunas de mis vistas de Django, he creado un decorador que realiza la autenticación de acceso HTTP básico. Sin embargo, mientras escribía casos de prueba en Django, me llevó un tiempo averiguar cómo autenticar la vista. Así es como lo hice. Espero que alguien encuentre esto útil.
En su Django TestCase puede actualizar los valores predeterminados del cliente para que contengan sus credenciales de autenticación básica de HTTP.
import base64
from django.test import TestCase
class TestMyStuff(TestCase):
def setUp(self):
credentials = base64.b64encode(''username:password'')
self.client.defaults[''HTTP_AUTHORIZATION''] = ''Basic '' + credentials
Otra forma de hacerlo es omitir el Cliente Django () y usar las Solicitudes en su lugar.
class MyTest(TestCase):
def setUp(self):
AUTH = requests.auth.HTTPBasicAuth("username", "password")
def some_test(self):
resp = requests.get(BASE_URL + ''endpoint/'', auth=AUTH)
self.assertEqual(resp.status_code, 200)
Para python3, puede codificar64 base su username:password
cadena de username:password
:
base64.b64encode(b''username:password'')
Esto devuelve bytes, por lo que debe transferirlo a una cadena ASCII con .decode(''ascii'')
:
Ejemplo completo:
import base64
from django.test import TestCase
def test_authorized(self):
headers = {
''HTTP_AUTHORIZATION'': ''Basic '' + base64.b64encode(b''username:password'').decode("ascii")
}
response = self.client.get(''/'', **headers)
self.assertEqual(response.status_code, 200)
Suponiendo que tengo un formulario de inicio de sesión, utilizo la siguiente técnica para iniciar sesión en el marco de prueba:
client = Client()
client.post(''/login/'', {''username'': ''john.smith'', ''password'': ''secret''})
Luego llevo al client
en mis otras pruebas ya que ya está autenticado. ¿Cuál es tu pregunta para esta publicación?