Symfony Panther激活alice-bundle的ReloadDatabaseTrait后数据库连接超时
Symfony+PostgreSQL环境下hautelook/alice-bundle与Panther测试ReloadDatabaseTrait冲突解决方案
这个冲突的核心原因是hautelook/alice-bundle自带的ReloadDatabaseTrait默认采用事务回滚的方式重置测试数据,会长期持有独占数据库连接,而Panther测试启动的独立Web服务器进程需要新建数据库连接,被独占锁阻塞后就会触发连接超时。
可按以下优先级尝试解决方案:
- 调整alice-bundle测试环境配置,关闭事务代理,改用truncate方式重置数据
在config/packages/test/hautelook_alice.yaml中添加如下配置:hautelook_alice: db_drivers: pgsql: enable_proxy: false loaders: doctrine: purge_mode: truncate - 调整Doctrine测试环境配置,放宽连接限制、延长超时时间
在config/packages/test/doctrine.yaml中修改对应配置:doctrine: dbal: connections: default: options: PDO::ATTR_TIMEOUT: 30 pool_size: 10 - 禁用PHPUnit并行测试
运行测试时添加参数--processes 1强制单线程执行,alice-bundle默认的连接管理逻辑不支持多进程并行测试的连接复用。 - 自定义数据库重置逻辑替代原生
ReloadDatabaseTrait
如果仅需加载固定fixture,可自行实现测试trait:在测试套件启动前预加载一次fixture数据,每次单测试执行前仅truncate需要清空的业务表,完全避开alice-bundle的连接独占逻辑,同时还能提升测试执行速度。
内容的提问来源于stack exchange,提问作者Mark van Haaren
相关产品推荐
相关产品推荐

