Я пишу функциональные тесты с помощью pytest. Я намерен откатывать транзакции после каждого теста, чтобы работать с одними и теми же данными в каждом тесте. Вот мой код:
Но это не работает. Некоторые тесты завершаются неудачей, потому что что-то перед ними было изменено (и не было откатано). И некоторые тесты завершаются с этими ошибками:
FAILED ... - sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
FAILED ... - sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (r...
FAILED ... - sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (raised...
FAILED ... - sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (raised as a ...
FAILED ... - AssertionError: assert [{'id': 1, 'l...'Test'}, ...}] == [{'id': 1, 'l...'Test'}, ...}]
FAILED ... - AssertionError: assert 'updated-diagram' == 'test_1'
ERROR ... - sqlalchemy.exc.InvalidRequestError: No transaction is begun.
Мои комментарии:
... рассмотрите возможность использования блока session.no_autoflush... - в параметрах сеанса есть autoflush=False
... Чтобы начать новую транзакцию с этим сеансом, сначала выполните Session.rollback()... - у меня это также есть при демонтаже
AssertionError - оба из них из-за неправильного отката
sqlalchemy.exc.InvalidRequestError: Транзакция не начата. - понятия не имею, что и почему здесь произошло
Я пишу функциональные тесты с помощью pytest. Я намерен откатывать транзакции после каждого теста, чтобы работать с одними и теми же данными в каждом тесте. Вот мой код: [code]@pytest.fixture(scope='function', autouse=True) def session(db, request): connection = db.engine.connect() transaction = connection.begin()
yield db.session [/code] Но это не работает. Некоторые тесты завершаются неудачей, потому что что-то перед ними было изменено (и не было откатано). И некоторые тесты завершаются с этими ошибками: [code]FAILED ... - sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely) FAILED ... - sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (r... FAILED ... - sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (raised... FAILED ... - sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (raised as a ... FAILED ... - AssertionError: assert [{'id': 1, 'l...'Test'}, ...}] == [{'id': 1, 'l...'Test'}, ...}] FAILED ... - AssertionError: assert 'updated-diagram' == 'test_1' ERROR ... - sqlalchemy.exc.InvalidRequestError: No transaction is begun. [/code] Мои комментарии: [list] [*]... рассмотрите возможность использования блока session.no_autoflush... - в параметрах сеанса есть autoflush=False [*]... Чтобы начать новую транзакцию с этим сеансом, сначала выполните Session.rollback()... - у меня это также есть при демонтаже [*]AssertionError - оба из них из-за неправильного отката [*]sqlalchemy.exc.InvalidRequestError: Транзакция не начата. - понятия не имею, что и почему здесь произошло [/list]