一、接口测试理论
- 接口
- 分类:
- 硬件接口
- 软件接口(软件测试讨论的主体)
- 概念:数据交互的通道
- 分类:
- 接口类型
- 系统之间的接口(如:tpshop系统与支付宝系统)
- 程序内部的接口(如:tpshop登陆系统与订单系统之间的交互)
- 注意:对测试而言,不需要区分系统之间的接口与系统内部的接口
- 接口测试
- 针对接口测试,主要是测试数据的传递、交互、控制管理过程以及接口之间的依赖
- 原理:
- 模拟客户端建立连接
- 发送请求
- 服务器处理请求并响应
- 校验响应数据
- 特点
- 测试可以提早介入,修改bug成本低,符合质量前移的理念
- 可以发现一些页面发现不了的问题
- 低成本、高收益
- 接口测试不同于单元测试,是站在用户的角度针对整体业务进行测试
- 实现方式:
- 通过工具来实现
- Postman(当前接口测试阶段学习)
- Jmeter(性能测试阶段学习)
- 通过代码来实现
- Python+Requests
- 通过工具来实现
- 接口自动化测试概念:
- 针对接口进行测试,用工具或代码替人来进行测试的一种活动
二、HTTP协议
-
介绍:超文本传输协议,一种互联网上广泛使用的方式
-
特点:
- 基于客户端与服务器模式
- 简单快速
- 灵活
- 无状态
- 无连接
-
URL格式解析【重点】
- 说明:统一资源定位法
- 格式:协议、域名、端口号、资源路径、参数
- 示例:
http://www.itcast.cn:8080/news/index.html?uid=123&page=1 - 协议:HTTP、HTTPS、FTP、SMTP/POP3/IMAP等
- 域名:可以是域名,也可以是ip地址
- 端口号:默认的端口号可以省略
- http默认是在80端口
- https默认是在443端口
- 资源路径:
- 图片、视频、音频、链接、接口等
- 参数部分:内容不会被系统解析
- ?:隔离URL主体与参数部分内容
- &:存在多个参数时,使用&进行拼接
- 示例:
-
HTTP请求
- 组成:
- 请求行:
- 位置:第一行信息
- 内容:
- 请求方式
- 资源路径
- 协议及版本
- 请求头:
- 位置:第一行之后。空行之前的内容
- 内容:
- 主要是以键值对的形式存在
- 重点掌握:Content-Type=application/json(form表单/json)
- 请求体
- 前提:get请求没有请求体,一般请求体在post和put请求方式中使用
- 位置:空行之后的内容
- 内容形式:json、html、test等
- 请求行:
- 组成:
-
请求方式说明
- get:查询数据
- post:新增数据
- put:修改数据
- delete:删除数据
-
HTTP响应
- 组成:状态行、响应头、响应体
-
状态行
- 位置:第一行信息
- 内容:
- 状态码:
- 2XX:请求成功
- 200(查询成功)
- 201(新增或修改成功)
- 204(删除成功)
- 5XX:服务端存在问题
- 500(服务器发生错误)
- 503
- 4XX:客户端存在问题
- 404(请求资源不存在)
- 401((用户没有权限)用户名或者密码不对)
- 403(用户未得到授权)
- 3XX(重定向)
- 1XX
- 2XX:请求成功
- 状态码:
-
响应头
- 位置:第一行之后,空行之前内容
- 内容:键值对形式存在,用于描述服务器相关信息
-
响应体
- 位置:空行之后的内容
- 响应数据:xml、json、html等
-
- 组成:状态行、响应头、响应体

三、接口风范
1、传统接口风格(了解)
- 不同的公司、不同的项目、不同的开发之间开发的接口风格差异很大
- 请求方式一般只使用get和post
- 响应状态码只用200表示处理成功
2、RESTful接口风范(规范)
- 规范风格:只是一种规范、不是标准或规定
- 示例:
- URL:
协议://域名:端口号/资源路径/{资源集合}/{指定资源} - 请求方法:get/post/put/delete
- 状态码:200/201/204
- URL:
- 重点:
- 请求方法与状态码的对应
- 查询操作:请求方法【get】响应状态码【200】
- 新增操作:请求方法【post】响应状态码【201】
- 修改操作:请求方法【put】响应状态码【201】
- 删除操作:请求方法【delete】响应状态码【204】
- 请求方法与状态码的对应
四、接口测试流程
1、需求分析
2、API文档(接口文档)解析
3、设计测试用例
4、执行测试用例
- 使用工具:Postman
- 使用代码:python+Requests
5、缺陷跟踪与管理
6、生成测试报告
7、实现持续集成(可选)
接口测试用例设计(重点)
接口用例模板
- 功能测试模板
- 用例编号
- 用例标题
- 测试项目
- 用例级别
- 预置条件
- 测试输入
- 执行步骤
- 预期结果
- 接口测试用例模板
- ID
- 模块
- 用例标题
- 接口名称
- 请求
- 请求URL
- 请求方法
- 请求头
- 请求数据类型
- 请求体(请求参数)
- 预期结果(响应)
- 响应状态码
- 响应数据


接口测试测试点
-
功能测试(当前阶段核心)
- 单接口测试
- 多接口测试(业务场景测试)
-
性能测试
-
安全测试
- 敏感数据是否加密
- 敏感数据是否遮挡
- 敏感数据是否可以被复制
- 敏感数据需要加密
- 敏感数据加密需要一定的难度(不容易被暴力破解)
- SQL注入
- 其他

- 敏感数据是否加密
接口用例设计方法与思路(重点)
- 单接口测试用例
- 正常测试
- 全部必填参数
- 全部参数(必填+非必填)
- 参数组合(必填+部分非必填)

