Laravel框架中并行测试的数据库应如何配置?
Laravel 并行测试数据库配置及命名规则解答
一、并行测试数据库配置方案
你遇到的报错本质是Laravel创建分进程测试库前,需要先连接到配置中的基础数据库,这个基础库不存在导致的连接失败。按以下步骤配置即可解决:
- 首先确保你测试环境配置的基础数据库
test_db真实存在,Laravel需要连接一个已存在的数据库来执行后续的分进程库创建、删除操作。 - 给测试使用的数据库账号授予创建、删除数据库的权限,可执行以下SQL完成授权:
GRANT ALL PRIVILEGES ON *.* TO '你的测试数据库用户名'@'localhost'; FLUSH PRIVILEGES; - 确认
phpunit.xml或phpunit.xml.dist文件中的节点配置了正确的测试数据库基础名: <env name="DB_DATABASE" value="test_db"/> - 运行并行测试时必须使用Artisan命令,不要直接调用phpunit:
只有Artisan命令会自动注入进程令牌、触发测试库自动创建迁移逻辑。php artisan test --parallel - (可选)如果需要自定义测试库的后缀规则,可以在
config/database.php对应数据库连接的配置中添加testing_db_suffix参数,替换默认的_test_后缀:'mysql' => [ // 其他原有配置 'testing_db_suffix' => '_my_custom_suffix_', ],
二、DatabaseMigrations trait 测试数据库前缀的确定规则
DatabaseMigrations trait 依赖Laravel并行测试核心逻辑生成测试数据库名,规则如下:
- 第一步读取测试环境下配置的
DB_DATABASE参数值作为基础名称,也就是你配置的test_db。 - 第二步默认追加固定后缀
_test_,再拼接当前并行进程的唯一ID(从1开始的正整数),组合成最终的测试数据库名,比如test_db_test_1、test_db_test_2。 - 如果你在对应数据库连接的配置中定义了
testing_db_suffix参数,会用你自定义的后缀替换默认的_test_规则。 - 只有使用
artisan test --parallel运行测试时才会自动注入进程ID,直接调用phpunit不会触发该逻辑,会直接使用配置的DB_DATABASE作为库名。
内容的提问来源于stack exchange,提问作者Joel Mellon
相关产品推荐
相关产品推荐

