一、介绍
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。
测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
二、为什么要做?
1.越早越底层发现问题,其修复成本越小,测试周期越短(系统越复杂效果越明显)
2.可以执行功能测试无法模拟的测试场景(如:修改订单数据等)
3.通过对接口的功能、性能等测试,保证接口质量,提高接口的健壮性(质量越差对客户端影响越大)
4.接口测试相对UI更容易实现自动化持续集成,满足后端快速发版需求的同时也能缩短测试周期
5.接口测试可以检查系统的异常处理能力
6.很多系统是前后端分离的,从安全层面来讲,仅依赖前端进行限制完全不够,需要后端配合同样做限制,在这种场景下也需要从接口来验(如:前后端传输、用户隐私、日志打印等关键信息是否经过加密处理)
误区:接口测试能取代功能测试、能完全覆盖所有功能、脚本一劳永逸等
三、怎么做?
制定测试计划,需求分析、评审接口测试功能点、资源申请(人员、时间、机器)、选择测试工具/脚本语言、性能指标、兼容性(如果涉及到新老接口)、测试用例设计等
四、测试工具
HTTP接口测试工具有Jmeter、Postman、SoupUI等,企业用的较多的是前两个工具,当然也可以通过脚本语言来做接口测试,好处后期做自动化持续集成更好维护
五、测试关注点
1.功能测试
1.1通用接口用例设计
(1).参数验证:即接口入参,分为正常入参、异常入参(参数异常、数据异常)、参数默认值、参数必填、参数组合验证
正常入参:根据接口文档的入参标准,输入正常参数,验证响应是按照接口文档中的约定条件正常返回
异常入参:a.参数异常:错误参数、为空、多参、少参情况
b.数据异常:数据类型错误、非空参数为空、长度不符合设计、规定范围外的数据、不合法成员、特殊或敏感字符、存在关联关系的参数数据异常等
默认值参数:非必填参数的默认值验证
必填参数:未填写必填参数,和填写参数为null/空格等用例来验证
(2).返回值测试:验证其内容和类型是按照接口接口文档约定的返回
(3).报文格式测试:通常报文格式是json串,传入非json串,验证接口返回的code码是否符合接口文档约定
(4).兼容性测试:仅接口做了调整,前端没有变更,此时需验证新接口是否满足旧的调用方式
(5).code码测试:通用错误码与业务错误码是否能够清晰的说明调用问题,错误码是否能够尽可能全的覆盖所有情况
1.2场景用例
根据业务场景设计测试用例,通常大部分与功能测试用例一样,接口测试主要关注流程和数据的传输
2.接口性能
2.1.指定性能测试计划,分别检测单接口和全链路性能,响应TPS、响应时间,资源利用率、错误率
2.2.检测接口稳定性,以及以上各指标是否正常
3.接口安全
3.1.参数加密:如登录接口-用户账号、密码要经过加密处理,验证加密规则是否容易破解
3.2.身份授权:如下单接口-只有商家可修改商品价格,买家是不可修改的
3.3.密码安全规则:密码复杂程度校验
3.4.绕过验证:如下单接口-前端给服务端报文前,修改订单价格,提交给服务端后,验证服务端是否有同样验证
六、接口质量评估标准
1.业务功能和规则是否完整覆盖
2.接口参数规则是否达标(根据业务规则、接口设计文档)
3.接口异常场景覆盖是否完整
4.接口覆盖率是否符合要求
5.接口性能、安全性是否符合要求
6.代码覆盖率是否达到要求(一般在做单元测试好统计些)
七、接口自动化
我采用python+pytest+allure框架做接口自动化,具体可参考我自动化文章,这里不做太多赘述
八、持续集成
工具用到了jenkins,将接口测试脚本部署到jenkins,来实现定时执行、线上监控等作用