Python 在事务中运行烧瓶测试

Python 在事务中运行烧瓶测试,python,flask,flask-sqlalchemy,factory-boy,Python,Flask,Flask Sqlalchemy,Factory Boy,我用Flask SQLAlchemy设置了一个Flask应用程序,我正在用factory boy运行测试。我试图将测试封装在事务中,这样就不会用测试数据填充数据库(并且避免在测试之间删除/重新创建数据库,因为这非常昂贵) 但是,由于每次请求后都会删除db会话,因此为测试创建的对象将丢失,除非我在发出请求之前提交会话 是否有一种在测试上下文和请求上下文之间共享会话的方法 下面是一个测试示例: class TestUserViews(unittest.TestCase): def setUp

我用Flask SQLAlchemy设置了一个Flask应用程序,我正在用factory boy运行测试。我试图将测试封装在事务中,这样就不会用测试数据填充数据库(并且避免在测试之间删除/重新创建数据库,因为这非常昂贵)

但是,由于每次请求后都会删除db会话,因此为测试创建的对象将丢失,除非我在发出请求之前提交会话

是否有一种在测试上下文和请求上下文之间共享会话的方法

下面是一个测试示例:

class TestUserViews(unittest.TestCase):
    def setUp(self):
        self.client = app.test_client()

    def test_user_detail(self):
        with app.test_request_context():
            # Make sure requesting an unknown user returns a 404
            response = self.client.get('/users/123/')
            assert response.status_code == 404

            # Create a user
            user = UserFactory()
            db.session.commit()
            response = self.client.get('/users/{}/'.format(user.id))
            assert response.status_code == 200 # This works since the write was committed

    def test_user_uncommitted(self):
        with app.test_request_context():
            # Create a user
            uncommitted_user = UserFactory()
            assert uncommitted_user in db.session
            response = self.client.get('/users/{}/'.format(uncommitted_user.id))
            assert response.status_code == 200 # This doesn't work, the session wasn't reused
我构建了一个虚拟项目,以在必要时展示一个更完整的示例。你知道我错过了什么吗?谢谢