接口测试核心知识点梳理和解析


主要内容:

1、什么是接口测试

2、接口都有哪些类型?

3、接口的本质是什么?

4、什么是接口测试?

5、为什么要做接口测试?

6、怎样做接口测试?

7、接口测试点是什么?

8、接口测试都要掌握哪些知识?

9、其他相关知识?

一、什么是接口?

 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互


二、接口都有哪些类型?

 接口一般分为两种:

1、程序内部的接口

2、程序对外的接口

系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他们提供的接口就能使用他写好的方法,从而达到数据共享的目的

系统内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用

接口的分类:

1、webservice接口

2、http api接口

webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试

http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式

json是一种通用的数据类型,所有的语言都认识它。(json的本质是字符串,他与其他语言无关,只是可以经过稍微加工可以转换成其他语言的数据类型,比如可以转换成python中的字典,key-value的形式,可以转换成JavaScript中的原生对象,可以转换成java中的类对象等)

三、接口的本质及其工作原理是什么?

 接口可以简单的理解是URL,工作原理是URL通过get或者post请求像服务器发送一些东西,然后得到一些相应的返回值,本质就是数据的传输与接收

四、什么是接口测试?

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

 通过URL像服务器或者其他模块等,传输我们想传输的数据,然后看看他们返回的是不是我们预期想要的

五、为什么要做接口测试?

  • 越底层发现bug,它的修复成本越低
  • 前端随便变,接口测好了,后端不用变,前后端是两拨人开发的
  • 检查系统的安全性、稳定性,前端传参不可信,比如京东购物,前端价格不可能传入-1元, 但是通过接口可以传入-1元
  • 如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案
  • 接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求,接口持续集成是为什么能低成本高收益的根源
  • 现在很多系统前后端架构是分离的,从安全层面来说:

            (1)只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易),需要后端同样进行控制,在这种情况下就需要从接口层面进行验证

            (2)前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等

 六、怎样做接口测试?

 由于项目前后端调用主要基于http协议的接口,所以测试接口时主要是通过工具或代码模拟http请求的发送与接收。工具:postman、jmeter、soupUI、java+httpclient、robotframework+httplibrary等。也可以用接口自动化来实现,就是用代码实现,框架和UI自动化差不多,发送请求用断言来判断

七、接口测试点是什么?

 目的:测试接口的正确性和稳定性

 原理:模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文处理并向客户端返回应答,客户端接收应答的过程

 重点:检查数据的交换,传递和控制管理过程,还包括处理的次数

 核心:持续集成是接口测试的核心

 优点:为高复杂性的平台带来高效的缺陷监测和质量监督能力,平台越复杂,系统越庞大,接口测试的效果越明显(提高测试效率,提升用户体验,降低研发成本)

 用例设计重点:通常情况下主要测试最外层的两类接口:数据进入系统接口(调用外部系统的参数为本系统使用)和数据流出系统接口(验证系统处理后的数据是否正常)

 PS:设计用例时还需要注意外部接口提供给使用这些接口的外部用户什么功能,外部用户真正需要什么功能

 

问题1、后端接口都测试什么?

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

 从上面这两张图对比可以看出,两个测试活动中相同的部分有功能测试、边界分析测试和性能测试,其它部分由于各自特性或关注点不同需要进行特殊的测试,在此不做讨论,接下来我们针对以上三部分相同的内容再进行分析:

1、基本功能测试:

 针对基本业务功能进行测试,所以这部分是两种测试重合度最高的一块

2、边界分析测试:

 在基本功能测试的基础上考虑输入输出的边界条件,这部分内容也会有重复的部分(比如业务规则的边界)。但是,前端的输入输出很多时候都是提供固守的值让用户选择(如下拉框),在这种情况下测试的边界范围就非常有限,但接口测试就不存在这方面的限制,相对来说接口可以覆盖的范围更广,同样的,接口出现问题的概率也更高

3、性能测试:

 App端性能主要关注与手机相关的特性,如手机cpu、内存、流量、fps等。接口性能主要关注接口响应时间、并发、服务端资源的使用情况等。两种测试的策略和方法都有很大区别,所以这部分内容是需要分开单独进行测试的

