即使在运行如下所示的简单测试时,也是如此:
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次测试那样运行,那将花费非常长的时间。
任何解决方案?
答案 0 :(得分:3)
对我来说,需要花费大量时间的事情是在每个测试之前进行迁移,而在migrate:rollback
特性进行的每个测试之后进行迁移。这是我在项目中解决问题的方法:
DatabaseMigrations
特性的使用。DatabaseMigrations
。我在运行测试的bash文件中执行此操作。./artisan migrate:fresh --seed --env=dusk
类中,调用命令以删除表中的所有数据。这是我为MySQL(在Artisan命令内部)所做的事情: DuskTestCase
$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/-我不知道它是否可以解决您的问题情况,但就我而言(今天经过测试),收益确实令人印象深刻。