Есть какой-нибудь рекомендуемый способ управления тестами pytest в докерской фляге + приложение postgres? - PullRequest
0 голосов
/ 29 января 2019

Я пишу приложение с помощью Docker, Flask и Postgres.В настоящее время у меня есть один файл docker-compose.yml для разработки и один для тестирования.Основная цель - использовать разные базы данных.

У меня также может быть один файл для создания докера с двумя базами данных, одна служебная программа "backend", подключенная к одной базе данных, и одна "test", подключенная к другой базе данных ...

Есть ли какой-нибудь рекомендуемый способ управления тестами pytest в приложении dockerized флакон + postgres?

my factory factory

def create_app(testing=False):
    app = Flask(__name__)
    app.config.from_pyfile("config.py")

    if testing:
        app.config["TESTING"] = True

    initialize_extensions(app)
    app.register_blueprint(phaunos_api)
    register_cli(app)
    return app

basicтестовый модуль

import pytest
from phaunos import create_app
from phaunos.models import db
from phaunos.phaunos.models import TagType


@pytest.fixture(scope='module')
def test_app():
    app = create_app(testing=True)
    with app.app_context():
        yield app


@pytest.fixture(scope='module')
def test_db(test_app):
    db.drop_all()
    db.create_all()
    yield db
    db.session.remove()
    db.drop_all()


def test_add_tagtype(test_db):
    tt = TagType()
    tt.name = "tagtype1"
    db.session.add(tt)
    db.session.commit()
    assert len(TagType.query.all()) == 1

docker-compose.dev.yml

version: '3'
services:

  db:
    image: postgres
    env_file:
      - .db.dev.env
    volumes:
      - ./data-dev:/var/lib/postgresql/data
    networks:
      - db_nw
  backend:
    env_file:
      - .backend.dev.env
      - .db.dev.env
    build:
      context: backend
      dockerfile: Dockerfile
    volumes:
      - ./backend:/app
    depends_on:
      - db
    networks:
      - db_nw
    ports:
      - "5000:5000"
    entrypoint:
      - backend/boot.dev.sh

networks:
  db_nw:
    driver: bridge

docker-compose.test.yml

version: '3'
services:

  db:
    image: postgres
    env_file:
      - .db.test.env
    networks:
      - db_nw
  backend:
    env_file:
      - .backend.test.env
      - .db.test.env
    build:
      context: backend
      dockerfile: Dockerfile
    depends_on:
      - db
    networks:
      - db_nw
    ports:
      - "5000:5000"
    entrypoint:
      - ./boot.test.sh

networks:
  db_nw:
    driver: bridge

db.dev.env

POSTGRES_USER=some_user
POSTGRES_PASSWORD=some_pwd
POSTGRES_DB=db_dev
POSTGRES_SERVER=db

db.test.env

POSTGRES_USER=some_user
POSTGRES_PASSWORD=some_pwd
POSTGRES_DB=db_test
POSTGRES_SERVER=db

boot.dev.sh

#!/bin/sh
flask db init
flask db migrate
flask db upgrade
exec flask run --host=0.0.0.0

boot.test.sh

#!/bin/sh
flask db init
flask db migrate
flask db upgrade
exec pytest
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...