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

Posted

技术标签:

【中文标题】验收/功能测试中的性能分析【英文标题】:Performance profiling in acceptance/ functional tests 【发布时间】:2016-06-03 09:28:50 【问题描述】:

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

加载网站的起始页; 执行授权尝试; 执行注销尝试; 执行注册尝试。

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

...
$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 中制作一组步骤(一些标记,可能是..)并显示执行这些组所花费的时间?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于验收/功能测试中的性能分析的主要内容,如果未能解决你的问题,请参考以下文章

软件验收测试之α测试和β测试分别是什么?

软件验收测试之α测试和β测试分别是什么?

软件验收测试之α测试和β测试分别是什么?

如何使用 selenium 和 codeception 检测验收测试中的 dom 变化

软件测试整理复习(判断题)

验收测试和 CI