mnabialek / laravel-quick-migrations
更快地运行 Laravel 测试
Requires
- laravel/framework: ^5.6|6.*|7.*|8.*|9.*|10.*|11.*
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.52.1
- mockery/mockery: ^1.0
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^11.0
README
此包旨在 提高需要使用迁移的 Laravel 测试速度。如果你使用 Laravel 的 DatabaseMigrations
特性(特别是在浏览器测试中),你可能会对使用此包来节省大量时间感兴趣。
请注意,此包不会提高你应用到数据库中的常规迁移速度 - 它仅应在你的应用程序中有测试且你希望提高其速度时使用。
安装
-
在控制台中运行
composer require mnabialek/laravel-quick-migrations --dev
来安装此模块(注意
--dev
标志 - 推荐仅将此包用于开发)。 -
在控制台中运行
php artisan vendor:publish
并选择匹配
"Mnabialek\LaravelQuickMigrations\Providers\ServiceProvider"
提供者的数字。默认情况下,您不应编辑已发布的文件,因为所有设置都是默认从
.env
文件加载的。根据您的需求,您现在可以将以下内容添加到
.env
(或用于测试的其他环境文件)QUICK_MIGRATIONS_ENABLED=true QUICK_MIGRATIONS_DUMP_FILE="/custom/directory/custom_filename.sql"
并使用您自己的值进行自定义。请记住,如果您设置了
QUICK_MIGRATIONS_ENABLED
,您将自动使用默认的 Laravel 迁移。 -
更新所有使用
DatabaseMigrations
特性的测试,使用QuickDatabaseMigrations
。您还应在这些文件中添加导入行use Mnabialek\LaravelQuickMigrations\QuickDatabaseMigrations;
-
在控制台中运行
php artisan migrate:fresh --database=selected_sql_connection
到空数据库。当然,作为
selected_sql_connection
,您应使用您的应用程序中实际使用的连接(通常是mysql
或mysql_testing
)。现在您可以手动将此数据库的结构导出到单个文件中(或使用
mysqldump
),并将文件保存为storage/tests/dump.sql
(如果您在 env 文件中设置了自定义的QUICK_MIGRATIONS_DUMP_FILE
值,则当然应将其放置在您自定义的位置)。 -
运行您的测试并享受吧!
基准测试
我的测试套件(真实应用程序)在 Docker 容器中运行了 53 个 Laravel Dusk 测试,有 890 个断言。数据库有 93 个迁移。
如您在真实应用程序场景中看到的那样,差异非常明显。使用修改后的特性使得测试运行速度几乎快了 3 倍,与原始测试相比。
当然,在您的情况下,结果可能会有所不同。这很大程度上取决于您应用程序中的迁移 - 默认情况下它们需要多长时间。例如,假设您有 100 个使用迁移的测试,应用迁移需要 10 秒(每个测试),而使用您的导出只需要 6 秒(每个测试),那么您将节省 100 * 4 秒,每次运行测试可节省 6.66 分钟。如您在我的场景中所见,差异要大得多。
缺点
- 您需要手动更新导出,每次添加/更改迁移时。但是,假设您正在使用测试,这可能非常值得花不到 1 分钟的时间来导出最新的迁移以节省数百分钟。
- 在您的数据库中运行测试后,您将保留测试期间创建的数据。从我的观点来看,如果您仅使用数据库进行测试,您可能不必过于担心这一点。但当然,您可以创建一个命令,在测试完成后始终从数据库中删除所有内容,如果您真的需要的话。
作者
此包的作者是 Marcin Nabiałek 以及 贡献者
变更记录
所有更改均列在 变更日志 中
许可
此包受 MIT 许可证 授权。