Тестування у 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