我剛剛遇到一個問題,在我的燒瓶應用上運行unittests後,我有大約100個單元測試。所有的單元測試會通過,但是當他們立刻將出現以下錯誤失敗運行所有:燒瓶unittest和sqlalchemy使用所有連接
OperationalError: (OperationalError) FATAL: remaining connection slots are reserved for non-replication superuser connections
一切都在本地機器上的VirtualBox /流浪者/ ubuntu12.04實例中運行。我的postgres max_connections設置爲100,所以我假設連接不關閉,運行100次測試後,我用完了所有可用的連接。
此人Flask unit tests with SQLAlchemy and PostgreSQL exhausts db connections看起來像他們有相同的確切問題。 Mike/Zzzeek(sqlalchemy dev)甚至迴應說,可能在create_app()中發生了一些事情,所以我在下面也包含了這一點。
這是否意味着我沒有關閉我的連接?所有這些錯誤都是由我的unittest的setUp()方法中的db.create_all()
觸發的。
#test.py
class TestCase(DataMixin, Base):
"""Base test class"""
def create_app(self):
return create_app(TestConfig())
def setUp(self):
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all()
#app.py
def create_app(config=None):
app = Flask(__name__)
# Config
app.config.from_object(BaseConfig())
if config is not None:
app.config.from_object(config)
# Extensions
db.init_app(app)
mail.init_app(app)
bcrypt.init_app(app)
# Blueprints
app.register_blueprint(core_blueprint, url_prefix='/')
app.register_blueprint(accounts_blueprint, url_prefix='/account')
app.register_blueprint(admin_blueprint, url_prefix='/admin')
app.register_blueprint(cart_blueprint, url_prefix='/cart')
# Login Manager
login_manager.setup_app(app, add_context_processor=True)
login_manager.login_view = "accounts.login"
login_manager.user_callback = load_user
# Templates
app.jinja_env.globals['is_admin'] = is_admin
app.jinja_env.globals['is_staff'] = is_staff
@app.context_processor
def inject_cart():
cart = count = None
if current_user.is_authenticated():
cart = current_user.get_cart()
return dict(cart=cart)
# Error Handling
@app.errorhandler(404)
def page_not_found(error):
return render_template('404.html'), 404
return app
的可能的複製[燒瓶單元測試的SQLAlchemy和PostgreSQL排出分貝連接(http://stackoverflow.com/questions/16117094/flask-unit-tests-with-sqlalchemy-and- postgresql-exhausts-db-connections) –