Найти в Дзене
Computer Pro

FasAPI + Postgres + Alembic + линтеры и тесты. GitHub actions (CI). Часть 3

Данная часть публикации будет посвящена асинхронным pytest. Я очень долго не мог настроить фикстуры в conftest.py. Дисклеймер. Это не руководство к действию, не список рецептов, а что-то типа лайв-коддинга. Тут могут быть ошибки! Я просто пытаюсь упорядочить свои действия и размышления. Так что - "ПОНЯТЬ И ПРОСТИТЬ" Итак, я уже было совсем отчаялся в написании тестов на свое приложение, о котором идет речь в предыдущих двух частях данной публикации: Все умные люди говорят - читай документацию. Но я почему-то не вижу как приспособить документацию под своё приложение. Итак вот какой у меня получился conftest.py: Некие тестовые данные, для вставки в таблицы СУБД Postgres: Вставка этих данных и объявление клиента веб-клиента, эти фикстуры будут использоваться в дальнейших тестах: Теперь сами тесты всех моих ранее созданных эндпойнтов: По большому счету этих тестов можно было написать и больше, но ведь задание состоит не в том чтобы писать тесты а в том чтобы всё это приложение могло бы

Данная часть публикации будет посвящена асинхронным pytest. Я очень долго не мог настроить фикстуры в conftest.py.

Дисклеймер. Это не руководство к действию, не список рецептов, а что-то типа лайв-коддинга. Тут могут быть ошибки! Я просто пытаюсь упорядочить свои действия и размышления.
Так что - "ПОНЯТЬ И ПРОСТИТЬ"
Фоточка для карточки статьи. Белое море. 09.11.24 фото моё.
Фоточка для карточки статьи. Белое море. 09.11.24 фото моё.

Итак, я уже было совсем отчаялся в написании тестов на свое приложение, о котором идет речь в предыдущих двух частях данной публикации:

Все умные люди говорят - читай документацию. Но я почему-то не вижу как приспособить документацию под своё приложение. Итак вот какой у меня получился conftest.py:

-2

Некие тестовые данные, для вставки в таблицы СУБД Postgres:

-3

Вставка этих данных и объявление клиента веб-клиента, эти фикстуры будут использоваться в дальнейших тестах:

-4

Теперь сами тесты всех моих ранее созданных эндпойнтов:

-5
-6

По большому счету этих тестов можно было написать и больше, но ведь задание состоит не в том чтобы писать тесты а в том чтобы всё это приложение могло бы само себя протестировать и пролинтеровать прямо на github'e. Что и предполагает в философии CI (а еще и CD будет чуть погодя, но это уже тема другой домашней работы).

-7

И вот теперь все тесты (python -m pytest -v -s) у меня шикарно проходят, но...

подробный вывод при тестировании
подробный вывод при тестировании
сокращенный вывод при тестировании
сокращенный вывод при тестировании

Как всегда есть маленькое, но очень существенное НО!!! Директория с тестами находится в корневой директории приложения ( src/ ), надо тесты и настроеки pytest, которые находятся в pyproject.toml, перенести в корень проекта. Да и тестирование может запускаться лишь находясь в директории src.

Перенес директорию с тестами и остальными нужными файлами в корень проекта:

-10

Пробуем тестировать и как ожидалось - всё поломалось...

-11

Ну что ж, будем чинить, искать причину, почему всё ломается...

Иду по первой ссылке на __init__.py и тут всё красным-красно:

-12

Попробую исправить...

-13

Всё равно, та же ошибка:

-14

Подумал - а я ж в директории tests объявлял ... попробую закомментировать

-15

И уже другая ошибка:

-16
-17

Ну да, всё опять красным-красно, пробую убрать расцветку... Теперь другой файл ругается:

-18

А проверю ка я все файлы моего проекта...

Вроде бы все файлы поочередно проверил, везде где надо пути исправил а ошибка как была так и остаётся...

-19

Кажется я понял... всё дело в файле .env, в котором записан URL до основной базы данных. Несмотря на то что у тестов есть URL до своей базы данных (тестовой) но ему, зачем-то нужен URL до рабочей БД...

И все мои танцы с бубном по добавлению или удалению тех или иных настроек pytest не принесли никакого результата:

-20

Я перенес файл .env из директории src в корень проекта и тесты заработали!!! Разве что не работает конструкция pytest без указания каких либо параметров. Но вот эти две конструкции работают на ура, на сервере я буду использовать именно эту конструкцию!

Хотел было уже запушить на github и тут до меня доходит: Я еще не понял как будет происходить:

  1. собирание docker compose up -d
  2. создание базы данных test и создание пользователя test

И только после этого можно будет говорить о том чтобы запустить мои тесты на гитхабе.

Утро вечера мудренее. Завтра я постараюсь выяснить эту информацию.