综论:

 1、接口测试和app测试的活动有部分重复的内容,主要集中在业务功能测试方面。除此之外,针对各自特性的测试都不一样,需要分别进行有针对性的测试,才能确保整个产品的质量

 2、接口测试可以关注于服务器逻辑验证,而UI测试可以关注于页面展示逻辑界面前端与服务器集成验证

 3、接口测试持续集成:

 对于接口测试而言,持续集成自动化是核心内容,通过持自动化的手段我们才能做到低成本高效益

  •  流程方面:在回归阶段加强接口异常场景的覆盖率,并逐步向系统测试,冒烟测试阶段延伸,最终达到全流程自动化
  •  结果展示:更加丰富的结果展示、趋势分析,质量统计和分析等
  •  问题定位:报错信息、日志更精准,方便问题复现与定位
  •  结果校验:加强自动化校验能力,如数据库信息校验
  •  代码覆盖率:不断尝试由目前的黑盒向白盒下探,提高代码覆盖率
  •  性能需求:完善性能测试体系,通过自动化的手段监控接口性能指标是否正常

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

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

  八、接口测试都要掌握哪些知识?

  •  了解系统及内部各个组件之间的业务逻辑交互
  •  了解接口的I/O(input/output:输入输出)
  •  了解协议的基本内容,包括:通信原理、三次握手、常用的协议类型、报文构成、数据传输方式、常见的状态码、URL构成等
  •  常用的接口测试工具,比如:jmeter、loadrunner、postman、soapUI等
  •  数据库基础操作命令(检查数据入库、提取测试数据等)
  •  常见的字符类型,比如:char、varchar、text、int、float、datatime、string等

 接口文档八要素:

 封面:封面最好是本公司规定的封面,有logo,内容标题,版本号,公司名称,文档产生日期

 修订历史:表格形式较好些,包括:版本、修订说明、修订日期、修订人、审核时间审核人等

 接口信息:接口调用方式,常用的GET/POST方式,接口地址

 功能描述:简洁清晰的描述接口功能,比如:接口获取的信息不包括哪些

 接口参数说明:每个参数都要和实际中调用的一样,包括大小写;参数的含义言简意赅的说明,格式,是string还是int还是long等格式

 说明部分,说明参数值是需要哪里提供,并详细说明参数怎么生成的,例如时间戳,是哪个时间段的,参数是否必填,一些参数是必须要有的,有些是可选参数等

 返回值说明:

  • 最好有一个模板返回值,并说明每个返回参数的意义
  • 提供一个真实的调用接口,真实的返回值

 调用限制、安全方面:加密方式,特殊加密过程双方采用一致的加密算法就可以调用接口,保证了接口调用的安全性,比如常见的md5

 文档维护:文档在维护的时候,如有修改一定要写上修改日期,修改人,对大的修改要有版本号变更

九、其他相关知识?

 get请求,post请求的区别:

  •  GET使用URL或Cookie传参,而POST将数据放在BODY中
  •  GET的URL会有长度上的限制,则POST的数据则可以非常大
  •  POST比GET安全,因为数据在地址栏上不可见
  •  一般get请求用来获取数据,post请求用来发送数据

     其实上面这几点,只有最后一点说的是比较靠谱的,第一点post请求也可以把数据放到url里面,get请求其实也没长度限制,post请求看起来参数是隐 式的,稍微安全那么一些些,但是那只是对于小白用户来说的,就算post请求,你通过抓包也是可以抓到参数的。(唯一区别就是这一点,上面3点区别都是不 准确的)

 http状态码:

  •  200   2开头的都表示这个请求发送成功,最常见的就是200,就代表这个请求是ok的,服务器也返回了
  •  300   3开头的代表重定向,最常见的是302,把这个请求重定向到别的地方了
  •  400   400代表客户端发送的请求有语法错误,401代表访问的页面没有授权,403表示没有权限访问这个页面,404代表没有这个页面
  •  500   5开头的代表服务器有异常,500代表服务器内部异常,504代表服务器端超时,没返回结果