前面我们已经学习了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');//断言返回头是否只接收一次