# PHP接口自动化测试（单独购买）

通过白盒测试，可以对PHP编写的API接口进行自动化测试。这部分需要单独购买。  

目前，配套接口大师的单元测试，共有148个测试用例, 347个断言，总执行时间约3秒，100%测试通过率。  

## 自动化测试的好处
学会和使用自动化测试有非常明显的好处，例如：  

 + 1、节省测试成本，基本可以不需要人工进行接口测试，做到自动化测试和验证  
 + 2、提高API接口质量，通过360度全方位的测试和断言，时刻测试，让代码调试更简单，让Bug重现更轻松  
 + 3、加强发布质量，每次发布前，执行一次单元测试，做最后一公里全面的接口回归测试  
 + 4、改善代码规范，容易测试的代码更优雅、更灵活、更有活力
 + 5、可以和CICD进行集成，构建持续交付的工作流

## 安装PHPUnit

PHP单元测试，使用的是主流的PHPUnit单元测试，使用前，请先安装PHPUnit。  
> 安装PHPUNit： http://phpunit.cn/manual/5.7/zh_cn/installation.html  

## 配置单元测试数据库
复制./tests/config/dbs.php.sample一份到./tests/config/dbs.php，并修改。为单元测试单独创建一个专业的数据库，并调整里的数据库对应的配置。  

```php
    'servers' => array(
        'db_master' => array(                   //服务器标记
            'host'      => '127.0.0.1',               //数据库域名
            'name'      => 'phalapi_pro_test',               //数据库名字
            'user'      => 'root',               //数据库用户名
            'password'  => '123456',           //数据库密码
            'port'      => '3306',               //数据库端口
            'charset'   => 'utf8mb4',            //数据库字符集
            'pdo_attr_string'   => false,           // 数据库查询结果统一使用字符串，true是，false否
            'driver_options' => array(              // PDO初始化时的连接选项配置
                // 若需要更多配置，请参考官方文档：https://www.php.net/manual/zh/pdo.constants.php
            ),
        ),
    ),

```

## 一键执行单元测试
进入到tests目录，执行命令：  
```
$ phpunit
```
就可以进行一键测试，执行全部的单元测试用例，并且重建数据库。  

单元测试的运行结果：  
![](http://cd8.okayapi.com/yesyesapi_20210714102936_6b343c2d27bdc626b595dea5abee8114.png)  

### 发布时的单元测试
如果需要和发布系统集成，或者在测试时不需要查看输入SQL语句、不需要打印日志，可以执行命令：  
```
$ cd tests
$ phpunit -c ./phpunit_release.xml
```

执行结果类似：  
```
$ phpunit -c ./phpunit_release.xml
正在重建数据库……
PHPUnit 5.7.25 by Sebastian Bergmann and contributors.

...............................................................  63 / 148 ( 42%)
............................................................... 126 / 148 ( 85%)
......................                                          148 / 148 (100%)

Time: 12.56 seconds, Memory: 18.00MB

OK (148 tests, 347 assertions)
```

结果截图：  
![](http://cd8.okayapi.com/yesyesapi_20210714103147_06282df6205425d313d15261bb8b681d.png)  

### 测试时不重建数据库

如果不需要每次测试都重新创建数据库，可以执行命令：  
```
$ cd tests
$ phpunit -c ./phpunit_not_sql.xml
```
此时，不会删除原来的测试数据库表和数据，但要注意测试用例是否可以重复执行。对于查询类的测试是适用的。  


## 自动生成测试用例

参考PhalApi开源框架官方文档，[phalapi-buildtest命令](http://docs.phalapi.net/#/v2.0/shell?id=phalapi-buildtest%e5%91%bd%e4%bb%a4)，可以使用脚本自动给API接口和PHP类生成对应的单元测试骨架代码，减少人工重复编写代码的时间和成本。  


