Laravel Dusk测试运行非常缓慢

时间:2018-07-20 05:38:46

标签: laravel testing laravel-5 laravel-5.6 laravel-dusk

即使在运行如下所示的简单测试时,也是如此:

public function test_simple()
{
    $user = factory(User::class)->create();

    $this->browse(function ($browser) use($user){
        $browser->visit('/login')
                ->type('email', $user->email)
                ->type('password', 'secret')
                ->press('Login')
                ->assertPathIs('/home');
    });

}

仅此一项测试,Laravel Dusk的运行速度非常慢,只有14-16秒。

我如何加快速度?因为如果我要像进行100次测试那样运行,那将花费非常长的时间。

任何解决方案?

2 个答案:

答案 0 :(得分:3)

对我来说,需要花费大量时间的事情是在每个测试之前进行迁移,而在migrate:rollback特性进行的每个测试之后进行迁移。这是我在项目中解决问题的方法:

  1. 从测试案例中删除DatabaseMigrations特性的使用。
  2. 在开始测试之前,请致电DatabaseMigrations。我在运行测试的bash文件中执行此操作。
  3. 在setUp方法的基础./artisan migrate:fresh --seed --env=dusk类中,调用命令以删除表中的所有数据。这是我为MySQL(在Artisan命令内部)所做的事情:

DuskTestCase

  1. 执行上述命令后,运行 $command = 'mysql -u test_database -Nse "show tables" test_database | while read table; do mysql -u test_database -e "SET FOREIGN_KEY_CHECKS = 0; delete from $table" test_database; done;'; $result = exec($command);

现在测试运行速度快得多。

答案 1 :(得分:2)

解决问题可能取决于很多事情(您的开发环境设置,数据库或其他一些问题)。

就我而言,迁移需要花费大量时间进行每次测试。当您使用Laravel Dusk时,您正在使用var placeholder = document.getElementById('placeholder'); placeholder.style.left += 10; 特性,它一遍又一遍地运行迁移,因此,如果您可以改进此部分,则可能会收获很大。您谈到了100个测试。因此,假设您应用迁移需要10秒钟,那么您可以减少到4秒钟,总共可以增加600秒钟。

您可以了解更多有关我如何使Laravel Dusk测试比最初速度快3倍的信息-https://laradevtips.com/2018/07/23/make-laravel-dusk-tests-3-times-faster/-我不知道它是否可以解决您的问题情况,但就我而言(今天经过测试),收益确实令人印象深刻。