我使用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'不會做任何你沒有放在那裏的東西,所以我現在怎麼說它正在做什麼? –