最近在维护一个日益庞大的PHP项目时,我们遇到了一个让人头疼的问题:Codeception测试套件的执行时间变得越来越长。从最初的几分钟,到现在动辄半小时甚至一小时,这严重拖慢了我们的CI/CD流程,也让本地开发调试变得异常痛苦。每次提交代码后,开发人员都需要漫长地等待测试结果,这不仅降低了工作效率,也影响了快速迭代的节奏。我们尝试过优化测试代码、升级硬件,但效果杯水车薪,因为核心问题在于测试是串行执行的,无法充分利用现代多核处理器的优势。
正当我们一筹莫展之际,
codeception/robo-paracept
要使用
codeception/robo-paracept
<pre class="brush:php;toolbar:false;">composer require codeception/robo-paracept --dev
这个命令会将
codeception/robo-paracept
vendor
--dev
codeception/robo-paracept
codeception/robo-paracept
codeception/robo-paracept
RoboFile.php
<pre class="brush:php;toolbar:false;"><?php
require_once 'vendor/autoload.php';
require_once 'vendor/codeception/codeception/autoload.php';
class RoboFile extends \Robo\Tasks
{
use Codeception\Task\Merger\ReportMerger; // 用于合并报告
use Codeception\Task\Splitter\TestsSplitterTrait; // 用于拆分测试
}codeception/robo-paracept
按组拆分 (taskSplitTestsByGroups
<pre class="brush:php;toolbar:false;">$result = $this->taskSplitTestsByGroups(5) // 拆分成5组
->testsFrom('tests/acceptance') // 从哪个目录加载测试
->projectRoot('.')
->groupsTo('tests/_data/group_') // 将组文件保存到哪里
->run();注意: 此方法会加载Codeception到内存中,如果测试文件非常多,可能会消耗较多内存。
按文件拆分 (taskSplitTestFilesByGroups
<pre class="brush:php;toolbar:false;">$result = $this->taskSplitTestFilesByGroups(5) // 拆分成5组文件
->testsFrom('tests') // 从哪个目录加载测试文件
->groupsTo('tests/_data/paratest_') // 将组文件保存到哪里
->run();按执行时间拆分 (taskSplitTestsByTime
Codeception\Task\Extension\TimeReporter
<pre class="brush:php;toolbar:false;">// 在codeception.yml中启用TimeReporter
// extensions:
// enabled:
// - Codeception\Task\Extension\TimeReporter
$result = $this->taskSplitTestsByTime(5)
->testsFrom('tests/acceptance')
->projectRoot('.')
->groupsTo('tests/_data/group_')
->run();这种方式可以最大程度地减少所有并行进程中最慢一个进程的等待时间,从而实现整体运行时间的最优化。
并行运行会产生多个测试报告(例如XML或HTML)。
codeception/robo-paracept
<pre class="brush:php;toolbar:false;">// 合并XML报告
$this->taskMergeXmlReports()
->from('tests/result/result1.xml')
->from('tests/result/result2.xml')
->into('tests/result/merged.xml')
->run();
// 合并HTML报告
$this->taskMergeHtmlReports()
->from('tests/result/result1.html')
->from('tests/result/result2.html')
->into('tests/result/merged.html')
->run();通过这些合并任务,即使测试是并行运行的,你也能得到一个统一的测试结果视图,方便查看和分析。
引入
codeception/robo-paracept
通过Composer引入
codeception/robo-paracept
如果你也正被Codeception测试速度慢所困扰,不妨尝试一下
codeception/robo-paracept
以上就是如何解决大型项目Codeception测试耗时过长的问题?codeception/robo-paracept助你实现并行测试,效率翻倍!的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号