- 异常测试
- 数据异常:长度、类型、是否为空、不满足业务等(注意:与功能测试一样)
- 参数异常:多参、少参、无参、错误参数等(注意:是接口测试新出新的测试点)
- 业务异常:关注业务上的异常(测试关注点:各种异常状态码测试)
- 正常测试
- 业务场景测试(多接口测试)
- 将多个业务场景涉及的接口进行组合测试
- 注意:接口调用的先后顺序即可
五、API文档
- 什么是接口文档?
- 接口文档,是一个描述接口信息(请求:请求方式、path、请求参数等,响应:状态码、响应数据等)文档
- 为什么写API文档?
- 便于前端和后端开发更好的协作
- 项目迭送或项目人员迭送时,能更好的上手与维护
- 便于测试尽早地介入
- 接口文档
- 编写:开发
- 内容:基本信息、请求参数、响应数据
- 基本信息:接口名称、请求方式、接口地址(path)、接口描述
- 请求参数:
- 请求头:(headers)
- 请求体:(body)
- 前提:post和put是有请求体
- 内容:参数名称、参数类型、是否必填、示例、备注等
- 返回数据:
- 状态码
- 响应数据:参数名称、参数类型、是否必填、示例、备注等
六、API文档解析(json↓raw反之www)
-
登录接口



-
添加员工

-
查询员工
-
修改员工

-
删除员工
Postman基础用法





请求头:KEY:Content-Type VALUE:application/json

Postman高级用法
一、用例管理
- 作用:规范法管理接口上的大量测试用例
- 实现步骤:
1、创建集合—项目(如:IHRM、tpshop)
2、创建文件夹—模块(如:登录、员工管理)
3、创建请求—测试用例(如:登录成功) - 操作演示
1、创建集合—项目

2、创建文件夹—模块


3、创建请求—测试用例



二、Postman断言
1、断言前置基础
- 断言:通过代码自动判断实际运行的结果是否与测试用例中的预期结果一致
- 断言结果:
- 结果一致:测试通过pass
- 结果不一致:测试不通过fail
- 复习:UnitTest常用断言方式有哪些?

- Postman的断言
- 使用JavaScript语言编写的,写在postman的【Tests】标签中
- 【Tests】中的脚本在发送请求之后执行,它会把断言的结果(PASS/FAIL)最终在【Test Results】标签页中
- Postman的常用断言
- 断言响应状态码是否为200(status code is 200)
- 断言响应体JSON数据校验(Response body:JSON value check)
- 断言响应体是否包含指定字符串(Response body:Contains string)
- 断言响应体是否等于指定字符串(Response body:ls eqaul to a string)
- 响应断言头是否包含指定的头信息(Response headers:Content-Type header check)
操作系列:

2、断言响应状态码(重点)
样例代码:// 断言响应状态码位200 pm.test("Status code is 200", function () { pm.response.to.have.status(200); });说明:


2.2断言JSON数据(重点)
样例代码:pm.test("Your test name", function () { var jsonData = pm.response.json(); pm.expect(jsonData.value).to.eql(100); });

排错说明
(1)检查断言代码片段是否选错了
(2)检查断言代码是否设置错了 ,预期结果或者是判断实际结果的字段选择错误
(3)先点击发送,基于响应中的boby数据做初步判断
(4)检查请求相关参数(请求方式、请求头、请求体)
2.3断言包含指定的字符串内容(知道)
样例代码: pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); });

2.4 断言等于指定的字符串(知道)
样例代码:pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string"); });

怎样完整的匹配一个JSON返回数据?
说明:用单引号将整个json数据包裹起来,作为断言的预期值即可
2.5 断言响应头标签(了解)
样例代码:pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type"); });

三、环境变量与全局变量
1、概念
- 全局变量:作用范围是针对postman 下面所有测试集均生效
- 环境变量:
- 只对选择了对应环境的测试集生效(如:选择了测试环境的环境集IHRM0720)
- 开发环境、测试环境、生产/线上环境
- 一套环境中变量不能重复、但是可以定义多个不重复的变量
2、设置变量
- 全局变量
- 手动设置
- 代码设置:
pm.globals.set("var_name",value);
- 环境变量
- 手动设置
- 代码设置:
pm.environment.set("var_name",value);
3、获取变量值
- 全局变量与环境变量
(1)请求参数中获取:{{变量名}}- URL
- 请求头
- 请求体

(2)代码中获取:
pm.globals.get("variable_key");
pm.environment.get("variable_key");
// 获取环境变量的值 mobile2和password2
var mobile=pm.environment.get("mobile2");
var password=pm.environment.get("password2");
console.log("测试环境中的mobile是"+mobile)
console.log("测试环境中的password是"+password)

四、请求前置脚本(了解)
- 介绍:

- 使用场景
- 在请求URL中需要使用随机数或时间戳
- 需要对敏感数据进行加密
- 使用案例
// 生成随机数
var r = Math.random()
console.log("生成随机数:",r)
// 通过全局变量保存随机数
pm.globals.set("g_random", "r");

五、Postman关联(重点)
1、Postman基础介绍
- Postman关联:后一个接口的请求需要依赖前一个接口的响应数据,一般通过环境变量和全局变量来进行参数在接口之间的传递
- 技术实现

例1


本文详细介绍了接口测试的理论,包括接口的分类、HTTP协议、RESTful接口风范,以及接口测试流程。重点讲解了接口测试用例设计、API文档解析、Postman的基础和高级用法,特别是Postman的断言、环境变量与全局变量的使用,以及如何进行接口关联。







1176

被折叠的 条评论
为什么被折叠?



