gpt4 book ai didi

python - factoryboy pytest session 管理

转载 作者:行者123 更新时间:2023-12-03 19:37:01 28 4
gpt4 key购买 nike

我使用 pytest 作为框架来测试我的应用程序,我也想使用 pytest factoryboy。到目前为止,我的 conftest.py 看起来很像这个例子:

import factory
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from model import model

engine = create_engine('sqlite://')
session = scoped_session(sessionmaker(bind=engine))

# Create tables
model.Base.metadata.create_all(engine)

class ExampleFactory(factory.alchemy.SQLAlchemyModelFactory):

class Meta:
model = model.ExampleClass
sqlalchemy_session = session

label = factory.Sequence(lambda n: u'object_%d' % n)

我有多个这样的工厂。问题是当我以这种方式使用工厂时, session 不会在每个单元测试中被拆除。我基本上使用一个大的 session 来进行大量的单元测试。不是很理想。使用固定装置,我可以在每个单元测试中刷新一个 session 。有没有办法使用 factoryboy pytest 做到这一点?

最佳答案

刚刚尝试了一个解决方案here可以很好地完成工作而不会太复杂或太脏:将每个工厂包装到一个固定装置中,该固定装置提供其他功能范围session fixture 。

这对你来说可能是这样的:

@pytest.fixture
def session():
session = <session creation>
yield session
session.rollback()
session.close()

@pytest.fixture
def exemple_factory(session):
class ExampleFactory(factory.alchemy.SQLAlchemyModelFactory):

class Meta:
model = model.ExampleClass
sqlalchemy_session = session

label = factory.Sequence(lambda n: u'object_%d' % n)

return ExampleFactory

关于python - factoryboy pytest session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47165320/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com