我使用python 3.3,pyramid,sqlalchemy,psygopg2。我正在使用postgres db进行单元测试。我有101个单元测试设置为鼻子运行。在测试101获得:Python鼻子单元测试已经产生了太多的客户端
nose.proxy.OperationalError: (OperationalError) FATAL: sorry, too many clients already
它从回溯似乎异常在
......./venv/lib/python3.3/site-packages/SQLAlchemy-0.8.2-py3.3.egg/sqlalchemy/pool.py", line 368, in __connect
connection = self.__pool._creator()
被抛出也许拆解()每次测试后没有运行? 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()
......
我通过将数据库引入TestApp和TestUser类......我认为这是问题的根源,但我不确定。
任何帮助,非常感谢。谢谢。
这种类型的推测性调试对于stackoverflow的QA格式来说是很糟糕的。看起来好像你没有正确地关闭你的连接。 –
@MichaelMerickel:我对“投机调试”表示抱歉。我不太确定如何说出我遇到的问题/问题。关于正确关闭连接...不应该'tearDown()'函数正确关闭连接? – smoothgrips
问题在于你如何解决SO上的问题,这也让任何人都难以回答。我建议将其重新编写为“这里是相关的代码,我所做的和这里的错误”。您没有向我们展示您的任何代码,因此我们无法提供帮助。 'tearDown'不会做任何你没有放在那里的东西,所以我现在怎么说它正在做什么? –