chinthakagodawita / codeception-timekeeper
一个Codeception扩展和Robo任务,用于记录测试运行时间,并允许您将测试分割成基于运行时间的相等组以并行运行
Requires
- php: >=7.2
- ext-json: *
- codeception/codeception: ^3.1||^4.1
Requires (Dev)
- consolidation/robo: ^1.0||^2.1
Suggests
- consolidation/robo: For time-based test splitting and parallel test run support.
This package is auto-updated.
Last update: 2024-09-11 00:05:19 UTC
README
这是一个Codeception扩展和Robo任务,用于记录测试运行时间,并允许您将测试分割成基于运行时间的相等组以并行运行。
当您以自动化的方式运行测试时,这非常有用,例如在持续集成系统中。您可以安排多个并行测试运行,每个运行的运行时间大致相等。
此扩展支持以下Codeception版本
- 3.x
- 4.x
用法
首先,安装此包
composer require chinthakagodawita/codeception-timekeeper
Codeception时间报告扩展
更新您的codeception.yml
extensions: enabled: - ChinthakaGodawita\CodeceptionTimekeeper\Reporter: report_location: _data/time_report.json
然后运行您的测试,每个测试的运行时间报告将输出到_data/time_report.json
。这本身并不很有用,请继续阅读,了解如何使用此方法并行运行您的测试。
通过Robo进行并行测试运行
composer require --dev consolidation/robo
更新您的Robofile
<?php class RoboFile extends \Robo\Tasks { use \ChinthakaGodawita\CodeceptionTimekeeper\SplitsTestsByTime; public function taskSplitTests(): \Robo\Result { $groups = 3; $timeReportLocation = '_data/time_report.json'; return $this->taskSplitTestsByTime($groups, $timeReportLocation) ->projectRoot('.') ->testsFrom('tests') ->groupsTo('tests/_data/timekeeper/group_') ->run(); } }
然后更新您的codeception.yml
文件
groups: timekeeper_*: tests/_data/timekeeper/group_*
这告诉Codeception关于我们刚刚创建的测试组的存在。
您可以使用以下方式分割测试
php vendor/bin/robo split:tests
并使用以下方式运行这些测试组
php vendor/bin/codecept run -g timekeeper_0
php vendor/bin/codecept run -g timekeeper_1
php vendor/bin/codecept run -g timekeeper_2
# etc.
有关更多信息,请参阅Codeception文档
故障排除
我的某些测试相互依赖
此扩展目前不支持具有依赖关系的测试。该功能即将推出支持。
帮助!我看到了奇怪的PHP兼容性错误
如果您看到了以下任何类似错误,则您遇到了codeception/codeception#5031的变体
ERROR: Declaration of Codeception\Test\Test::run(?PHPUnit\Framework\TestResult $result = NULL) must be compatible with PHPUnit\Framework\Test::run(?PHPUnit\Framework\TestResult $result = NULL): PHPUnit\Framework\TestResult
ERROR: Declaration of Codeception\Test\Test::toString() must be compatible with PHPUnit\Framework\SelfDescribing::toString(): string
修复此问题的最简单方法,直到上游出现真正修复,是在您的Robofile
的顶部添加以下内容,而不是仅仅依赖Composer的自动加载器
<?php require_once 'vendor/autoload.php'; require_once 'vendor/codeception/codeception/autoload.php';
根据您的Robofile
相对于Composer的vendor
目录的位置更新这些路径。
这强制Codeception的自动加载器触发,并重新声明它需要来运行的功能所需的PHPUnit类。