codeception apiTest一些method使用

 

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

 

posted @ 2019-03-18 16:55  cfYu  阅读(619)  评论(0编辑  收藏  举报