对于每个单元测试,我想使用
pytest.fixture
和 scoped_session
回滚已经提交的语句。
engine = create_engine(DATABASE_URL)
init_database
创建数据库
sqlalchemy
import pytest
from sqlalchemy_utils import drop_database
from database_test_setup.manage import Session
@pytest.fixture(scope="session")
def db_engine():
from settings import settings
from database import engine, init_database, DATABASE_URL
init_database(user=settings.DB_USER, pwd=settings.DB_PWD, host=settings.DB_HOST, port=settings.DB_PORT,
db_name=settings.DB_NAME)
Session.configure(bind=engine)
yield engine
drop_database(DATABASE_URL)
engine.dispose()
@pytest.fixture(scope="function", autouse=True)
def db_session(db_engine):
session_ = Session()
session_.begin_nested()
yield session_
session_.rollback()
Order
from factory import Sequence
from factory.alchemy import SQLAlchemyModelFactory
from database_test_setup.manage import Session
from order.models import Order
class BaseFactory(SQLAlchemyModelFactory):
"""Base Factory."""
class Meta:
"""Factory configuration."""
abstract = True
sqlalchemy_session = Session
sqlalchemy_session_persistence = "flush"
class OrderFactory(BaseFactory):
id = Sequence(lambda n: n)
quality = "X"
start_date = "2021-09-15T17:53:00"
end_date = "2021-09-15T15:53:00"
class Meta:
model = Order
from sqlalchemy.orm import scoped_session, sessionmaker
Session = scoped_session(sessionmaker())
db_session
的影响。 如果我在我的
session_.rollback
中设置
sqlalchemy_session_persistence = "commit"
,情况也是如此。
我知道这个问题之前已经被回答过,但建议的解决方案似乎对我不起作用,即使我使用相同的设置,除了使用单独的模块来创建
SQLAlchemyModelFactory
而不是要使用的固定装置另外在我的scoped_session
。我也有同样的问题。看起来,