DevGang
Авторизоваться

Учимся тестировать Django

Я программировал некоторое время и, знаете, совсем недавно начал внедрять в своем процессе разработки тестирование. Стоит сказать, что это руководство предназначено для тех, кто начинает с нуля. Если вы и без дополнительных объяснений понимаете документацию, я бы это пропустил. Но всем остальным, прежде чем начать, советую прочитать этот гайд.

 1. Обзор тестирования

Автоматическое тестирование полезно для обеспечения качества кода. Если вы немного   программировали, то наверняка знаете, что неизбежно будут появляться такие моменты, что вы выпустили новую функцию, которая сломала существующую функцию. Тесты, которые вы пишете, будут выполняться до того, как вы отправите какой-либо код, и со временем вы накопите много тестов. Поэтому, когда вы работаете над новой функцией через несколько месяцев, вы будете запускать уже автоматизированные тесты, гарантируя, что код, который вы пишете сегодня, будет работать так, как ожидалось. Этот процесс требует поначалу затрат времени и сил, но в конечном итоге он окупается. Благодаря автоматизированному тестированию вы сэкономите много времени на ручном тестировании и будете гораздо увереннее в коде, который релизите. 

2. Тестируем код на хрупкость

tl; dr (краткий алгоритм) обнаружить ошибку, написать тест, который падает из-за ошибки, исправить ошибку, больше не волноваться. 

Если вы не знаете, с чего начать, или если вы ищете способ облегчить тестирование, вам отлично подойдет тестирование антихрупкости.  Антихрупкость основана на идее, что некоторые вещи становятся сильнее при воздействии критических состояний. По мере роста вашего приложения здесь и там будут появляться ошибки, и вам будет поручено их исправить. Однако, прежде чем исправить ошибку, вы можете написать тест, который не пройден из-за ошибки. Например, если у вас есть форма, которая создает пользователя и не проверяет правильность имени пользователя, вы можете написать тест, который специально проверяет проверку для этого поля. Вы можете вызвать тест username_validation_should_fail_when_length_is_less_than_8. Забавное имя для теста(и, возможно, вы могли бы его сократить), но важно писать очень конкретные тесты и давать осязаемые названия. Затем вы можете проверить валидацию, передав значения и в итоге должны потерпеть неудачу. Перед исправлением ошибки вы можете запустить тест и снова вызвать его неудачу. Затем, после исправления ошибки, вы можете быть уверены, что она снова не выйдет из строя.

Таким образом, ошибки все еще являются неприятностью, но по крайней мере они сделают ваше приложение более сильным с течением времени. В конце концов, вам никогда не придется исправлять одну и ту же ошибку дважды.

3. Тестирование в Джанго

Более поздние версии Django поставляются с тестовым окружением. На самом деле это просто оболочка для встроенного в Python фреймворка для тестирования модулей. Вы захотите поместить свои тесты в папку приложения, к которой они принадлежат, и вызовете файл tests.py. Начиная с Django 1.6, Django будет искать тесты в любом файле, который начинается с ключевого слова test. Таким образом, вы можете лучше организовать свои тесты, а не писать несколько тысяч строк тестов в одном файле.

4. Пишем первый тест

Этот шаг предполагает, что вы уже настроили приложение Django. Откройте файл с именем tests.py в приложении по нашему выбору (в Django основное приложение называется проектом, и оно часто состоит из многих приложений).

В верхней части файла вы импортируете среду тестирования Django:

from django import test И любые тесты, которые вы пишете, расширят класс test.TestCase. Итак, в первом тесте мы предположим, что нам нужно проверить, возвращает ли домашняя страница статус ответа 200. Если вы не настроили файл urls или ваши представления, это нормально. Мы можем начать с написания теста. Когда вы пишете тесты, хорошо бы заставить тест упасть, чтобы вы знали, что он работает.

class URLTests(test.TestCase): def test_homepage(self): response = self.client.get('/') self.assertEqual(response.status_code, 200)

Django запустит набор тестов URLTests и выполнит любые методы, начинающиеся с test. Так что в этом случае test_homepage будет запущен автоматически. Таким образом, первая строка теста просто запускает HTTP-запрос GET для извлечения домашней страницы. Ответ хранится в переменной ответа, и мы используем метод TestCase assertEqual, чтобы убедиться, что код состояния равен 200.

TestCase.assertEqual выдаст исключение, если утверждение не выполнено, и остановит тест, чтобы вы могли исправить проблему. На этом этапе, так как вы еще не создали домашнюю страницу, вы можете настроить URL-адрес, просмотреть и снова запустить тест.

5. Запуск тестов

Теперь, когда вы написали свой тест, пришло время его запустить. По мере развития тесты могут и должны проводиться часто. По крайней мере, они должны быть запущены до развертывания. С Django вы можете запустить все тесты в своем проекте или настроить тесты для одного приложения. Для запуска всех тестов вы можете просто запустить следующие команды в консоли:

./manage.py test Для запуска только тестов в определенном приложении, которое вы можете запустить:

./manage.py test app_name Как упоминалось ранее, эти команды найдут все применимые тесты и выполнят их. Тестовая база данных будет создана до и уничтожена после, и, как ожидается, вы будете уведомлены, если какие-либо тесты не пройдут.

Капнем глубже

Надеюсь, теперь у вас есть хорошее понимание того, почему, как и для чего вы будете использовать тестирование. Теперь пришло время изучать документацию.

#Python #Django
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

В этом месте могла бы быть ваша реклама

Разместить рекламу