我正在使用 python 3.3、金字塔、sqlalchemy、psygopg2。我正在使用测试 postgres db 进行单元测试。我为鼻子运行设置了 101 个单元测试。在测试 101 中,我得到:
nose.proxy.OperationalError: (OperationalError) FATAL: 抱歉,客户已经太多了
从回溯看来,异常被抛出
......./venv/lib/python3.3/site-packages/SQLAlchemy-0.8.2-py3.3.egg/sqlalchemy/pool.py”,第 368 行,在 __connect
connection = self.__pool._creator()
每次测试后可能没有运行 tearDown() ?Postgresql的连接池限制不是一次100吗?
这是我的 BaseTest 课程:
class BaseTest(object):
def setup(self):
self.request = testing.DummyRequest()
self.config = testing.setUp(request=self.request)
self.config.scan('../models')
sqlalchemy_url = 'postgresql://<user>:<pass>@localhost:5432/<db>'
engine = create_engine(sqlalchemy_url)
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
DBSession.configure(bind=engine)
Base.metadata.bind = engine
Base.metadata.create_all(engine)
self.dbsession = DBSession
def tearDown(self):
testing.teardown()
我的测试类继承自 BaseTest:
class TestUser(BaseTest):
def __init__(self, dbsession = None):
if dbsession:
self.dbsession = dbsession
def test_create_user(self):
......
......
其中一个测试类测试多对多关系,因此在该测试类中,我首先创建满足外键关系所需的记录:
from tests.test_user import TestUser
from tests.test_app import TestApp
class TestAppUser(BaseTest):
def __init__(self, dbsession = None):
if dbsession:
self.dbsession = dbsession
def create_app_user(self):
test_app = TestApp(self.dbsession)
test_user = TestUser(self.dbsession)
test_app.request = testing.DummyRequest()
test_user.request = testing.DummyRequest()
app = test_app.create_app()
user = test_user.create_user()
......
我将 dbsession 传递给 TestApp 和 TestUser 类...我认为这是问题的根源,但我不确定。
任何帮助是极大的赞赏。谢谢。