![](https://i-blog.csdnimg.cn/blog_migrate/aa418054f4b5f6fdd727644c15b32909.png)
在长久的工作经历中,测试大佬常会在你耳旁嘀咕开发要自测要自测。但是实际上开发往往只会关心当前负责的单元功能的正确与否。繁杂的开发任务当中,还要兼顾所有流程的功能运转可能就没那个精力了,或者说这本身就是测试的工作。在远古时代互联网领域工作还没细分到前端、后端、测试、UI的时候,所有一揽子活都只有一个人做,那就是程序员。
但是如何尽量保证程序返回结果是预期的? 能否做到每次发布之前自动对程序测试看是否达到预期?
这个时候我们可以引入自动化测试。
自动化测试范围
- UI测试
- 接口测试
- 单元测试
- 数据测试
其中UI测试和数据测试的自动化可能是最不容易做且效益最小的。这部分可能最好是人为的进行测试效果最好。
在体验了java 的junit之后特别觉得junit的强大,其实PHP也可以做。接下来我们来了解下PHP的测试框架codeception
安装使用
install
composer require "codeception/codeception" --dev
setup
php vendor/bin/codecept bootstrap
该命令会初始化配置文件和目录
轻量安装
Use predefined installation templates for common use cases. Run them instead of bootstrap command.
bootstrap
会默认初始化所有测试类型所需要的组件,有些你不会用到的类库也会安装。推荐使用轻量安装所用能到的测试类型。
例如你只需要单元测试,则可以
php vendor/bin/codecept init unit
suite配置
初始化之后还要对测试类型进行相应的配置,在tests目录下新建unit的配置
# unit.suite.yml
# Codeception Test Suite Configuration
#
# Suite for unit or integration tests.
actor: UnitTester
modules:
enabled:
- Asserts
- \Helper\Unit
step_decorators: ~
![](https://i-blog.csdnimg.cn/blog_migrate/60ad4af1ac23a799cf843ef2b1fdac1e.png)
codeception单元测试
![](https://i-blog.csdnimg.cn/blog_migrate/ad94037c6604fbe3390ebe269073da53.png)
codeception的单元测试其实也是基于phpunit之上构建的。phpunit的单元测试用例可以之前在codeception上执行。
创建单元测试
php vendor/bin/codecept generate:test unit Example
执行完会在tests/unit目录里创建测试用例文件
class ExampleTest extends \Codeception\Test\Unit
{
/**
* @var \UnitTester
*/
protected $tester;
protected function _before()
{
}
protected function _after()
{
}
// tests
public function testMe()
{
}
}
- all public methods with test prefix are tests
- _before method is executed before each test (like setUp in PHPUnit)
- _after method is executed after each test (like tearDown in PHPUnit)
运行用例
php vendor/bin/codecept run unit ExampleTest
运行所有单元测试用例
php vendor/bin/codecept run unit
class UserTest extends \Codeception\Test\Unit
{
public function testValidation()
{
$user = new User();
$user->setName(null);
$this->assertFalse($user->validate(['username']));
$user->setName('toolooooongnaaaaaaameeee');
$this->assertFalse($user->validate(['username']));
$user->setName('davert');
$this->assertTrue($user->validate(['username']));
}
}
结果
![](https://i-blog.csdnimg.cn/blog_migrate/2d2ed556fc59912d66e27ef38eb2322d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2edc79e2e41ad801e9feaf3a17e1aa2e.png)
可以统计到所有文件的覆盖率和用例测试结果。
结合git钩子我们可以在每次分支提交时进行自动的用例测试,能一定程度上防止代码更改了而没测试产生非预期的问题。
博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文永久链接是:https://visonforcoding.github.io/2020/07/01/PHP%E7%94%9F%E6%80%81%E4%B9%8B%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/