测试优化
Pest 提供了几种优化技术来帮助开发者编写高效且高性能的测试。其中最重要的一项是并行测试,它允许使用 `--parallel` 选项在多个进程中同时运行多个测试。这可以大大减少运行测试所需的时间,并提高测试套件的整体性能。
此外,Pest 提供了 `--profile` 标志来快速识别运行缓慢的测试,从而优化其执行。
最后,通常只关注测试套件的失败很有用。为此,您可以在运行 Pest 时使用 `--compact` 打印机。这指示 Pest 仅显示有关测试套件失败测试的信息。
并行测试
Pest 2 中的并行测试现在运行速度提高了 80%。这一令人印象深刻的结果得益于并行测试核心系统的完全重建。新核心结合了在测试用例运行之间重用进程的高级技术。
默认情况下,Pest 会在单个进程中顺序执行您的测试。但是,您可以通过使用 `--parallel` 选项在多个进程中并发运行测试来显着减少运行测试所需的时间。
1./vendor/bin/pest --parallel
在并行运行测试时,Pest 将为计算机上的每个可用 CPU 内核创建一个进程。但是,您可以使用 `--processes` 选项手动修改进程数。
1./vendor/bin/pest --parallel --processes=10
以下是一些在编写将在并行执行的测试时需要考虑的重要事项
- 数据库资源可能不会在测试之间共享:每个测试都应该与其他测试隔离且独立。
- 测试顺序可能无法保证:测试不应该依赖于任何特定的执行顺序。
- 测试可能会受到竞争条件的影响:当多个进程或线程访问共享资源时,可能会发生竞争条件。确保设计您的测试以处理潜在的竞争条件,并在任何时候都避免它们。
性能分析
假设您有一个大型测试套件,需要几分钟才能运行。您注意到某些测试比其他测试花费的时间长得多,但您不确定哪些测试最慢或是什么导致了速度下降。
要识别最慢的测试并优化其执行,您可以使用 Pest 的 `--profile` 选项。当您启用此标志运行测试套件时,Pest 将收集每个测试的持续时间,并提供一份突出显示最慢测试的报告。
1./vendor/bin/pest --profile
例如,假设您运行测试套件并看到以下输出
您可以看到 `UserTest > create user` 和 `OrderTest > create order` 测试花费的时间明显长于其他测试。通过分析此测试,您可能会发现它正在执行几个低效的数据库查询或执行其他可能被优化以减少其执行时间的昂贵操作。
紧凑打印机
如果您使用大量测试,则只关注失败的测试可能会有益。您可以使用 `--compact` 打印机来指示 Pest 仅显示测试失败,从而更容易查明和解决任何问题,而不会受到所有成功测试的干扰。
此外,由于 `--compact` 打印机生成更简单的输出,因此测试速度可以通过几毫秒来提高,因为每个测试所需的输入/输出更少。
您甚至可以将 Pest 配置为始终使用紧凑打印机,这样您就不必每次运行测试套件时都指定 `--compact` 选项。
1// tests/Pest.php2pest()->printer()->compact();3 4//
现在您已经了解了如何加快测试套件的速度,让我们继续讨论持续集成:持续集成