Продолжаем изучать язык программирования python и фреймворк Django. Сегодня у меня описание практического занятия. Как показывает практика, самое главное это понять правильно "техническое задание" или то что от тебя в первую очередь требуется. Поэтому "техзадание" я сразу же перенес на страницу создаваемого сайта:
Дабы после каждого выполненного пункта заходить в файл index.html в главном шаблоне и зачеркивать (кто не знает, делается это тегом <del>какой-то текст</del>) выполненные пункты. Сам видишь как дело продвигается и на душе приятно!
Тесты в python выполняются в три этапа: 1. Подготовка к тесту - объявляется метод setUp, где прописываются необходимые для прохождения теста условия (пользователи, права доступа, базы данных, таблицы и т.д.). 2.Сам тест. 3.Приборка за тестом - объявляется метод tearDown (удалить всё что было создано в первом пункте (setUp)).
Если тест очень простой, то методы setUp и tearDown могут не использоваться, всё необходимое может быть заключено в теле теста. Но мы изучаем Django и тут так просто не протестируешь необходимые компоненты программы.
Если в классе теста который мы объявляем тестов совсем мало то можно использовать конструкцию типа:
Здесь мы создаем пользователя перед тестом, выполняется простейший тест и после чего этот пользователь удаляется. Представьте, если у нас в классе очень много тестов, то для каждого теста будет создаваться пользователь, выполняться тест и после удаляться.
Удобней сделать так чтобы пользователь создался, прошли все тесты и только потом он удалился.
Это дело достигается при помощи декоратора @classmethod, и методов setUpClass(cls) и tearDownClass(cls). Обратите внимание что в скобках используется cls, а не self.
Итак, сама практическая работа. Здесь по сути два задания:
1. Создать класс OrderDetailsViewTestCase и выполнить некие тестовые манипуляции с ним.
Используя методы setUpClass(cls) и tearDownClass(cls), мы создаем пользователя и наделяем его соответствующими полномочиями (необходимыми по условию задания). После чего пользователь удаляется.
В классе setUp осуществляем вход созданного пользователя, и создание тестового задания, после выполнения теста - заказ тоже самоликвидируется.
Ну и собственно сам тест - он состоит из запроса, сделанного к тестовому серверу, который входит в состав модуля TestCase и получению от него ответа (сохранено в переменную response).
Проверяем наличие в ответе: адреса, промокода, и пользователь соответствует созданному ранее пользователю.
2. Создать класс OrdersExportTestCas и так же выполнить некие манипуляции с ним.
Подробно условия задачи описаны в скриншоте выше.
Перво-наперво нужно создать фикстуры (файлы с дампом базы данных). Ведь у нас создается тестовая база данных а в ней - пусто. Надо чем-то её заполнить, вот для этого и подойдут наши файлы фикстур в формате *.json. Где лежат и как подключаются:
Прописываются все три фикстуры, ибо если прописать только какую-то одну, как я сначала делал - будет ошибка, ведь таблицы в базе данных имеют связи между собой.
Все фикстуры мы поместим в отдельный каталог - "fixtures", нужно его создать в приложении shopapp. И выполнить следующую команды в консоли:
Далее происходит создание, удаление и регистрация в системе пользователя в соответствующих методах. Нужно обратить внимание, что создание пользователя происходит через метод super, дабы подтянуть загруженные фикстуры к тестовой базе данных. Иначе далее будет пустой queryset.
Далее уже выполняем сам тест:
Делаем запрос к тестовому серверу и ответ записываем в переменную response. Проверяем чтобы в ответе от сервера был статус_код равным 200. Означающим что запрос выполнился успешно.
Затем получаем из базы данных queryset заказов и записываем в переменную orders. Из него получаем какие ожидаем увидеть данные.
Ответ сервера приводим к формату json и сохраняем в переменную order_data.
Сравниваем данные, полученные от тестового сервера и тем что хранится в базе данных.
Если всё норм, то, запуская тесты в консоли, мы увидим:
Все тесты прошли норм!
Ну вот и всё. Всем всех благ!
Данный материал не предназначен для списывания, это моё, может не самое адекватное видение поставленной задачи. Написано это для того чтобы повторить пройденное, чтобы оно отложилось лучше в памяти. А так же для тех кто впал в ступор и не знает что делать дальше.
На вопросы охотно отвечаю.