chinthakagodawita/codeception-timekeeper

一个Codeception扩展和Robo任务,用于记录测试运行时间,并允许您将测试分割成基于运行时间的相等组以并行运行

v1.0.0-beta.2 2020-07-10 14:32 UTC

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进行并行测试运行

安装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类。

灵感