Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка веб-приложений с использованием фреймворка Flask. В 2 частях. Ч.2. Учебное пособие-1.pdf
Скачиваний:
2
Добавлен:
06.09.2026
Размер:
421 Кб
Скачать
☆

username = request.form['username']

email = request.form['email']

db.session.add(User(username=username, email=email))

db.session.commit()

users = User.query.all()

return render_template('index.html', users=users)

1.8.СТРУКТУРА ПРОЕКТА

Вконце части первой структура проекта должна выглядеть так:

├── docker-compose-dev.yml

├── docker-compose-prod.yml

└── services ├── nginx

│├── Dockerfile

│└── flask.conf └── users

├── Dockerfile-dev

├── Dockerfile-prod

├── entrypoint-prod.sh

├── entrypoint.sh

├── manage.py

├── project

│├── __init__.py

│├── api

││ ├── __init__.py

││ ├── models.py

││ ├── templates

│ │ │ └── index.html

││ └── users.py

│├── config.py

│├── db

││ ├── Dockerfile

││ └── create.sql

│└── tests

│├── __init__.py

│├── base.py

│├── test_config.py

│└── test_users.py

└── requirements.txt

32

2. ОТЛАДКА ПРИЛОЖЕНИЯ

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

2.1.ПОКРЫТИЕ ТЕСТАМИ И КАЧЕСТВО КОДА

Вэтом пункте мы добавим в проект покрытие кода, используя скрипт

Coverage.py.

Начнём с установки testdriven-dev в качестве активной среды для Docker

Machine:

$ docker-machine env testdriven-dev

$ eval $(docker-machine env testdriven-dev)

Обновим контейнеры:

$ docker-compose -f docker-compose-dev.yml up -d

Убедимся, что приложение работает в браузере, а затем запустим тесты:

$ docker-compose -f docker-compose-dev.yml \ run users python manage.py test

2.1.1. ПОКРЫТИЕ КОДА ТЕСТАМИ

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

Добавим файл Coverage.py в файл requirements.txt в каталоге users:

coverage==4.4.2

Далее нужно настроить отчёты о покрытии тестами в файле manage.py. Начнём с добавления конфигурации сразу после импорта:

COV = coverage.coverage( branch=True,

include='project/*',

omit=[

'project/tests/*',

'project/config.py',

]

)

COV.start()

Затем добавим новую команду CLI:

@cli.command()

def cov():

""" Запускает модульные тесты с покрытием."""

tests = unittest.TestLoader().discover('project/tests')

33

result = unittest.TextTestRunner(verbosity=2).run(tests) if result.wasSuccessful():

COV.stop()

COV.save() print('Coverage Summary:') COV.report() COV.html_report() COV.erase()

return 0 return 1

Не забывайте про обновление импорта:

import coverage

Обновим контейнеры:

$ docker-compose -f docker-compose-dev.yml up -d --build

Запустим тесты с учётом покрытия:

$ docker-compose -f docker-compose-dev.yml \ run users python manage.py cov

Вывод на экране должен быть следующим:

Coverage Summary:

Name Stmts Miss Branch BrPart Cover

-------------------------------------------------------------

project/__init__.py

13

5

0

0

62%

project/api/models.py

12

9

0

0

25%

project/api/users.py

48

10

10

0

83%

-------------------------------------------------------------

TOTAL

73 24

10

0

71%

HTML-версию можно просмотреть во вновь созданном каталоге htmlcov. Теперь можно быстро определить, какие части кода тестируются, а какие нет.

Следует добавить этот каталог в файлы .gitignore и .dockerignore.

2.1.2. КАЧЕСТВО КОДА

Линтинг – это процесс проверки кода на стилистические или программные ошибки. Хотя существует ряд широко используемых линтеров для Python, будем использовать Flake8, поскольку он объединяет два других популярных линтера – pep8 и pyflakes.

Добавим flake8 в файл requirements.txt в директории users:

flake8==3.5.0

Обновим контейнеры:

$ docker-compose -f docker-compose-dev.yml up -d --build

Запускаем flake8:

$ docker-compose -f docker-compose-dev.yml \ run users flake8 project

34

Были обнаружены какие-либо ошибки?

project/__init__.py:6:1: F401 'flask.jsonify' imported but unused

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

2.2. НЕПРЕРЫВНАЯ ИНТЕГРАЦИЯ

Теперь займёмся добавлением в проект непрерывной интеграции

(Сontinuous Integration, CI) с помощью сервиса Travis CI.

Выполним шаги 1 и 2 руководства по началу работы с Travis CI, чтобы включить Travis в проект. Чтобы запустить сборку, добавим файл .travis.yml в корень проекта:

sudo: required

services: - docker

env:

DOCKER_COMPOSE_VERSION: 1.18.0

before_install:

- sudo rm /usr/local/bin/docker-compose

-curl -L

https://github.com/docker/compose/releases/download/${DOCKER_COMPO SE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose

-chmod +x docker-compose

-sudo mv docker-compose /usr/local/bin

before_script:

- docker-compose -f docker-compose-dev.yml up --build -d

script:

-docker-compose -f docker-compose-dev.yml run users python manage.py test

-docker-compose -f docker-compose-dev.yml run users flake8 project

after_script:

- docker-compose -f docker-compose-dev.yml down

Зафиксируйте изменения, а затем отправьте их на GitHub. Эти действия должны вызвать выполнение новой сборки, которая должна завершиться успешно. После этого добавим файл README.md в корень проекта, добавив значок статуса Travis:

35

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]