浅谈接口测试(五)再谈postman

发表于:2020-10-22 09:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:茧城寒舍    来源:简书

  假设我们的需求发生了改变,增加了如下一个限制条件:
  只有登录用户,返回数据
  非登录用户,访问返回指定提示,不返回列表数据
  根据这个分析,我嫩可能采取一下的方式来实现:
  创建一个登录接口,登录成功返回指定信息作为登录凭证
  getList访问时,携带获取的凭证作为参数,没有该参数,或者参数校验失败,返回空列表和提示信息
  有了以上的分析结果,我们来创建一个登录接口文件(login.php)如下:
<?php

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

// 较密用的key
$key = 'zhqzs';

// 获取参数
$name = $_GET['name'];
$pwd = $_GET['pwd'];

/**
 * 在真正的开发过程中,会操作数据库,我们暂时用一个多维数组代替
 */
$users = array(
    array('name' => 'zhq','pwd' => '123456','nick' => '天下第一帅'),
    array('name' => 'tom','pwd' => '654321', 'nick' => '帅的不明显')
);

$tokens = array(
    'zhq' => 'db16f83919890274272f4517fbba9d76',
    'tom' => 'e10adc3949ba59abbe56e057f20f883e'
);

foreach($users as $key=>$value){

    if($value['name']==$name && $value['pwd']==$pwd){
        // 一通骚操作后,给$token赋值
        $token = $tokens[$name];    // 看门大爷登记,发证
        $nick_name = $value['nick'];
    }
}

// 组织的数据
$data = array(
    'code' => 200,
    'msg' => '请求成功',
    'result' => array(
        'name' => $name,
        'nick' => $nick_name,
        'token' => $token,
    ),
);

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

// 打印结果
echo $rst;
  1. 接口间的依赖
  如果访问接口B之前,必须调用A接口,或者满足A条件,那我管A叫做B的依赖
  我们把相互依赖的接口放到一个集合中,演示中我们仍然放到TestDemo集合中
  我们点击集合右侧的按钮,然后按照提示可以完成对于集合的请求测试
  我们依然可以运行成功,没有提示任何错误,这是因为我们没有对于接口getList添加必要的参数和处理的代码,所哟我们需要修改getList_fix增加以下代码:
$token = isset($_GET['token']) ? $_GET['token'] : '';

if(!$token){
    // 组织的数据
    $data = array(
        'code' => 401,
        'msg' => '未登录,请先登录',
        'result' => array()
    );
     // PHP数组转json
     $rst = json_encode($data,JSON_UNESCAPED_UNICODE);

    // 打印结果
    echo $rst;

    die();
}
  我们把postman中getList的接口url修改为getList_fix1.php,在此运行集合测试,结果如下图:
  这个结果,证明了我们的修改生效,下面我们怎样建立getList对login的依赖呢?
  创建一个环境TestDemo,添加一个变量token
  在两个接口中的tests(断言区域)修改代码
  创建一个环境TestDemo,添加一个变量token
  增加了环境和变量之后,回到postman主界面,下拉为当前集合选择环境为TestDemo
  在两个接口中的tests(断言区域)修改代码
  对于login的tests修改:
//获得token
var jsonData = pm.response.json();
var token = jsonData.result.token;
//设置环境中的token变量为响应结果中的token
pm.environment.set("token", token);
  对于getList_fix1的修改,只需要在访问时携带token参数,这个参数从环境中获取即可,具体修改如下图:
  我们在此执行集合测试,结果如下:
  总结接口之间互相依赖的测试原理是:
  接口A通过代码 修改环境变量的值
  接口B通过{{变量名}}获取A设置的变量值
  集合中A----B顺序执行
  ps: 其实和依赖相关的还有一个执行顺序,条件分支的操作,但是由于过于复杂的测试操作,增加了测试本身的难度和出错概率,我们在这不讲了,有兴趣的可以自行查找setNextRequest的关键字
  2. 迭代
  对于一个接口来说,当接口的参数发生改变,可能返回不同结果,对于测试来说,设计不同用例,覆盖尽可能多的场景,我们以login为例,进行分析:
  登录成功场景
  使用zhq + 正确密码
  使用tom + 正确密码
  登录失败场景
  使用 zhq + 错误密码
  使用 tom + 错误密码
  使用 lucy + 任意字符
  在进行测试之前,我们先修改login.php为login1.php增加处理登录失败场景的代码:
// 遍历完成后使用一个变量记录状态,如果存在就是真,如果没有就是假
$flag = isSet($token) ? true : false ;


if($flag){
    // 组织的数据
    $data = array(
        'code' => 200,
        'msg' => '请求成功',
        'result' => array(
            'name' => $name,
            'nick' => $nick_name,
            'token' => $token,
        ),

    );
}else{
    $data = array(
        'code' => 200,
        'msg' => '账号或者密码错误',
        'result' => array()
    );
}
  那么我们针对以上的分析,难道要添加N多个请求吗?答案是否定的,postman为我们设计了迭代器,下面我们新建一个集合TestDemo2,只针对login1接口进行测试:
  在login1接口tests中增加断言如下:
var jsonData = pm.response.json();

var expect_msg = pm.variables.get("msg");

var response_msg = jsonData.msg;

pm.test("返回信息正常", function () {

    pm.expect(response_msg).to.eql(expect_msg);
});
  修改接口访问参数,使用{{}}代替:
  当前变量肯定是没有的,需要在文件中读取
  创建一个data.csv文件,文件内容如下:
name,pwd,msg
zhq,123456,登录成功
tom,654321,登录成功
zhq,222323,账号或者密码错误
tom,ddddd,账号或者密码错误
lucy,eeeee,账号或者密码错误
  点击集合右侧run按钮,在选择数据文件界面选择data.csv
  执行集合测试,查看结果:
  postman作为一款很流程的接口测试软件,功能自然强大无比,在简短的文字根本没有办法全部交代清除,一些功能还要结合实际应用,在这里就不过多讲解了,有需要的同学可自己百度
  下一小节,我们对于接口测试进行一些补充说明
  3. 总结
  使用postman的环境设置变量
  设置接口之间的依赖
  使用postman的迭代器
  集合测试时,使用文件中的数据

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号