Skip to content

Latest commit

 

History

History
84 lines (61 loc) · 4.71 KB

README.md

File metadata and controls

84 lines (61 loc) · 4.71 KB

Yandex backend school test task

Тестовое задание в школу бекенд-разработку Яндекса. [UPD: В школу попал :)]

Зависимости

Для работы приложения необходима версия языка Python 3.6 и выше

Зависимости для проекта описаны в файлах Pipfile и Pipfile.lock

Используемые библиотеки:

  • aiohttp используется для построения веб-сервиса
  • pytest используется для тестирования проекта
  • pytest-cov используется для отображения покрытия тестами проекта
  • aioresponses используется для мокинга запросов, кроме запросов к веб-сервису в тестах
  • webargs используется для валидации входных данных для методов веб-сервиса
  • uvloop используется для изменения реализации стандартного event loop в asyncio
  • pyyaml используется для работы с конфигурационными файлами формата yaml
  • asyncpg используется для связи веб-сервиса с СУБД Postgres
  • numpy используется для математический операций в методах веб-сервиса

Установка

Прежде всего, должны быть установлены:

  • pipenv (pip install pipenv)
  • postgresql (apt install postgresql)

Порядок установки приложения:

  1. Склонировать репозиторий с приложением git clone https://github.com/NewGlad/yandex_test_task app
  2. Перейти в дикекторию с приложением cd app
  3. Активировать виртуальное окружение pipenv shell
  4. Установить зависимости для приложения pipenv install
  5. Создать базу данных для приложения и его тестирования su -c "./create_db.sh" postgres
  6. Убедиться, что тесты приложения завершаются успешно pytest --cov=app -vv

Добавление автоматического старта приложения в системе

Для автоматического возобновления работы приложения после перезагрузки виртуальной машины требуется добавить приложение как сервис systemd. Требуемые действия:

  1. Создать файл /lib/systemd/system/yandex_test_task.service с содержимым
[Unit]
Description=Yandex test task REST service
After=multi-user.target

[Service]
Type=simple
WorkingDirectory=ПУТЬ_К_ДИРЕКТОРИИ_С_ПРИЛОЖЕНИЕМ
ExecStart=/usr/local/bin/pipenv run python ПУТЬ_К_ДИРЕКТОРИИ_С_ПРИЛОЖЕНИЕМ/entry.py

[Install]
WantedBy=multi-user.target
  1. Обновить конфигурацию systemd: systemctl daemon-reload
  2. Подключить автозапуск приложения: systemctl enable yandex_test_task.service

Запуск тестов

Для запуска тестов необходимо выполнить команду

  pytest --cov=app -vv

в корне проекта, ключ -vv отображает более подробную информацию о запуске тестов, --cov отображает покрытие тестами кода приложения

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

tests/test_samples/build_json_for_test.py

Тестирование стиля кодирование

Для тестирование стиля кодирования используется pylint с некоторыми ограничениями отключены правила

  • C0111 Missing docstring
  • C0103 Variable name doesn't conform to snake_case naming style (бывают false-positive срабатывания на строчках типа with open(...) as f:)

Команда для запуска тестирования стиля кодирования

pylint *.py **/*.py --rcfile=standard.rc