首页 > 解决方案 > RefreshDatabase 非常慢

问题描述

我正在使用 Laravel v5.6.26、PHPUnit 6.5.8 和 PHP 7.2.9。

这是我的完整测试课:

class ExampleTest extends TestCase
{

    use RefreshDatabase;

    /** @test */
    public function basicTest()
    {
        $this->assertTrue(true);
        $this->assertFalse(false);
    }
}

phpunit从宅基地打来电话。

没有use RefreshDatabase这个需要513几毫秒。用use RefreshDatabase它需要17.29 几秒钟。我目前有 72 张桌子。

在此处输入图像描述

我只想测试一个与一张表关联的模型。似乎刷新空的 72 个表需要很长时间。我试图删除除我需要的表之外的所有表,但use RefreshDatabase总是会重新迁移所有其他表。

我怎样才能加快速度?

我不认为硬件是这里的问题。那是我的 PC:Ram 32 GB,Intel® Core™ i7-7700K CPU @ 4.20GHz × 8,GeForce GTX 1070/PCIe/SSE2,我运行的是 Ubuntu 18.04.1 LTS 64 位。

标签: laravel-5phpunit

解决方案


除非您使用SQLite,否则为每个测试迁移数据库真的很慢。

您可以做的是使用在DatabaseTransactions测试开始时启动事务并在测试结束时将其回滚的特征。

您可以在文档和此博客中阅读更多相关信息。


推荐阅读