前言

对于刚接触接口测试的同学而言是否都有这些疑问

  • 后端接口都测试什么?怎么测的?
  • 后端接口测试一遍 ,前端也测试一遍,是不是重复测试了?

那么我们通过阅读下面内容来逐一解惑

一、术语&相关知识点

1、什么是接口测试?

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
webService接口和http api接口是最常见的两种接口方式,后者最常用,采用http协议,有get 和post请求方法,返回的数据是json类型,接口测试也可以说是功能测试,通过调用接口从数据库中获取到数据,返回回来。
前端和后端如果说成客户端与服务端比较好理解,在浏览器上打开一个网页,打开一个管理系统,在一个APP上操作,这些都属于前端,他的作用就是显示页面,操作页面,而处理这些业务逻辑功能比如说页面上的非空校验,业务逻辑功能能都是通过后端来实现的,而前端和后端的交互正是通过接口来交互的。

2、get请求和post请求的区别

get请求接口的请求数据是放在url里面的,post请求接口的请求数据是放在body里面的,get请求可以在浏览器中直接访问,而post请求只能借助工具完成

3、cookie和session

cookie是存放在本地的一个健值对 对应的是key-value,session是存放在服务端的一个健值对k-v

4、HTTP状态码

每个发出去的http请求,都会返回一个状态码,用来标识这个请求是否成功,常见的状态码有以下几种:
1)200 2开头的表示请求成功
2)300 3开头的代表重点向
3)400 4开头的代表客户端发送的请求有语法错误
4)500 5开头的代表服务器有异常

二、接口测试思路

1、为什么要做接口测试

a) 如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案。
b) 接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。
c) 现在很多系统前后端架构是分离的,从安全层面来说:
1、只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易), 需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。
2、前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。

2、接口测试持续集成

对接口测试而言,持续集成自动化是核心内容,通过持自动化的手段我们才能做到低成本高收益。目前我们已经实现了接口自动化,主要应用于回归阶段,后续还需要加强自动化的程度,包括但不限于下面的内容:
  a) 流程方面:在回归阶段加强接口异常场景的覆盖度,并逐步向系统测试,冒烟测试阶段延伸,最终达到全流程自动化。
  b) 结果展示:更加丰富的结果展示、趋势分析,质量统计和分析等
  c) 问题定位:报错信息、日志更精准,方便问题复现与定位。
  d) 结果校验:加强自动化校验能力,如数据库信息校验。
  e) 代码覆盖率:不断尝试由目前的黑盒向白盒下探,提高代码覆盖率。
  f) 性能需求:完善性能测试体系,通过自动化的手段监控接口性能指标是否正常。

3、接口测试的依据

接口规范文档,接口文档至少包括
1)、接口说明
2)、调用url
3)、请求方法(get\post)
4)、请求参数、参数类型、请求参数说明
5)、返回参数说明

4、接口测试质量评估标准

a) 业务功能覆盖是否完整
b) 业务规则覆盖是否完整
c) 参数验证是否达到要求(边界、业务规则)
d) 接口异常场景覆盖是否完整
e) 接口覆盖率是否达到要求
f) 代码覆盖率是否达到要求
g) 性能指标是否满足要求
h) 安全指标是否满足要求

三、接口测试实践

1、后端接口怎么测试?

我们可以从接口测试活动内容的角度下手,看一下面这张图,基本反应了当前我们项目后端接口测试的主要内容
接口测试模板.png


2、我们怎么做接口测试?

由于我们项目前后端调用主要是基于http协议的接口,所以测试接口时主要是通过工具或代码模拟http请求的发送与接收。工具有很多如:postman、jmeter、soupUI、java+httpclient、robotframework+httplibrary等。

3、后端接口测试一遍 ,前端也测试一遍,是不是重复测试了?

我们可以直接对比接口测试和app端测试活动的内容,如下图为app测试时需要覆盖或考虑内容:
API测试.png

  1. 从上面这两张图对比可以看出,两个测试活动中相同的部分有功能测试、边界分析测试和[性能测试](),其它部分由于各自特性或关注点不同需要进行特殊的测试,在此不做讨论。接下来我们针对以上三部分相同的内容再进行分析:<br />  **1)基本功能测试:**<br />  由于是针对基本业务功能进行测试,所以这部分是两种测试重合度最高的一块,开发同学通常所指的也主要是这部分的内容。<br />  **2)边界分析测试:**<br />  在基本功能测试的基础上考虑输入输出的边界条件,这部分内容也会有重复的部分(比如业务规则的边界)。但是,前端的输入输出很多时候都是提供固守的值让用户选择(如下拉框),在这种情况下测试的边界范围就非常有限,但接口测试就不存在这方面的限制,相对来说接口可以覆盖的范围更广,同样的,接口出现问题的概率也更高。<br />  **3)性能测试:**<br />  这个比较容易区分,虽然都需要做性能测试,但关注点确大不相同。App端性能主要关注与[手机]()相关的特性,如手机cpu、内存、流量、fps等。而接口性能主要关注接口响应时间、并发、服务端资源的使用情况等。两种测试时的策略和方法都有很大区别,所以这部分内容是需要分开单独进行测试的,理论上来说这也是不同的部分。<br />  综论:<br />  1)、接口测试和app测试的活动有部分重复的内容,主要集中在业务功能测试方面。除此之外,针对各自特性的测试都不一样,需要分别进行有针对性的测试,才能确保整个产品的质量。<br />  2)、接口测试可以关注于服务器逻辑验证,而UI测试可以关注于页面展示逻辑及界面前端与服务器集成验证

四、附件

API测试.xmind
接口测试用例设计模板.xmind