codeception apiTest一些method使用
阿新 • • 發佈:2019-03-18
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使用