Тестирование в Django.

Тестируем API запрос.

Создадим файл test_login.py в любой корневой папке приложения.

from django.test import TestCase

class LoginTestCase(TestCase):
    def setUp(self):
        print('Setting up')

    def test_can_login(self):
        print('Try to login.')

Если создаете свою папку то не забудте создать в ней пустой файл init.py

Сделаем POST запрос на сервер и передадим все необходимые данные для логина.

from django.test import TestCase
import requests
from mtaxi.settings import SERVER_NAME, AUTH_APP_ID, AUTH_APP_SECRET
from requests.auth import HTTPBasicAuth
import json

class LoginTestCase(TestCase):
    def setUp(self):
        print('Setting up')

    def test_can_login(self):
        url = f'{SERVER_NAME}/v1/account/login/'
        data = {
            'username': 'admin',
            'password': 'admin',
            'role': 'driver',
            'app_id': AUTH_APP_ID,
            'app_secret': AUTH_APP_SECRET
        }
        rez = requests.post(url, data = data)
        json_data = json.loads(rez.text)
        self.assertIn('access_token',json_data)

self.assertIn(‘access_token’,json_data) - тут мы проверяем наличие ключа в словаре.

Проверить на равенство можно так:

self.assertEqual(json_data['status'],1)

Проверяем ошибку в логине и пароле.

def test_can_not_login(self):
    url = f'{SERVER_NAME}/v1/account/login/'
    data = {
        'username': 'blabla',
        'password': 'blabla',
        'role': 'driver',
        'app_id': AUTH_APP_ID,
        'app_secret': AUTH_APP_SECRET
    }
    rez = requests.post(url, data = data)
    json_data = json.loads(rez.text)
    self.assertEqual(json_data['status'],1)

Запустим тесты внутри docker контейнера и сохраним артефакты в папке tmp.

#!/usr/bin/env bash
docker exec -ti django-server bash -c './manage.py test --keepdb > tmp/test_result 2>tmp/test_errors'
if [ $? = 0 ]; then
    echo 'Ok'
else
    echo 'Fail'
fi