前言:
Yii2是一款非常优秀的PHP框架,Yii2的官方发行版整合了codeception测试框架。在使用Yii2框架的项目中,我们可以非常方便地利用codeception进行单元测试、功能测试、验收测试和API测试等。现在下面主要介绍API测试
API测试主要用来测试接口
准备安装
1、确保已经安装了composter,没有安装自行安装
2、在项目根目录运行命令
composer require "fxp/composer-asset-plugin:*"
composer require "codeception/codeception=*"
composer require "codeception/specify=*"
composer require "codeception/verify=*"
composer require flow/jsonpath
3、下载codecept.phar文件
链接:http://codeception.com/codecept.phar
参考:http://waqqas-blog.logdown.com/posts/261868-automated-testing-of-a-restful-api
下载好后(如果下载不好可以按照参考资料来,直接下载比较方便)将文件放在项目的根目录中
配置codeception
1、执行如下命令
windows:php vendor\codeception\codeception\codecept bootstrap
linux: vendor\bin\codecept bootstrap
这行命令将创建一个codeception.yml文件和test目录(根据自己的实际目录执行命令我的是基础版yii)
2、修改codeception.yml,如下:
actor: Tester
paths:
tests: tests
log: tests/_output
data: tests/_data
helpers: tests/_support
settings:
bootstrap: _bootstrap.php
memory_limit: 1024M
colors: true
modules:
config:
Yii2:
configFile: 'config/test.php'
cleanup: false
# Db:
# dsn: 'mysql:host=localhost;dbname=televod'
# user: 'test_televod'
# password: 'test_televod'
# Db是情况配置我的没有配置
添加测试套件
1、执行如下命令
linux:vendor\bin\codecept generate:suite api
windwos:php vendor\codeception\codeception\codecept generate:suite api
这将在tests目录下创建api.suite.yml文件和api目录
2、修改api.suite.yml文件,如下:
class_name: ApiTester
modules:
enabled: [PhpBrowser, REST]
config:
PhpBrowser:
url: http://域名
REST:
url: http://域名
depends: PhpBrowser
depends: Yii2
3、在api目录下添加一个测试文件
linux: vendor\bin\codecept generate:cest api CreateUser
windows: php vendor\codeception\codeception\codecept generate:cest api CreateUser
4、执行如下命令构建测试
linux: vendor\bin\codecept build
windows: php vendor\codeception\codeception\codecept build
写测试
编辑文件CreateUserCest.php
// tests
public function tryToTest(ApiTester $I)
{
$I->sendPOST('terminal/getterminal',['page'=>1,'ter_account'=>1]);
$I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); // 200
$I->seeResponseIsJson();
// $I->seeResponseContains('"code":1');
$I -> seeResponseContainsJson( ['code'=>1] );
// $I ->dontSeeResponseContainsJson(["ter_account"=>"16678786767"]);
}
运行测试
linux: vendor\bin\codecept run api
windows: php vendor\codeception\codeception\codecept run api
# api后面可指定文件名,不加会执行所有测试文件