Я пишу приложение с помощью 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