美文网首页
浅谈接口测试(一)简单的开始

浅谈接口测试(一)简单的开始

作者: 茧城寒舍 | 来源:发表于2020-04-15 11:17 被阅读0次

当前的风气是,谈测试,必言“接口”。其实接口并不神秘,当今的应用中无处不是“接口”,从本篇开始让我来谈一些关于接口的浅薄认识。

1.一个简单的接口(demo.php)
<?php

    // 文件名称demo.php
    // 告诉浏览器返回为json类型
    header('Content-Type:application/json; charset=utf-8');
    // 组织的数据
    $data = array(
        'code' => 200,
        'msg' => '请求成功',
        'result' => array(
            'key1' => 'value1',
            'key2' => 'value2'
        )
    );
    // PHP数组转json
    $rst = json_encode($data,JSON_UNESCAPED_UNICODE);
    // 打印到浏览器
    echo $rst;

把文件放到服务器指定目录,通过浏览器访问获得如下结果:

{
    "code": 200,
    "msg": "请求成功",
    "result": {
        "key1": "value1",
        "key2": "value2"
    }
}

这就是一个比较简单的接口。

2. 我们要测什么

还是用上面的接口实例,我们要测试的无非是(其他的用到再说,比如http_code):

json对象的键“code”,是不是等于 200
json对象的键“msg”,是不是等于 "请求成功"
result对象的键“key1”,是不是等于 "value1"
.....

工作中接口数据会根据一定规则变化的,那么这个“规则”才是我们要测试的重点,我们看如下这个接口(demo1.php)。

<?php

    // 告诉浏览器返回为json类型
    header('Content-Type:application/json; charset=utf-8');

    // 获取一个0到2的随机数
    $index = rand(0,2);

    $msgs = array('请求成功','请求失败','其他错误');
    // 组织的数据
    $data = array(
        'code' => 200,
        'msg' => $msgs[$index],
        'result' => array(
            'key1' => 'value1',
            'key2' => 'value2'
        )

    );
    // PHP数组转json
    $rst = json_encode($data,JSON_UNESCAPED_UNICODE);

    // 打印结果
    echo $rst;

在浏览器中多次访问,我们可能会得到如下结果:

{
    "code": 200,
    "msg": "请求成功",
    "result": {
        "key1": "value1",
        "key2": "value2"
    }
}
{
    "code": 200,
    "msg": "请求成功",
    "result": {
        "key1": "value1",
        "key2": "value2"
    }
}
{
    "code": 200,
    "msg": "请求失败",
    "result": {
        "key1": "value1",
        "key2": "value2"
    }
}
{
    "code": 200,
    "msg": "其他错误",
    "result": {
        "key1": "value1",
        "key2": "value2"
    }
}

在这个接口中,我们要测试的是“随机”这个规则,测试就是通过返回给浏览器中的msg是否发生了随机变化,那么我们要测试的是:

json对象的键“msg”,是不是属于 “请求成功”,"请求失败","其他错误" 中的一个
json对象的键“msg”,是不是属于 “请求成功”,"请求失败","其他错误" 中的一个
json对象的键“msg”,是不是属于 “请求成功”,"请求失败","其他错误" 中的一个
json对象的键“msg”,是不是属于 “请求成功”,"请求失败","其他错误" 中的一个
.....
以上步骤执行多次,直到取到所有的值!!!!

讲到这里产生了一个问题:如果始终没有返回所有的情况怎么办?

客观讲,这样的接口是没有意义的,也是不容易被测试的。所以后端工程师一般会根据请求端的变化而变化,那么请求如何变化的呢?这就是我们接下来要说的参数。

3. 带参数的请求(demo2.php)
<?php

    // 告诉浏览器返回为json类型
    header('Content-Type:application/json; charset=utf-8');
    // 获取参数index
    $index = $_GET['index'];

    // 获取一个0到2的随机数
    //$index = rand(0,2);

    $msgs = array('请求成功','请求失败','其他错误');
    // 组织的数据
    $data = array(
        'code' => 200,
        'msg' => $msgs[$index],
        'result' => array(
            'key1' => 'value1',
            'key2' => 'value2'
        )
    );
    // PHP数组转json
    $rst = json_encode($data,JSON_UNESCAPED_UNICODE);
    // 打印结果
    echo $rst;

我们在浏览器中依次输入如下内容:
http://localhost/about_test/demo2.php?index=0,
http://localhost/about_test/demo2.php?index=1,
http://localhost/about_test/demo2.php?index=2,

返回结果如下:

{
   "code": 200,
   "msg": "请求成功",
   "result": {
       "key1": "value1",
       "key2": "value2"
   }
}

{
   "code": 200,
   "msg": "请求失败",
   "result": {
       "key1": "value1",
       "key2": "value2"
   }
}

{
   "code": 200,
   "msg": "其他错误",
   "result": {
       "key1": "value1",
       "key2": "value2"
   }
}

是不是看起来很眼熟?是的,这个和demo1.php的返回很像,但是也有区别,区别在于,只要url后面的index固定是某个值,那么返回结果也固定某个值。类似的有含有分页参数的接口如下(getList.php):

<?php
// 告诉浏览器返回为json类型
header('Content-Type:application/json; charset=utf-8');

// 获取参数index
$page = $_GET['page'];
$size = $_GET['size'];

/**
 * 在真正的开发过程中,会操作数据库,我们暂时用一个多维数组代替
 */
