1. 程式人生 > >codeception apiTest一些method使用

codeception apiTest一些method使用

ons 初步 mage path form mat send nbsp 安裝

前面我們已經學習了codeception的安裝以及初步使用apiTest套件進行測試,接下來我們來看看一些我覺得比較常用的function。

首先我們需要先登錄,因此先設置cookie,如下所示:

public function _before(ApiTester $I)
    {
         $I->haveHttpHeader(‘Content-Type‘, ‘application/x-www-form-urlencoded‘);
         $I->sendPOST(‘/login/loginset‘, [‘name‘=> ‘10270054‘,‘pwd‘=>md5
(666666),‘utype‘=>1]); $cookie = $I->grabDataFromResponseByJsonPath(‘$..data.cookie‘); //獲取登錄url返回的cookie $I->haveHttpHeader(‘Cookie‘, ‘EKWUID=‘.$cookie[0]); //在請求的時候將cookie帶上 }

登錄成功之後,我們請求接口進行測試,被測試接口正常返回的json數據格式如下:

{
    "totalPages":31,
    "totalItem":121,
    "size":4,
    "currentPage":1,
    "list":[
        {
            "id":"380",
            "name":"免費試卷",
            "nowStageId":"498",
            "nowStageStatus":"1",
            "nowStage":"一",
            "startTime":"1552819800",
            "endTime":"1552906200",
            "unRead":true,
            "isNew":true,
            "totalPerson":134,
            "exercPerson":"0",
            "submitPerson":"0"
        },
        {
            "id":"379",
            "name":"制定到省",
            "nowStageId":"497",
            "nowStageStatus":"1",
            "nowStage":"我們",
            "startTime":"1552817400",
            "endTime":"1552903800",
            "unRead":true,
            "isNew":true,
            "totalPerson":114,
            "exercPerson":"0",
            "submitPerson":"0"
        },
        {
            "id":"377",
            "name":"三",
            "nowStageId":"495",
            "nowStageStatus":"2",
            "nowStage":"首賽段",
            "startTime":"1552817400",
            "endTime":"1552875000",
            "unRead":true,
            "isNew":true,
            "totalPerson":134,
            "exercPerson":"0",
            "submitPerson":"0"
        },
        {
            "id":"378",
            "name":"四",
            "nowStageId":"496",
            "nowStageStatus":"1",
            "nowStage":"首賽段",
            "startTime":"1552881600",
            "endTime":"1552910400",
            "unRead":true,
            "isNew":true,
            "totalPerson":134,
            "exercPerson":"0",
            "submitPerson":"0"
        }
    ]
}

然後我們進行測試。

(1)grabDataFromResponseByJsonPath

 // tests 將返回數據中data字段的信息打印出來,為了方便查看結果,這裏直接var_dump了,一般測試不需進行此步驟
    public function tryToTest(ApiTester $I)
    {
         $I->sendPOST(‘/race/teacher/racelist‘, [‘page‘=>1,‘page_size‘=>4]);
         $arrRet = $I->grabDataFromResponseByJsonPath(‘$..data‘); //
通過json格式獲取數據 var_dump($arrRet);
}

輸出如下圖所示:

技術分享圖片技術分享圖片

(2)grabResponse

// tests 獲取所有的數據返回,返回格式為"{}" ,需進行json_decode
    public function tryToTest(ApiTester $I)
    {
         $I->sendPOST(‘/race/teacher/racelist‘, [‘page‘=>1,‘page_size‘=>4]);
         $arrRet = json_decode($I->grabResponse(),true); //獲取所有的數據返回,返回格式為"{}"
         var_dump($arrRet);
    }

輸出如下圖所示:

技術分享圖片技術分享圖片

(3)seeResponseCodeIs

// tests 判斷返回狀態碼與傳入的狀態碼是否一致
    public function tryToTest(ApiTester $I)
    {
         $I->sendPOST(‘/race/teacher/racelist‘, [‘page‘=>1,‘page_size‘=>4]);
         $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); // 200
    }

輸出如下圖所示:

技術分享圖片

(4)seeResponseIsJson

// tests 判斷返回結果是否為json格式
    public function tryToTest(ApiTester $I)
    {
         $I->sendPOST(‘/race/teacher/racelist‘, [‘page‘=>1,‘page_size‘=>4]);
         $I->seeResponseIsJson();
     }

輸出如下圖所示:

技術分享圖片

通過結果可以看到,seeResponseIsJson進行了兩次斷言,然後我們查看下源碼就可以理解了:

技術分享圖片

(5)seeResponseContainsJson

 // tests 返回的數據中是否包含某個json信息
    public function tryToTest(ApiTester $I)
    {
         $I->sendPOST(‘/race/teacher/racelist‘, [‘page‘=>1,‘page_size‘=>4]);
         $I->seeResponseContainsJson(array(‘currentPage‘=>1)); //返回的數據中是否包含某個json信息
}

輸出如下圖所示:

技術分享圖片

(6)以下幾個常用方法與上面的seeResponseContainsJson的返回結果類似,以seeXXX開頭的均為斷言,這裏就不一一展開測試,如下解釋:

$I->seeResponseJsonMatchesJsonPath(‘$..data.list[*].id‘); //返回的數據list中至少有一個有id元素
$I->seeResponseMatchesJsonType(array(‘errno‘=>‘integer:=0‘,‘data‘=>‘array‘));//返回數據類型的匹配
$I->seeHttpHeader(‘Content-Type‘, ‘text/html; charset=UTF-8‘); //返回的http頭部
var_dump($I->grabHttpHeader(‘Content-Type‘)); //獲取返回的http頭部Content-Type信息
$I->seeResponseContains(‘errno‘); //斷言返回數據中是否包含某個字段或者信息
$I->seeHttpHeaderOnce(‘Content-Type‘);//斷言返回頭是否只接收一次

codeception apiTest一些method使用