前面我们已经学习了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‘);//断言返回头是否只接收一次
原文:https://www.cnblogs.com/cfYu/p/10553193.html