postgresql - 在 dockerized flask + postgres 应用程序中管理 pytest 测试的任何推荐方法?
问题描述
我正在用 Docker、Flask 和 Postgres 编写一个应用程序。我目前有一个用于开发的 docker-compose.yml 文件和一个用于测试的文件。主要目标是使用不同的数据库。
我还可以让一个 docker compose 文件包含 2 个数据库,一个服务“后端”连接到一个数据库,一个“测试”连接到另一个数据库......
有没有推荐的方法来管理 dockerized flask + postgres 应用程序中的 pytest 测试?
我的应用工厂
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
基础测试模块
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
引导开发文件
#!/bin/sh
flask db init
flask db migrate
flask db upgrade
exec flask run --host=0.0.0.0
引导测试.sh
#!/bin/sh
flask db init
flask db migrate
flask db upgrade
exec pytest
解决方案
推荐阅读
- javascript - 在另一个二维数组中复制洗牌数组的问题
- clojure - 非常简单的练习程序不会编译
- python - 网页抓取 - 无输出
- ms-access - On Got Focus vbNo 撤消选项按钮适用于点击,但不是箭头
- sql - QRY 对个人结果非常有效,但对大组结果提供了糟糕的数据
- google-cloud-sql - 关于 Google Cloud SQL 性能
- swift - 如何使 SwiftUI 列表自动滚动?
- javascript - 从 URL 获取图像并通过 NodeJS 中的 POST 上传到另一个
- c# - 刷新部分视图并构建查询字符串而不刷新 Asp.Net MVC 5 中的所有页面
- jquery - 使用 ID 变量访问 jQuery 中的输入元素