Python 使用pytest模拟SQLAlchemy数据库URI

Python 使用pytest模拟SQLAlchemy数据库URI,python,flask,sqlalchemy,pytest,Python,Flask,Sqlalchemy,Pytest,我有一个通过应用程序工厂方法创建的Flask应用程序: appname/\uuuuuu init\uuuuuuuuuuuuuuuuuuupy 从烧瓶导入烧瓶 def create_app(): app=烧瓶(名称) 使用app.app_context(): 从appname.db导入db_会话 @app.teardown_appcontext def关机会话(异常=无): db_session.remove() 返回应用程序 如果名称=“\uuuuu main\uuuuuuuu”: app=cr

我有一个通过应用程序工厂方法创建的Flask应用程序:

appname/\uuuuuu init\uuuuuuuuuuuuuuuuuuupy

从烧瓶导入烧瓶
def create_app():
app=烧瓶(名称)
使用app.app_context():
从appname.db导入db_会话
@app.teardown_appcontext
def关机会话(异常=无):
db_session.remove()
返回应用程序
如果名称=“\uuuuu main\uuuuuuuu”:
app=create_app()
应用程序运行(端口=5050)
我的数据库的URI存储在环境变量中,并使用标准SQLAlchemy样板创建:

appname/db.py

从sqlalchemy导入创建引擎
从sqlalchemy.orm导入作用域的_会话,sessionmaker
从sqlalchemy.ext.declarative导入声明性基础
导入操作系统
engine=create\u engine(os.environ.get('DATABASE\u URI'),echo=True)
db_session=scoped_session(sessionmaker(autocommit=False,autoflush=False,bind=engine))
Base=声明性_Base()
Base.query=db\u session.query\u属性()
def init_db():
Base.metadata.create_all(bind=engine)
这个设置对于开发来说很好,但是我不知道如何为pytest设置
数据库URI
变量。现在,我必须将其与
pytest
命令一起指定:

数据库ostgresql://me@localhost/appname“pipenv”运行pytest
虽然这是可行的,但我必须想象有更好的方法来预定义测试套件的环境。设置这些环境变量的最佳做法是什么?

这似乎可行:

test/conftest.py

导入pytest
从_pytest导入monkeypatch
从appname导入创建应用程序
@pytest.fixture
def client():
mp=monkeypatch.monkeypatch()
mp.setenv('DATABASE_URI','postgresql://me@localhost/appname')
app=create_app()
client=app.test\u client()
收益客户
这似乎有效:

test/conftest.py

导入pytest
从_pytest导入monkeypatch
从appname导入创建应用程序
@pytest.fixture
def client():
mp=monkeypatch.monkeypatch()
mp.setenv('DATABASE_URI','postgresql://me@localhost/appname')
app=create_app()
client=app.test\u client()
收益客户
Checkout pytest Checkout pytest