接口测试理论
首先理解前端和后端两个概念,对于Web端来说,前端就是用户上网看到的页面,通过浏览器打开的页面都是前端,Web前端主要使用超文本标记语言HTML,层叠样式表CSS等技术开发;对于移动端来说,前端就是APP提供的交互式操作界面以及对数据进行一些简单校验等。而业务逻辑是后端通过代码编程实现的,那么软件的前后端是如何交互的呢?就通过接口进行交互,接口充当了Web前端页面或手机APP界面与后端业务逻辑交互的通道。
接口:接口可分为硬件接口(手机usb接口)和软件接口(如:登录页面)。是指系统和组件之间的交互点,通过这些交互点可以实现数据的交互。
接口的类型:
- 系统之间的接口:多个内部系统之间的交互,内部系统与外部系统之间的交互。
- 程序内部的接口:同一系统内部上层服务对下层服务进行调用,比如软件一般分为表示层,业务层,数据层。表示层调用业务层的接口来完成自己的工作,而业务层又会调用数据层的接口完成相应的业务。
接口测试:用于检测外部系统与系统之间以及系统内部各个子系统之间的交互点,测试的重点是检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系。简单来说,接口测试就是通过测试不同情况下的输入参数与相对应的返回结果,来判断软件系统前后端之间的接口是否符合或满足相应的功能性、安全性要求。
原理:
- 模拟客户端建立连接。
- 发送请求。
- 服务器处理请求并响应。
- 校验响应数据。
接口测试特点:
- 测试可以提前介入,提早发现bug,符合质量控制前移的理念。
- 可以发现一些页面操作发现不了的问题。
- 接口测试低成本高收益,因为接口测试是可以自动化并且持续集成的。
- 不同于传统的单元测试,接口测试是从用户的角度对系统进行全面的检测。
实现方式:
- 使用接口测试工具来实现。
- 通过编写代码来实现。
- 接口自动化测试:针对接口进行测试,用工具或者代码代替人来进行测试的一种活动。
HTTP协议
超本文传输协议,是一个基于请求与响应模式的,应用层协议,也是互联网上应用最为广泛的一种网络协议。
特点:
- 支持客户端/服务器模式
- 简单快速
- 灵活
- 无连接
- 无状态
URL
统一资源定位符,是互联网上标准资源的地址,HTTP使用URL来建立连接和传输数据。
格式:
http://www.itcast.cn:8080/news/index.html?uid=123&page=1
协议部分:http,常见的协议有:http,https,ftp等。
域名部分:www.itcast.cn,也可以使用ip地址作为域名使用。
端口部分:8080,端口可以省略:(默认端口:http:8080,https:443,ftp:21)
资源路径部分:/news/index.html
查询参数部分:uid=123&page=1,可以允许有镀铬参数,多个之间使用&作为分隔符。
HTTP请求
http请求由三部分组成:请求行,请求头,请求体。
请求行:第一行信息,包含请求方式,资源路径,协议以及版本。
请求头:第一行之后,空行之间的内容,主要是以键值对的形式存在。
请求体:get请求没有请求体,一般请求体在post和put请求方式中使用,位于空行之后的内容。
请求方式
GET:从服务器获取资源(一项或者多项)。
POST:在服务器新建一个资源。
PUT:在服务器更新资源(客户端提供改变后的完整资源)。
Delete:从服务器删除资源。
HTTP响应
响应由三个部分组成:状态行,响应头,响应体。
状态行:第一行信息
响应头:第一行之后,空行之前。键值对的形式存在,用于描述服务器相关信息。
重定向:类似于输入旧网址返回新地址
接口规范
RESTful:
一种软件架构风格,设计风格,而不是标准,只是提供了一组设计原则和约束条件。
示例:
URL:协议://域名:端口号/资源路径/{资源集合}/{指定资源}
请求方法:get/post/put/delete
状态码:200/201/204
重点:
请求方法与状态码对应:
查询操作:请求方法 get 响应状态码 200
新增操作:请求方法 post 响应状态码 201
修改操作:请求方法 put 响应状态码 201
删除操作:请求方法delete 响应状态码204
接口测试流程
- 需求分析:主要根据需求文档。
- 接口文档解析(API文档):一般由开发人员编写接口文档。
- 设计测试用例。
- 执行测试
a)使用接口测试工具实现。
b)通过编写代码实现。 - 接口缺陷管理追踪。
- 生成测试报告。
- 接口自动化持续集成。
API文档(接口文档)
一般由开发人员编写,用来描述系统所提供接口信息的文档,大家都根据这个文档进行开发,并且需要一直维护和遵守。
接口文档内容
一个规范的接口文档,要包含以下信息。
基本信息:
接口名称,请求方式,接口地址(path),接口描述
请求参数:
请求头(headers)
请求体(body):包含具体的请求参数名称,参数类型,是否必须,示例,备注。
响应数据:不同情况的响应状态码。
接口测试的测试点:
功能测试:验证接口功能是否满足接口文档实现(输入+处理+输出)
单接口测试:
正向功能(通过性测试)
a)仅必填参数
b)全部参数
c)参数组合
反向测试(异常测试)
a)参数异常:无参,少参,多参,错误参数
b)数据异常:数据为空,长度不符,类型不符,错误数据
c)业务数据异常:结合业务功能考虑输出的各种异常返回情况。
多接口测试:业务场景功能测试(站在用户角度考虑常用的使用场景)
a)接口之间数据依赖。
接口用例模版
功能测试用例模版:
- 用例编号
- 用例标题
- 测试项目
- 用例级别
- 预置条件
- 测试输入
- 执行步骤
- 预期结果
接口测试用例模版:
- ID
- 模块
- 用例标题
- 接口名称
- 请求
-
- 请求URL
-
- 请求方法
-
- 请求头
-
- 请求数据类型
-
- 请求体(请求参数)
- 预期结果
-
- 响应状态码
-
- 响应数据
- 响应数据
Postman 断言
断言:通过代码自动判断实际运行的结果是否与测试用例中的预期结果一致。
断言结果:
结果一致:测试通过pass。
结果不一致:测试不通过fail。
Postman
postman的断言
- 使用javascript语言编写的,写在postman的tests标签中
- tests中的脚本在发送请求之后执行,他会把断言的结果最终在test results标签页中
postman的常用断言
- 断言响应状态码是否为200
- 断言响应体json数据校验
- 断言响应体是否包含指定字符串
- 断言响应体是否等于指定字符串
- 断言响应头是否包含指定的头信息
排错
- 检查断言代码片段是否选择错误。
- 检查断言代码是否设置错了预期结果或者判断实际结果的字段选择错误。
- 先点击发送,基于响应中的body做初步预判。
- 检查请求相关参数(请求方式,请求头,请求体)。
环境变量和全局变量
全局变量:作用范围是针对postman下面所有的测试集均生效,是全局惟一的,不可重复定义的变量。
环境变量:
- 只对选择了对应环境的测试集生效,一个变量只能属于某个环境,在某个环境中变量不可重复定义。
- 环境与环境之间可以定义重复的变量。
- 常见的环境分类:开发环境,测试环境,生产环境。
- 一套环境中变量不能重复,但是可以定义多个不重复的变量。
全局变量-手动设置
环境变量-手动设置
当环境变量与全局变量重名时,优先使用被选择的环境中的环境变量
全局变量-代码设置
环境变量-代码设置
post关联
当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时就需要用到关联处理。
即后一个接口的请求需要依赖前一个接口的响应数据,一般通过全局变量或者环境变量来进行参数在接口之间的传递。
基于天气接口返回在百度查询城市信息
进行接口的传递
请求前置脚本
就是在pre-request-script标签中所编写的脚本,是在请求发送之前要执行的代码片段
应用场景:
- 请求url中需要包含一个随机数或者时间戳
- 请求之间需要对请求参数作进一步处理(如:对敏感参数进行加密)
批量执行测试用例
要想批量执行测试用例,需要先把接口请求添加到测试集中,通过运行测试集的方法可以实现批量运行测试用例。
读取外部文件实现参数化
应用场景:针对某个接口,如果有大量的测试数据需要批量验证,可以把测试数据保存到数据文件中,通过参数化的方式来实现。
定义数据文件:常见的数据文件格式有:csv,json
操作步骤:
- 准备测试数据文件
- 设置参数
a) 在请求中使用时,直接通过{{变量名}}引用
b) 在断言中使用时,需要借助postman内置的data方法来进行使用,如data.username - 选择数据文件进行批量执行
- 结果检查
最终结果如下:3个用例均pass
若是json文件,则将文件后缀改成.json即可
生成测试报告
导出测试用例
导出全局、环境变量
最终结果如下