接口测试必知必会

猪小花1号2018-09-07 16:12
作者:刘卓

一、概念(出自百度百科)
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

二、接口测试原理
模拟客户端向服务器发送报文请求,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收应答的一个过程。

三、接口测试流程
接口测试的流程其实和功能测试流程类似,包括:
需求评审-需求确定-接口设计&接口定义(开发)-根据需求文档和接口定义设计接口测试用例(测试)-用例评审-接口开发-接口自测(开发)-接口提测-执行接口测试

四、接口测试数据准备
接口测试的数据准备,目前有如下两个方面:
1. 直接操作数据库,写sql语句进行各种数据的构造,这样比较灵活,想使用什么数据就构造什么数据;这种方法在实际中会遇到问题,比如说对一个接口的数据准备,可能涉及到4-5个表操作,而且每个表之间都有一定的关系,这样插入数据就比较复杂;再比如说数据的存库格式变化了,可能也会导致之前的用例运行失败;
2. 直接通过调用其它API的方式准备数据,这种情况在测试最上层服务的时候比较有用;比如说我要测试删除问卷接口,首先调用新建问卷接口进行数据准备,再执行删除问卷接口进行这个接口的测试;当然,这种数据准备方法也会存在一定问题,它依赖数据准备接口的正确性,如果接口用例运行失败,要去定位是哪个接口的问题,而且接口用例中各个API的耦合度比较高;

在工作中,我们可以根据实际情况,去选择数据准备的方法,比如对于数据库操作很方便的情况,我们就直接操作数据库;对于逻辑比较复杂,数据库操作需要多张表的情况,可以考虑用调用其它API的方式准备数据。

五、接口测试数据清理
接着上面所说的数据准备,肯定要有测试完成之后的数据清理,同样也有两种方法:
1. 直接操作数据库,执行delete操作
2. 调用删除接口进行数据清理
数据清理是非常重要的,能够防止测试库垃圾数据的产生,减少对其它测试用例的数据影响。

六、接口测试用例设计
接口测试用例的设计方法其实和功能测试用例的设计方法类似,因为接口是需要满足需求的,而接口测试所依赖的也是需求文档,但是,因为接口测试毕竟是通过代码去测试代码,所以为了保证覆盖率,可能会使用到单元测试方法,具体的测试用例设计,参考如下:

