Найти в Дзене
Движение-Жизнь

Тестирование в Django. Практическое занятие №10

Оглавление

Продолжаем изучать язык программирования python и фреймворк Django. Сегодня у меня описание практического занятия. Как показывает практика, самое главное это понять правильно "техническое задание" или то что от тебя в первую очередь требуется. Поэтому "техзадание" я сразу же перенес на страницу создаваемого сайта:

-2
-3

Дабы после каждого выполненного пункта заходить в файл index.html в главном шаблоне и зачеркивать (кто не знает, делается это тегом <del>какой-то текст</del>) выполненные пункты. Сам видишь как дело продвигается и на душе приятно!

Тесты в python выполняются в три этапа: 1. Подготовка к тесту - объявляется метод setUp, где прописываются необходимые для прохождения теста условия (пользователи, права доступа, базы данных, таблицы и т.д.). 2.Сам тест. 3.Приборка за тестом - объявляется метод tearDown (удалить всё что было создано в первом пункте (setUp)).

-4

Если тест очень простой, то методы setUp и tearDown могут не использоваться, всё необходимое может быть заключено в теле теста. Но мы изучаем Django и тут так просто не протестируешь необходимые компоненты программы.

Если в классе теста который мы объявляем тестов совсем мало то можно использовать конструкцию типа:

-5

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

-6

Удобней сделать так чтобы пользователь создался, прошли все тесты и только потом он удалился.

Это дело достигается при помощи декоратора @classmethod, и методов setUpClass(cls) и tearDownClass(cls). Обратите внимание что в скобках используется cls, а не self.

Итак, сама практическая работа. Здесь по сути два задания:

1. Создать класс OrderDetailsViewTestCase и выполнить некие тестовые манипуляции с ним.

Используя методы setUpClass(cls) и tearDownClass(cls), мы создаем пользователя и наделяем его соответствующими полномочиями (необходимыми по условию задания). После чего пользователь удаляется.

В классе setUp осуществляем вход созданного пользователя, и создание тестового задания, после выполнения теста - заказ тоже самоликвидируется.

-7

Ну и собственно сам тест - он состоит из запроса, сделанного к тестовому серверу, который входит в состав модуля TestCase и получению от него ответа (сохранено в переменную response).

Проверяем наличие в ответе: адреса, промокода, и пользователь соответствует созданному ранее пользователю.

-8

2. Создать класс OrdersExportTestCas и так же выполнить некие манипуляции с ним.

Подробно условия задачи описаны в скриншоте выше.

Перво-наперво нужно создать фикстуры (файлы с дампом базы данных). Ведь у нас создается тестовая база данных а в ней - пусто. Надо чем-то её заполнить, вот для этого и подойдут наши файлы фикстур в формате *.json. Где лежат и как подключаются:

-9

Прописываются все три фикстуры, ибо если прописать только какую-то одну, как я сначала делал - будет ошибка, ведь таблицы в базе данных имеют связи между собой.

Все фикстуры мы поместим в отдельный каталог - "fixtures", нужно его создать в приложении shopapp. И выполнить следующую команды в консоли:

-10

Далее происходит создание, удаление и регистрация в системе пользователя в соответствующих методах. Нужно обратить внимание, что создание пользователя происходит через метод super, дабы подтянуть загруженные фикстуры к тестовой базе данных. Иначе далее будет пустой queryset.

-11

Далее уже выполняем сам тест:

-12

Делаем запрос к тестовому серверу и ответ записываем в переменную response. Проверяем чтобы в ответе от сервера был статус_код равным 200. Означающим что запрос выполнился успешно.

Затем получаем из базы данных queryset заказов и записываем в переменную orders. Из него получаем какие ожидаем увидеть данные.

Ответ сервера приводим к формату json и сохраняем в переменную order_data.

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

Если всё норм, то, запуская тесты в консоли, мы увидим:

-13

Все тесты прошли норм!

Ну вот и всё. Всем всех благ!

Данный материал не предназначен для списывания, это моё, может не самое адекватное видение поставленной задачи. Написано это для того чтобы повторить пройденное, чтобы оно отложилось лучше в памяти. А так же для тех кто впал в ступор и не знает что делать дальше.

На вопросы охотно отвечаю.