Codeception 介绍
https://codeception.com/docs/
后端测试已经不是什么新鲜的事务。当你无法确定最后一次提交代码是否搞崩整个项目时,可能睡不着。
如果有个应用测试能确保项目稳定性。codeception就是一个选择。
通常测试无法保证100%像期望那样运行。在复杂的项目中,往往无法预见所有的场景和意外情况,
但是测试项目中的核心部分可以确保其能正常运行。
有多种方式测试你的项目。最流行的就是单元测试。对应WEB应用,仅仅测试控制器(controller)和model无法保证你的应用正常运行。作为一个整体测试应用,就应当写功能测试和验收测试。( functional or acceptance)
Codeception 支持者三种测试类型:单元测试、功能测试和验收测试。
验收测试(Acceptance Tests)
如何让你的客户,经理,测试员和其他非技术人员知道你的网站正常工作,打开浏览器,输入站点,点击链接,填写标题看看发生了什么,对于框架,语言,数据库,WEB服务器甚至项目本身能实现什么都无需知道。
这就是验收测试所作的。覆盖了用户行为的场景。有了验收测试,你可以保证用户使用的场景不出错。
任何一个网站都可以进行验收测试,甚至是偏门CMS和框架。
Sample acceptance test
<?php
$I->amOnPage('/');
$I->click('Sign Up');
$I->submitForm('#signup', ['username' => 'MilesDavis', 'email' => 'miles@davis。com']);
$I->see('Thank you for Signing Up!');
功能测试(Functional Tests)
想知道应用是否在服务器运行正常?想知道异常错误的细节,进行快速测试和确认数据库是否按照预期运行。功能测试就是完成这种测试。
功能测试包括:评估web服务器根据请求($_REQUEST)返回相应。正像一个测试你可以判断返回值,你能检查数据是否成功保存到数据库。
功能测试需要跑在测试环境中。Codeception提供了几种PHP 框架的连接器。
根据你的需要来应用。
Sample functional test
<?php
$I->amOnPage('/');
$I->click('Sign Up');
$I->submitForm('#signup', ['username' => 'MilesDavis', 'email' => 'miles@davis。com']);
$I->see('Thank you for Signing Up!');
$I->seeEmailSent('miles@davis。com', 'Thank you for registration');
$I->seeInDatabase('users', ['email' => 'miles@davis。com']);
单元测试(Unit Tests)
在重要场合需要在合并之前测试代码。即使你没有进行功能和验收测试,也能保证隐含的功能正确的实现。这就是保证产品稳定和可测的单元测试。
Codeception是基于PHPUnit。可以使用PHPUnit写单元测试,Codeception能运行标准的PHPUnit测试,
也添加了一些内置工具,让写单元测试更加简单方便。应保证代码的环境要求。最好你能理解测试场景,这样就能快速更新单元测试。
<?php
function testSavingUser()
{
$user = new User();
$user->setName('Miles');
$user->setSurname('Davis');
$user->save();
$this->assertEquals('Miles Davis', $user->getFullName());
$this->tester->seeInDatabase('users', ['name' => 'Miles', 'surname' => 'Davis']);
}
结束语
尽管TDD (Test Driven Development)广泛流行,作为PHP程序员一般不会给项目应用写一套测试套件,
因为这个过程很麻烦,复杂和缓慢。Codeception 框架让测试变得有趣。它让单元,功能,整合和验收测试放在统一的简单类别中。
Codeception可以成为BDD (Behavior Driven Development)框架。所有测试都出现在描述方法中。只要看看测试本身,你就能明了测试什么和如何运行。甚至许多复杂的判断,也可以使用简单的PHP Domain-Specific Language
完成。