Автор оригинала: Olawale Aladeusi.
Резюме из Части 1 и Части 2
В части 1 мы рассмотрели, как создать простой RESTful API с четырьмя основными операциями CRUD, включая выполнение аутентификации пользователей с помощью JSON Web Token(JWT). Мы узнали о настройке среды Flask, создании моделей, выполнении и применении миграций в БД, группировке ресурсов с помощью flask blueprint, проверке подлинности пользователя с помощью токена JWT. В части 2 мы завершили наши конечные точки приложения, разработав 5 конечных точек сообщений в блоге.
Эта часть будет заключительной, мы обсудим, как настроить модульные тесты для нашего приложения, а также как разместить его на Heroku.
Тест
“Тесты-это истории, которые мы рассказываем следующему поколению программистов над проектом.” ― Рой Ошеров
Тестирование – это процесс разработки программного обеспечения, в котором приложение тестируется независимо. Это просто способ обеспечить, чтобы наши приложения работали так, как ожидалось, всякий раз, когда мы вносим какие-либо изменения в код.
Todo
- Установка зависимостей тестов
- Написание тестов с использованием python unittest package
- Получите тестовое покрытие с помощью пакета pytest-cov
1. Установите зависимости тестов Установите следующие пакеты
$ pipenv install pytest-cov pytest
Вы можете прочитать больше о том, как эти пакеты работают в Интернете.
2. Напишите тесты с помощью пакета python unittest Чтобы сделать это простым, наши тесты будут охватывать только конечную точку пользователя. Прежде чем продолжить, нам нужно создать тестовую
конфигурацию в config.py
file – для этого добавьте следующий код в config.py
##################### # existing code here# ##################### class Testing(object): """ Development environment configuration """ TESTING = True JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY') SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_TEST_URL') SQLALCHEMY_TRACK_MODIFICATIONS=False app_config = { ##################### # existing code here# ##################### 'testing': Testing }
Затем создайте новую папку внутри вашей папки src
и назовите ее tests
. Создать __init__.py
и test_user.py
файл внутри папки tests
| Добавьте следующий код в test_user.py
высокий звук
Здесь мы сделали следующее;
- Создан
Users Test
класс, унаследованный отunittest.ТестОвый кейс
- Created
setUp
method – это будет выполняться перед каждым методом тестового случая. Мы используем этот метод для создания нашего приложения, а также для создания всех таблиц базы данных, необходимых приложению. Метод tearDown
– это будет выполняться в конце каждого метода тестового случая – мы используем этот метод дляdrop
бд после каждого запуска метода тестового случая, так как все наши тесты должны быть независимы друг от друга(то есть они должны быть в состоянии работать независимо друг от друга).- Наконец, наши методы тестового случая охватывают некоторые сценарии, которые включают создание пользователя с действительными учетными данными, создание пользователя с недействительными учетными данными, вход пользователя как с действительными, так и с недействительными учетными данными, обновление профилей пользователя и удаление учетной записи пользователя. Обратите внимание, что каждое имя метода тестирования должно начинаться с
test
именно такpytest
распознает его как метод тестирования, когда придет время запустить тест.
3. Получить покрытие тестового кода с помощью pytest-cov Code coverage показывает процент нашего кода, который покрывается в тесте. Чтобы запустить тесты, а также получить покрытие кода, используйте следующую команду
$ pytest --cov=src
Вы должны увидеть что-то похожее на
Чтобы исключить папку tests
из покрытия, давайте создадим новый конфигурационный файл в корневом каталоге проекта и назовем его .coveragerc
и добавим в файл следующее
[run] omit = src/tests/*
Теперь запустите тесты с помощью $ py.test --cov-config .coveragerc
Развертывание на Heroku
УРА!! Наконец, давайте развернем приложение в HEROKU . ШАГ 1 Регистрация учетной записи на Heroku
УРА!! Наконец, давайте развернем приложение в HEROKU .
ШАГ 1 Регистрация учетной записи на Heroku
ШАГ 3 Подключите проект к вашему репозиторию github, нажав на вкладку deploy
и нажав на кнопку Github connect
. Примечание: Это предполагает, что у вас есть учетная запись Github и у вас есть свой код на Github.
ШАГ 4 В настоящее время, если вы установите production
в качестве вашего FLASK_ENV
, вы получите предупреждение, говорящее вам не использовать сервер разработки flask для производства, потому что не рекомендуется использовать сервер разработки flask в производстве.
Для производства мы будем использовать сервер WSGI(Web Server Gateway Interface). Одной из реализаций WSGI является gunicorn . Установить gunicorn
пакет с помощью $ pipenv gunicorn
.
Кроме того, нам нужно внести некоторые коррективы в run.py
код, обновление run.py
со следующим
# /run.py import os from src.app import create_app env_name = os.getenv('FLASK_ENV') app = create_app(env_name) if __name__ == '__main__': port = os.getenv('PORT') # run app app.run(host='0.0.0.0', port=port)
Не забудьте установить PORT
в среде вашей системы.
Затем создайте файл Profile
в корневом каталоге проекта и добавьте следующее
web: gunicorn run:app
Stage, Commit и push ваш код на Github.
ШАГ 5 На Heroku добавьте все необходимые переменные среды, нажав на вкладку настройки на панели мониторинга
Вы можете создать бесплатную базу данных PostgreSQL с помощью надстроек Heroku PostgreSQL или использовать ElephantSQL .
ШАГ 6 Если шаг 1-5 прошел успешно, значит, вы готовы развернуть свое приложение. На Heroku нажмите на вкладку deploy
, выберите ветвь, которую вы хотите развернуть, и нажмите на кнопку “Развернуть ветвь” .
Бум!!!!!!!!!!! Поздравление ваше приложение работает в прямом эфире
Чтобы открыть его, нажмите на кнопку “Открыть приложение” в правом верхнем углу панели управления проектом на Heroku
Вы также можете развернуть приложение в Heroku с помощью их инструмента cli
, здесь есть документация Heroku о том, как развертывать приложения python
Вывод
В этой заключительной части мы узнали следующее;
- Напишите модульный тест Python с помощью пакета unittest
- Разверните приложение на Heroku.
Вы можете проверить полный код на github, нажав здесь .
Ознакомьтесь с Частью 1 и Частью 2 этой серии
Например, комментируйте и делитесь этим постом, если вы узнали из него одну или две вещи.