【发布时间】:2018-04-01 04:49:19
【问题描述】:
我在conftest.py 中使用db_session 夹具
@pytest.fixture(scope='function')
def db_session(db, request):
"""Creates a new database session for a test."""
engine = create_engine(DefaultConfig.SQLALCHEMY_DATABASE_URI, connect_args={"options": "-c timezone=utc"})
DbSession = sessionmaker(bind=engine)
session = DbSession()
connection = engine.connect()
transaction = connection.begin()
options = dict(bind=connection, binds={})
session = db.create_scoped_session(options=options)
db.session = session
yield session
transaction.rollback()
connection.close()
session.remove()
在我的测试脚本test_project.py
import pytest
from package.model import Project
def test_create_project(db_session):
project = Project(project_name="Test_Project")
db_session.add(project)
db_session.commit()
assert project.project_id > 0
assert project.project_id == 65 # supposed to be the next auto-increment value
assert db_session.query(Project).filter_by(project_name="Test_Project").first() != None
每次我运行测试时,自动递增的主键都会增加。即使我使用db_session 夹具,主键序列也不会回滚。
我也尝试在测试之间调用db_session.begin_nested() 和db_session.rollback(),但主键仍然递增
def test_create_project(db_session):
db_session.begin_nested()
project = Project(project_name="Test_Project")
db_session.add(project)
db_session.commit()
assert project.project_id > 0
assert project.project_id == 65
assert db_session.query(Project).filter_by(project_name="Test_Project").first() != None
db_session.rollback()
如何在测试后恢复自增值?
环境
- 数据库:PostgreSQL 9.6.5
- 烧瓶 0.12.2
- SQLAlchemy 1.1.12
【问题讨论】:
标签: python postgresql sqlalchemy pytest