Библиотеки

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

[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

📂 GitHub Actions

Последнее изменение: 01.10.2024 16:18