Рубрики
Без рубрики

Создание API-интерфейсов RESTful Blog с использованием python и flask – Часть 3

“Тесты-это истории, которые мы рассказываем следующему поколению программистов над проектом.” ― Рой Ошеров

Автор оригинала: Olawale Aladeusi.

Резюме из Части 1 и Части 2

В части 1 мы рассмотрели, как создать простой RESTful API с четырьмя основными операциями CRUD, включая выполнение аутентификации пользователей с помощью JSON Web Token(JWT). Мы узнали о настройке среды Flask, создании моделей, выполнении и применении миграций в БД, группировке ресурсов с помощью flask blueprint, проверке подлинности пользователя с помощью токена JWT. В части 2 мы завершили наши конечные точки приложения, разработав 5 конечных точек сообщений в блоге.

Эта часть будет заключительной, мы обсудим, как настроить модульные тесты для нашего приложения, а также как разместить его на Heroku.

Тест

“Тесты-это истории, которые мы рассказываем следующему поколению программистов над проектом.” ― Рой Ошеров

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

Todo

  1. Установка зависимостей тестов
  2. Написание тестов с использованием python unittest package
  3. Получите тестовое покрытие с помощью пакета 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

Вы должны увидеть что-то похожее на

Снимок экрана 2018-07-30 в 10.33.34 утра.png

Чтобы исключить папку tests из покрытия, давайте создадим новый конфигурационный файл в корневом каталоге проекта и назовем его .coveragerc и добавим в файл следующее

 [run]
 omit = src/tests/*

Теперь запустите тесты с помощью $ py.test --cov-config .coveragerc

Развертывание на Heroku

УРА!! Наконец, давайте развернем приложение в HEROKU . ШАГ 1 Регистрация учетной записи на Heroku

УРА!! Наконец, давайте развернем приложение в HEROKU . ШАГ 1 Регистрация учетной записи на Heroku

УРА!! Наконец, давайте развернем приложение в || HEROKU || . || ШАГ 1 || Регистрация учетной записи на Heroku

ШАГ 3 Подключите проект к вашему репозиторию github, нажав на вкладку deploy и нажав на кнопку Github connect . Примечание: Это предполагает, что у вас есть учетная запись Github и у вас есть свой код на Github.

Снимок экрана 2018-07-30 в 10.55.34 утра.png

ШАГ 4 В настоящее время, если вы установите production в качестве вашего FLASK_ENV , вы получите предупреждение, говорящее вам не использовать сервер разработки flask для производства, потому что не рекомендуется использовать сервер разработки flask в производстве.

Снимок экрана 2018-07-30 в 11.01.27 утра.png

Для производства мы будем использовать сервер 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 добавьте все необходимые переменные среды, нажав на вкладку настройки на панели мониторинга

Снимок экрана 2018-07-30 в 11.13.10 утра.png

Вы можете создать бесплатную базу данных PostgreSQL с помощью надстроек Heroku PostgreSQL или использовать ElephantSQL .

ШАГ 6 Если шаг 1-5 прошел успешно, значит, вы готовы развернуть свое приложение. На Heroku нажмите на вкладку deploy , выберите ветвь, которую вы хотите развернуть, и нажмите на кнопку “Развернуть ветвь” .

Снимок экрана 2018-07-30 в 11.20.49 утра.png

Бум!!!!!!!!!!! Поздравление ваше приложение работает в прямом эфире

Чтобы открыть его, нажмите на кнопку “Открыть приложение” в правом верхнем углу панели управления проектом на Heroku

Снимок экрана 2018-07-30 в 11.25.05 УТРА.png
Снимок экрана 2018-07-30 в 11.26.12 утра.png

Вы также можете развернуть приложение в Heroku с помощью их инструмента cli , здесь есть документация Heroku о том, как развертывать приложения python

Вывод

В этой заключительной части мы узнали следующее;

  • Напишите модульный тест Python с помощью пакета unittest
  • Разверните приложение на Heroku.

Вы можете проверить полный код на github, нажав здесь .

Ознакомьтесь с Частью 1 и Частью 2 этой серии

Например, комментируйте и делитесь этим постом, если вы узнали из него одну или две вещи.