$data_list = array(
    array('id'=>1,'name'=>'成龙'),
    array('id'=>2,'name'=>'周润发'),
    array('id'=>3,'name'=>'周星驰'),
    array('id'=>4,'name'=>'李连杰'),
    array('id'=>5,'name'=>'梁朝伟'),
    array('id'=>6,'name'=>'张曼玉'),
    array('id'=>7,'name'=>'惠英红'),
    array('id'=>8,'name'=>'林青霞'),
    array('id'=>9,'name'=>'王祖贤'),
    array('id'=>10,'name'=>'巩俐')
);
foreach($data_list as $key=>$value){

    if($key >= ($page -1) * $size &&  $key < $page * $size){
        $temp[] = $value;
    }
}

// 组织的数据
$data = array(
    'code' => 200,
    'msg' => '请求成功',
    'result' => $temp

);

// PHP数组转json
$rst = json_encode($data,JSON_UNESCAPED_UNICODE);

// 打印结果
echo $rst;

我们在浏览器中打开如下连接:
http://localhost/about_test/getList.php?page=4&size=2
返回结果如下:

{
    "code": 200,
    "msg": "请求成功",
    "result": [
        {
            "id": 7,
            "name": "惠英红"
        },
        {
            "id": 8,
            "name": "林青霞"
        }
    ]
}

如果我们使用抓包工具(后面会详细讲),可能经常看到在url后面没有携带参数,但是返回的数据也可能发生变化,那是怎么回事呢?其实访问接口还有另外一种方式---post请求。

4. 换个姿势请求(post请求)

我们把getList.php文件稍微做一下修改,得到以下代码(getList_post.php):

<?php

// 告诉浏览器返回为json类型
header('Content-Type:application/json; charset=utf-8');

// 获取参数index
//$page = $_GET['page'];
//$size = $_GET['size'];

$page = $_POST['page'];
$size = $_POST['size'];

/**
 * 在真正的开发过程中,会操作数据库,我们暂时用一个多维数组代替
 */
$data_list = array(
    array('id'=>1,'name'=>'成龙'),
    array('id'=>2,'name'=>'周润发'),
    array('id'=>3,'name'=>'周星驰'),
    array('id'=>4,'name'=>'李连杰'),
    array('id'=>5,'name'=>'梁朝伟'),
    array('id'=>6,'name'=>'张曼玉'),
    array('id'=>7,'name'=>'惠英红'),
    array('id'=>8,'name'=>'林青霞'),
    array('id'=>9,'name'=>'王祖贤'),
    array('id'=>10,'name'=>'巩俐')
);
foreach($data_list as $key=>$value){

    if($key >= ($page -1) * $size &&  $key < $page * $size){
        $temp[] = $value;
    }
}
// 组织的数据
$data = array(
    'code' => 200,
    'msg' => '请求成功',
    'result' => $temp

);
// PHP数组转json
$rst = json_encode($data,JSON_UNESCAPED_UNICODE);

// 打印结果
echo $rst;

这次我们不能通过在浏览器中直接输入访问地址+参数来获取返回结果,我们可以使用mac自带的终端来进行访问:

curl localhost/about_test/getList_post.php -X POST -d 'page=4&size=2'

我们如愿以偿的得到了下面的结果:

{"code":200,"msg":"请求成功","result":[{"id":7,"name":"惠英红"},{"id":8,"name":"林青霞"}]}

从上面的对比也许大概差不多可能大家能感觉到,post请求要比get麻烦!
这可能也符合我们朴素的认知:
简单的,意义不大的总是容易得到;
复杂的,意义重大的需要你付出才能得到(post本身有发送的意思)

5. 总结
  1. 一个简单接口,发送请求就会返回数据。
  2. 测试就是测试规则。
  3. 接口返回数据是会根据参数发生变化的。
  4. 接口请求方式有get和post。

相关文章

  • 浅谈接口测试(一)简单的开始

    当前的风气是,谈测试,必言“接口”。其实接口并不神秘,当今的应用中无处不是“接口”,从本篇开始让我来谈一些关于接口...

  • 浅谈接口测试

    前言:没有接触接口测试之前,可能会对做接口测试感到无所适从。看再多的文档,不如动手实践来得快啦。当然,目前接触到的...

  • 浅谈接口测试

    什么是接口测试 百度百科上面是这么说的:接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统...

  • 浅谈接口测试

    工作中经常听同事去说接口,自己也经常会会去测试一下开发写的接口是否正确,发送一个值,看返回的结果是否正确。自然而然...

  • 接口测试工具简单使用

    一、webservice接口测试 测试webservice接口,可以使用soapUI来进行测试,下面简单用soap...

  • 利用jmeter做接口测试的方案

    一、为什么要进行接口测试 在分层测试中,单元测试→接口测试→UI测试 (这种简单分层)下,在接口层是最有价值做自动...

  • 2020-07-02

    浅谈 浅谈模块设计宏内核 浅谈接口设计Flags 浅谈稳定性设计重试 浅谈人员业务结构设计矩阵式 浅谈接口设计 |...

  • 老薛带你了解自动化测试之接口测试(POSTMan)

    简单的接口测试初识 一:接口测试(接口概念) 1.1 什么是接口? 接口是一种规范,方便我们在编写应用程序是需要注...

  • postman--实现接口自动化测试

    postman使用 开发中经常用postman来测试接口,一个简单的注册接口用postman测试: 接口正常工作只...

  • POSTMAN-POST接口批量测试

    postman使用 开发中经常用postman来测试接口,一个简单的注册接口用postman测试: 接口正常工作只...

网友评论

      本文标题:浅谈接口测试(一)简单的开始

      本文链接:https://www.haomeiwen.com/subject/frxsmhtx.html