1 输入参数测试
对输入对参数进行测试,也就是说对参数各种取值情况进行测试,确保接口对任意类型对输入都做了相应的处理:
1-1 输入参数合法
1-2 输入参数不合法
1)输入参数为空
2)输入参数为null(例如:昵称为null的用户,在支付页点支付时页面会崩溃)
3)输入参数超长
4)输入参数包括异常字符
5)输入参数包含空格
6)是否是必要参数
1-3 需要登陆才能访问的接口,在未登录时访问;
1-4 不是当前登录用户的信息,是否可以通过接口返回;(例如: 接口g.caipiao.163.com/t/address/address_getAddressById.html 如果addressId不是该用户的返回参数错误
1-5 不符合业务逻辑的输入;(比如一元乐购下单接口,支付金额不能是小数,购买的每份都应该是整数)
1-6 接口是否可以重复执行,重复插入数据库
2. 对于返回值的校验
2-1 根据接口文档描述,接口返回状态码是否正确;
2-2 根据接口文档描述,接口返回结果描述是否正确;
2-3 要对接口返回的各个字段值进行正确性校验;(尤其是比较重要的返回,比如说参与份数,剩余份数,参与时间,开奖时间等等)

3 功能测试
接口是否满足了所提供的功能,相当于是正常情况的测试。如果一个接口的功能复杂,建议对接口用例进行结构划分,这样用例具有更好对可读性和维护性。比如说对于同样一个下单接口,大盘彩和竞彩返回的数据结构就不同,为了保证用例的健壮性,就应该对用例进行结构划分,针对不同情况进行不同的处理方式。

4 逻辑测试
逻辑测试严格讲应为单元测试,应该保证内部逻辑的正确性。根据开发提供的接口文档写接口测试用例,可能还是会有遗漏的测试点,这就需要我们去看开发的代码,去看程序里面是怎么写的逻辑,代码里是怎么对参数进行的校验,涉及了哪些种情况,是否有接口文档里没写的情况,用这种方法去完善接口测试用例,以求达到用例的全面覆盖。

5 异常情况测试
测试接口实现是否对异常情况都进行了处理,接口的输入参数虽然合法,但是在接口运行中,也会出现异常,因为异常并不一定是输入参数造成的,也可能是其它逻辑造成的,所以需要对任何异常都进行处理。

异常情况
  1. 网络异常情况(断网,弱网),接口返回;
  2. 数据库连不上时,接口返回情况;
  3. 对访问频繁的接口要进行压力测试;(比如首页的一些接口,下单接口,查询频繁的接口)
  4. 用不同的移动设备访问接口;(例如:用户登录接口多台机器同时登录一个账号出现问题,主键冲突)
  5. 对于同一个接口,是否分客户端新老版本进行了不同的处理;

七、接口测试用例示例
接口名称 添加地址接口
接口地址
http://api.g.caipiao.163.com/
address/address_add.html?accountId=&sessionId=&na
me=&mobile
=&address=&cityId=&areaId
=&provinceId=
接口负责人 张伟栋
用例编号 用例标题 操作步骤        输入   数据 预期结果
1 未登录 执行接口 未登录 接口返回正确
2 添加成功 执行接口 各个参数正确 接口返回正确result=100
resultDesc:成功
3 参数为空 执行接口 参数全为空 接口返回正确result=-101
resultDesc:请求参数输入不完整,请重新输入
4 登陆过期 执行接口 参数正确 不能添加成功
5 Name长度为最大值 执行接口 Name=25个字符 可以添加成功
6 Name长度超限 执行接口 Name大于25个字符 不能添加成功
result=-1
resultDesc: 收货人姓名太长
7 Name异常字符 执行接口 Name=!@#$%^ 可以添加成功
8 Mobile长度为最大值 执行接口 Mobile=20个数字 可以添加成功
9 Mobile长度超限 执行接口 Mobile大于10个数字 不能添加成功
result=-1
resultDesc: 手机号码格式不正确
10 Mobile非数字 执行接口 Mobile=abcd&*()!@# 不能添加成功
11 添加地址数量超限 执行接口
result=-1
resultDesc: 地址数量已超过允许的最大值
12 accountId和sessionId不匹配 执行接口
不能添加成功
"-103","验证失败,userName和sessionId不匹配!"
八、接口测试踩过的坑:
1. 在根据接口文档测试接口的时候,接口测试通过;当系统页面提交测试之后,发现页面上没有调用这个接口,原来是前端没有加这个接口;由此可见接口测试和页面功能测试不能独立开来,要结合在一起测试,要知道被测接口是对应着页面上的哪个功能模块,这样才能达到测试的闭环;
2. 有的时候页面功能正确了,但并不能说明代码是没有问题的,可能对于一些数据的处理不正确,因为没有影响功能,所以在功能测试时,不容易发现,也发现不了;
比如在页面上执行了删除操作,在页面上看记录是没有了,但是我们在测试删除接口的时候,发现有一个关联表的记录没有被删除,这个虽然不影响功能,但是会产生垃圾数据,如果系统的运行时间越来越长,垃圾数据越来越多,对数据库的稳定性和系统的健壮性都会有隐藏的风险;由此可见接口测试的重要性



九、接口测试工具有哪些
1 Wireshark
用来获取网络数据封包,包括http,TCP,UDP,等网络协议包
抓包查看接口传入参数和返回参数是否正确

2 Postman
不仅可以调试简单的css html 脚本等简单的网页基本信息,还可以发送几乎所有类型的HTTP请求!Postman在发送网络HTTP请求方面可以说是Chrome插件类产品中的代表产品之一。


3 HttpRequester
firefox上的一个插件工具,可以模拟多种请求,界面简单清晰,容易上手



网易云大礼包:https://www.163yun.com/gift

本文来自网易实践者社区,经作者刘卓授权发布