我正在使用 Flask、SQLAlchemy 和 PostgreSQL 运行一套相当简单的测试用例。使用应用程序工厂,我定义了一个基本单元测试类,如下所示:
class BaseTestCase(unittest.TestCase):
def setUp(self):
self.app = create_app()
self.app.config.from_object('app.config.test')
self.api_base = '/api/v1'
self.ctx = self.app.test_request_context()
self.ctx.push()
self.client = self.app.test_client()
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all(app=self.app)
print db.engine.pool.status()
if self.ctx is not None:
self.ctx.pop()
一些单元测试一切顺利,直到:
OperationalError: (OperationalError) FATAL: remaining connection slots are reserved for non-replication superuser connections
似乎池中只有 1 个连接(每个测试的 db.engine.pool.status() 显示:池大小:5 池中的连接:1 当前溢出:-4 当前已签出连接:0),但不知何故该应用程序永远不会断开连接。显然,为每个测试用例创建了一个新的应用程序实例,根据文档,这似乎很好。如果我将应用程序创建移动到模块级别,它可以正常工作。
有谁知道为什么会这样?
谢谢