再说接口测试
写在前面
为什么要做接口测试?这个命题本身就是一个比较宽泛的范畴,我也是在工作和学习中对这个命题常思考、常更新,不断丰富对接口测试的理解。
端午假期,没有外出安排,放下火热的俄罗斯世界杯,正是学习总结的好时间,哈哈。在testerhome论坛上看到了一篇虽然篇幅短小,但是质量很好的文章,促使我自己也想写点东西,当作记录。
先搬运一下维基百科上的英文解释:
翻译过来就是:
一、接口测试的意义
1. 更早的发现问题
测试工作应该更早地介入到项目开发中,测试应该更早的介入到项目开发中,因为越早的发现 bug,修复的成本越低。然而功能测试必须要等到系统提供可测试的界面才能对系统进行测试。而接口测试可以功能界面开发出来之前对系统进行测试。系统接口是上层功能的基础,接口测试可以更早更低成本的发现和解决问题。
然而,在实际的开发过程中,开发人员并没有充足的时间去编写单元测试,并且他们往往对自己编写的 代码有足够的信心,不愿意将“浪费”时间在编写单元测试上面。这个时候接口测试的作用就会变得更加重要。
2.缩短产品研发周期
对于产品研发周期来说,如果将所有测试工作都集中在功能测试阶段。那么测试的问题和修复周期就会变长。因为测试可以更早的介入产品开发中,所以,可以有效的控制功能阶段 bug的数量;从而有效的缩短产品开发周期。
3.发现更底层的问题
系统的有些底层逻辑是在UI功能测试中不太容易触发的,那么这些逻辑可能会存在问题。接口测试可以更容易更全面的测试到这些底层的逻辑。
4.检查服务器的异常处理能力
通常把前端的验证称为弱验证,因为它很容易被绕过,这个时候如果只站在功能的层面进行测试, 就很难发现一些安全的问题。不以功能为入口的接口测试就会很容易的验证这些异常情况。
二、案例
某公司发现,价值100元的商品,在该公司网上商城被以0.01元买走了很多。攻城狮们火速定位,问题原因很快被找到了,原来是购买商品接口的bug。该接口需要3个参数:商品id、商品单价、购买数量,而服务器根据接口传过来的商品单价(0.01元)生成了订单。服务器本应根据数据库中的商品单价100元来生成订单。如下图,我们将页面上的单价修改后,再购买,提交到服务器的商品单价就是0.01元。
作为测试工程师的你,有做过这种测试吗?
如果没有强烈建议你赶紧补充测试。侥幸是测试工程师的最大天敌之一。
2.1 接口是什么
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。举个例子,我提供加法的计算接口,你给我两个数,我就给你返回一个和。
2.2 什么是接口测试
狭义的接口测试指的是对接口进行测试,上个例子中测试的是不同输入参数时,我加法的返回是否正确。一般讲的接口测试是这种。
广义的接口测试包含接口提供方、接口调用方的测试。 比如,你调用我的接口执行加法,我返回错误的响应,或者我响应超时,这时你的处理是否正确。(也就是客户端容错)
2.3 为什么要做接口测试
上面的案例就能说明做接口测试的重要性。一般做接口测试有如下原因:
- 一般的功能测试,覆盖不到多种情况。(如上例所示)
- 从安全角度考虑,只依赖于前端的校验不能满足要求,需要服务端也要做校验,比如:APP上一个充值的界面,充值金额输入框不能输入负数,测试时,我们要确保服务器也做了这个校验。有一万种手段绕过前端验证。
- 从安全的角度考虑,用户密码、其他用户隐私信息传输时都需要进行加密。
- 当APP的代码不更新,而服务端代码更新时,直接通过接口自动化测试就能快速知道是否影响APP的功能。(服务端开发新的接口,是否会对现有接口有影响,影响客户端)
- 很多系统是没有界面的,只提供接口功能,没法通过界面的方式进行测试。
2.4 接口测试流程
1、 项目启动后,测试人员要尽早找到开发人员拿到接口测试文档
2、 获取接口测试文档后,就可以进行接口用例的编写和调试
3、 接口用例编写调试完成后,部署到持续集成的测试环境中
4、 设定脚本运行频率,告警方式等基本参数,进行接口的日常监控
5、 每日进行接口脚本的维护更新,接口异常的处理
2.5 怎么做接口测试
“怎么做接口测试”这个问题可以分解为两个问题:
2.5.1 怎么设计接口测试用例:
2.5.2 怎么执行接口测试:
1.Fiddler、SOAPUI、PostMan等可以做半自动的接口自动化测试;
2.使用Robot Framework做全自动化的接口自动化测试;
3.自己用代码做全自动的接口自动化测试,如Python + unittest;
”’接口测试相对容易实现自动化,也容易实现持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。”’
”’通过持续集成的接口监控能够及时的发现项目中存在的问题,这对持续运营的项目来说,非常重要。”’
二、实例中大部分内容来自: