Библиотеки
Используемые библиотеки для создания тестов:
[tool.poetry.group.dev.dependencies]
pytest
pytest-asyncio
pytest-mock
httpx
faker
alembic
coverage
docker-compose
Пример docker-compose.yml
для запуска тестов в Docker контейнерах с подключением к базе данных PostgreSQL и использованием Celery:
x-postgres-base: &postgres-base
image: postgres:16
restart: always
healthcheck:
test:
- CMD-SHELL
- pg_isready -U postgres
interval: 10s
timeout: 5s
retries: 5
x-app-base: &app-base
build:
context: ./backend
restart: always
services:
postgres-test:
profiles: ["test"]
<<: *postgres-base
env_file: "./backend/.env.test"
networks:
- test
app-test:
profiles: ["test"]
<<: *app-base
command: sh -c "coverage run --source='.' -m pytest -s --rootdir=/app/ --disable-pytest-warnings && coverage html"
build:
context: ./backend
args:
ENV: test
env_file: "./backend/.env.test"
volumes:
- ./backend/:/app/
depends_on:
celery-worker-test:
condition: service_started
postgres-test:
condition: service_healthy
networks:
- test
celery-worker-test:
profiles: ["test"]
<<: *app-base
command: celery -A src.celery_worker:celery worker --loglevel=info
build:
context: ./backend
args:
ENV: test
env_file: "./backend/.env.test"
volumes:
- ./backend/:/app/
networks:
- test
Makefile
Пример Makefile
для запуска тестов одной командой:
test:
docker compose -f docker-compose.yml run --rm app-test
docker compose -f docker-compose.yml --profile test down --volumes
.env.test
Для запуска тестов желательно создать отдельный файл .env.test
с переменными окружения, куда включить настройки для подключения к тестовой базе данных.
# Postgres
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_HOST=postgres-test
POSTGRES_PORT=5432
workflow.yml
При необходимости, можно заменить переменные в .env.test для корректного запуска тестов в GitHub Actions.
backend_tests:
name: Backend Tests
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Tests in Docker Container
run: |
make test
Последнее изменение: 01.10.2024 16:18