首页 > 技术文章 > 第四章 接口自动化测试用例详解(上)

eagleking0318 2015-04-03 15:04 原文

------phpunit 接口自动化测试系列

经过前三章的学习,我们准备好了对接口进行自动化测试的相关知识。现在我们开始讲解接口自动化测试用例的编写。在本章编写的测试用例中,我们只针对具体的接口,编写自动化测试用例,而不对代码架构进行规划,那些儿进阶性的知识点,我们将在后面的章节讲解。先学习如何砌砖,然后我们再去建自己的高楼大厦。

4.1 Get方式接口自动化用例

   Get方式的接口自动化相对来说比较简单,直接调用接口地址,把参数放到接口地址后面即可。下面我们以众筹网的接口实例来讲解:

(1)接口文档

按关键字搜索项目(GET):

URLhttp://api.zhongchou.cn/deal/list

参数:

keyword,搜索关键字

offset,拉取偏移,非必需,默认为0

count,拉取个数,非必需,默认为10

返回:项目Feed基础数据结构数组

  上面是一个搜索项目的接口文档,从文档中我们得知,这个接口是Get方式的,而且有三个参数,第一个参数是必需的,后两个参数是非必需的。返回值是Feed基础数据结构的数据(暂不要理会)。

(2)Curl命令调用

为了安全期间,我们调用测试环境下的数据,先绑定host: xx.xx.xx.xx api.zhongchou.cn。然后在终端下执行下面的命令:

[root@n028 api]# curl http://api.zhongchou.cn/deal/list?v=1&keyword='测试'

执行结果如图4.1.1所示:

 


                图4.1.1 Curl调用接口返回值

当然,上面在终端下的接口返回的结果是加密后的json字符串,不太容易看明白。

(3)浏览器访问接口

为了使用接口返回值更加清晰明了,我们要借助于一个浏览器插件JsonView。此插件可以直接解析接口返回的json字符串,方便明了,不过有个缺点:只能查看Get方式的接口。

针对上面的例子,我们直接在浏览器的地址栏中输入http://api.zhongchou.cn/deal/list?v=1&keyword='测试',然后回车,就可以看到如图4.1.2所示:                       
     
     
                        图4.1.2浏览器访问接口

  这样访问接口,返回值是不是更加清晰了。对应返回值中包含的汉字也作了对应的解码。

(4)PHP调用Get方式接口

   PHP对接口的调用有完整的一套函数,对于Get方式的接口,只需要调用函数file_get_contents()就能得到返回值。

示例代码如下:

class Demo extends PHPUnit_Framework_TestCase{

    public function testSearch()

    {

        $url="http://api.zhongchou.cn/deal/list?keyword=测试&v=1";

        $ret=file_get_contents($url);

        echo $ret;

    }

}

在JetBrains PhpStorm执行结果如图4.1.3所示:

    
                       图4.1.3 PHP调用Get接口执行结果

   这个结果和在终端下调用Curl命令结果是一样的,那有没有和浏览器下结果那样的呢?当然有了,因为这个接口返回值是json编码过的,我们调用函数json_decode()解码一下即可。解码后的结果见图4.1.4所示:

            
                            图4.1.4 对接口返回值进行解码输出

(5)PHP编写Get接口自动化测试用例

经过上面的四步分析,我们已经可以用php来调用接口了,可是这还不是完整的自动化测试用例。我们需要添加对返回结果的验证,如果和预期的一样,就成功,如果不一样就失败。

完整的测试用例:

class Demo extends PHPUnit_Framework_TestCase{

    public function testSearch()

{

 

        $url="http://api.zhongchou.cn/deal/list?keyword=测试&v=1";

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($ch, CURLOPT_HEADER, 0);

        $ret=curl_exec($ch);

        curl_close($ch);

        $data=json_decode($ret,true);

        //print_r($data);

        if(is_null($data)==false)

        {

            if($data['errno']=='0')

            {

                $this->assertEquals('0',$data['errno']);//判断errno是否为0,此步为抛出执行通过

                $index =strpos($data['data'][0]['name'],'测试');

                $this->assertnotEquals(-1,$index);//判断结果是否包含关键字

                print('接口/deal/list:搜索接口------------------OK'.'\n');

            }

            else

            {

                $this->assertEquals('0',$data['errno']);//抛出执行失败

                print("接口/deal/list:搜索接口---------------Failure!"."\n".$ret."\n");

            }

        }

 

    }

}

 我们为了判断结果,没有调用file_get_contents()函数,而改用了PHP调用接口的通用方法,如果不理解可以去网上查找相关讲解。而后我们加入了对接口返回值$data的判断:判断errno是否为0,查询结果中有没有包含关键字等。对于检测点的设置技巧,我们将在后面进阶篇中讲解。

结过这样的测试用例代码,我们就可以执行测试用例了,并且测试用例会自己判断接口调用的结果。执行结果如图4.1.5所示,如果想查看接口的具体返回值 ,只需要取消//print_r($data);此句的注释即可。

   
                        图4.1.5 Get接口的执行结果

 

推荐阅读