1. 程式人生 > >自動化REST API 測試(基於Yii2)

自動化REST API 測試(基於Yii2)

前言

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、執行如下命令

vendor\bin\codecept generate:suite api
# windwos下行首可加php

這將在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目錄下新增一個測試檔案

vendor\bin\codecept generate:cept api CreateUser
# 或者
vendor\bin\codecept generate:cest api CreateUser # 檔案內會自動建立測試類

4、執行如下命令構建測試

vendor\bin\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"]);
    }

執行測試

vendor\bin\codecept run api
# api後面可指定檔名,不加會執行所有測試檔案