mnabialek/laravel-quick-migrations

更快地运行 Laravel 测试

v1.2.4 2024-03-26 06:21 UTC

This package is auto-updated.

Last update: 2024-08-26 07:10:59 UTC


README

Build Status Coverage Status Scrutinizer Code Quality Packagist

此包旨在 提高需要使用迁移的 Laravel 测试速度。如果你使用 Laravel 的 DatabaseMigrations 特性(特别是在浏览器测试中),你可能会对使用此包来节省大量时间感兴趣。

请注意,此包不会提高你应用到数据库中的常规迁移速度 - 它仅应在你的应用程序中有测试且你希望提高其速度时使用。

安装

  1. 在控制台中运行

    composer require mnabialek/laravel-quick-migrations --dev

    来安装此模块(注意 --dev 标志 - 推荐仅将此包用于开发)。

  2. 在控制台中运行

    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 迁移。

  3. 更新所有使用 DatabaseMigrations 特性的测试,使用 QuickDatabaseMigrations。您还应在这些文件中添加导入行

    use Mnabialek\LaravelQuickMigrations\QuickDatabaseMigrations;
  4. 在控制台中运行

    php artisan migrate:fresh --database=selected_sql_connection

    到空数据库。当然,作为 selected_sql_connection,您应使用您的应用程序中实际使用的连接(通常是 mysqlmysql_testing)。

    现在您可以手动将此数据库的结构导出到单个文件中(或使用 mysqldump),并将文件保存为 storage/tests/dump.sql(如果您在 env 文件中设置了自定义的 QUICK_MIGRATIONS_DUMP_FILE 值,则当然应将其放置在您自定义的位置)。

  5. 运行您的测试并享受吧!

基准测试

我的测试套件(真实应用程序)在 Docker 容器中运行了 53 个 Laravel Dusk 测试,有 890 个断言。数据库有 93 个迁移。

如您在真实应用程序场景中看到的那样,差异非常明显。使用修改后的特性使得测试运行速度几乎快了 3 倍,与原始测试相比。

当然,在您的情况下,结果可能会有所不同。这很大程度上取决于您应用程序中的迁移 - 默认情况下它们需要多长时间。例如,假设您有 100 个使用迁移的测试,应用迁移需要 10 秒(每个测试),而使用您的导出只需要 6 秒(每个测试),那么您将节省 100 * 4 秒,每次运行测试可节省 6.66 分钟。如您在我的场景中所见,差异要大得多。

缺点

  • 您需要手动更新导出,每次添加/更改迁移时。但是,假设您正在使用测试,这可能非常值得花不到 1 分钟的时间来导出最新的迁移以节省数百分钟。
  • 在您的数据库中运行测试后,您将保留测试期间创建的数据。从我的观点来看,如果您仅使用数据库进行测试,您可能不必过于担心这一点。但当然,您可以创建一个命令,在测试完成后始终从数据库中删除所有内容,如果您真的需要的话。

作者

此包的作者是 Marcin Nabiałek 以及 贡献者

变更记录

所有更改均列在 变更日志

许可

此包受 MIT 许可证 授权。