验收/功能测试中的性能分析

Performance profiling in acceptance/ functional tests

我使用一个简单的验收测试来执行以下操作:

每个功能都分几个步骤进行测试,例如 -

...
$I->wantTo('Try to login with right credentials'); // step 1
$I->amOnPage('/user/login');                       // step 2
$I->fillField('#login-form-login','admin');        // step 3
$I->fillField('#login-form-password','admin');     // step 4
$I->click('#login-form button[type=submit]');      // step 5
$I->seeCurrentUrlEquals('/user/admin');            // step 6
...

我想知道每组步骤/单个步骤执行了多长时间。

由于所有功能都集中在一个测试中,因此 运行 此命令的结果是一份报告,显示整个测试所花费的时间。

codecept run acceptance --html

是否可以在 Codeception 中制作一组步骤(一些标记,可能是..)并显示执行这些组所花费的时间?

您可以将以下代码添加到 FunctionalTester 或助手 class:

class FunctionalTester extends \Codeception\Actor {
    ...

    private $firstTimeTag;
    private $secondTimeTag;

    public function markFirstTimeTag()
    {
        $this->firstTimeTag = new DateTime();
    }

    public function markSecondTimeTag()
    {
        $this->secondTimeTag = new DateTime();
    }

    public function calculateTheDiffFor($step)
    {
        echo $step.": ". round($this->secondTimeTag->getTimestamp() -
                $this->firstTimeTag->getTimestamp(), 3). " s\n";
    }
    ...
}

然后在 Cept/Cest 文件中使用此操作:

$I->wantTo('Try to login with right credentials'); // step 1

$I->markFirstTimeTag();

$I->amOnPage('/user/login');                       // step 2
$I->fillField('#login-form-login','admin');        // step 3
$I->fillField('#login-form-password','admin');     // step 4
$I->click('#login-form button[type=submit]');      // step 5

$I->markSecondTimeTag();
$I->calculateTheDiffFor("Login attempt");

$I->seeCurrentUrlEquals('/user/admin');            // step 6

例如,可以在 Jenkin 的日志中看到输出。