接口测试
接口理论
-
接口概念:系统与组建之间的交互点,通过交互点实现数据交互;
-
接口分类:硬件接口、软件接口(外部接口、内部接口)
-
接口测试的概念:针对接口进行测试,测试内容是:测试数据的交互、传递、控制管理以及各个接口之间的依赖;
-
为什么进行接口测试:①测试能提早介入;②能够发现页面发现不了的问题;③成本低效益高;
-
原理步骤:
- 第一步:模拟客户建立连接;
- 第二步:发送请求;
- 第三步:服务器处理请求并返回响应数据;
- 第四步:验证响应数据;
-
URL:资源定位符,协议://域名:端口号/资源路径?参数&参数,http端口号默认80,https端口号默认443
-
http请求:
- 请求行:包括请求方式
- 请求方式:get-没有情求体(查询);post和put有请求体(新增和修改)delete(删除资源);
- 请求路径path:url
- 请求头:
- content-Type:①application/json---json格式;②x-www-form-urlencoded:form表单;③form-data:在表单中进行文件上传时使用
- Authorization=BearerXXX(XXX表示token)
- 其他不用管
- 请求体:根据content-Type中类型,选择不同格式的请求体
- 请求行:包括请求方式
-
http响应:
- 状态码:
- 1xx:指示信息--表示请求已接收,继续处理;
- 2xx:成功--表示请求已被成功接收、理解、接受;
- 200:查询--对应get动作
- 201:新增修改-对应post和put动作
- 204:删除-对应delete动作
- 3xx:重定向--要完成请求必须进行更进一步的操作;
- 4xx:客户端错误--请求有语法错误或请求无法实现;
- 401:Unauthorized,用户没有权限(如令牌、用户名、密码错误)
- 403:Forbidden 未授权,如普通用户调用超级用户的接口
- 404:Not Found 请求资源不存在
- 5xx:服务器端错误--服务器未能实现合法的请求
- 响应数据:一般为json格式数据
- 状态码:
-
RESTful架构:REST(Representational State Transfer)的缩写。词组的翻译是"表现层状态转化"。如果一个架构符合REST原则,就称它为RESTful架构
-
测试接口流程:
*- 需求分析:主要依据需求文档
-
- 接口文档解析:一般是由开发人员编写接口文档(API文档)
-
- 设计测试用例
-
- 执行测试:①使用接口测试工具实现;②通过编写代码实现
-
- 接口缺陷管理与跟踪
-
- 生成测试报告
- 接口自动化持续集成
-
API文档:开发编写的文档,包括接口的信息
- 基本信息:包括接口名称、请求方法、请求路径、接口描述--请求行
- 请求参数:请求头和请求体,和http中的请求头和体一致
- 返回数据:响应码和响应数据--http中的响应数据一致
-
接口分析:API接口文档分析;
- 请求:拆分请求行、请求头、请求体
- 响应:拆分状态码和响应数据
接口用例设计
接口用例设计类型
- 功能测试:包括单接口测试和多接口测试(即业务场景的测试)
- 性能测试:如响应时间、并发量、吞吐量、服务器资源等等
- 安全测试:敏感数据是否加密(如密码是否进行遮挡,密码是否加密传输、密码的加密难度、密码是否可以赋值)、SQL注入、其他
接口用例设计方法
- 单接口用例设计
- 正向流程:
- 全部必填参数
- 全部参数(必填+非必填)
- 组合参数(必填+部分非必填)
- 异常或者逆向:
- 数据异常:长度、类型、是否为空、不满足业务等(注意:与功能测试一模一样)
- 参数异常:多参、少参、无参、错误参数等(注意:这个是接口测试新出现的测试点)
- 业务异常:关注业务上的异常(测试关注点:各种异常状态码测试)
- 正向流程:
- 多接口用例设计:
- 将多个业务场景涉及的接口进行组合测试(注意:接口调用的先后顺序即可)
接口用例模板

postman
安装下载:
- 下载地址: https://www.getpostman.com/downloads/
- 安装:Windows双击运行安装程序即可;
- 注册:不注册也可使用,注册后功能增多,如测试用例集、环境变量设置等等;
- 他是接口调试工具,供开发、测试人员使用;
基础使用
-
数据传递格式,get没有请求体只有请求参数且可写在url中
- form表单:最常见的post提交数据的方式,浏览器默认数据提交方式,使用x-www-form-urlencoded;
- json格式:目前最流行的数据传输格式,使用raw格式
- 请求头Headers中:content-type:application/json----json格式({"username":"15811328522", "password":"123123"});content-type:x-www-form-urlencoded----form表单格式(username:15811328522, password:123123)

请注意:两种格式的样式不一样,格式也不一样


-
postman 中的http请求:如请求头、请求体、请求行、响应状态码、响应体等

测试用例管理:项目-模块-接口
- Collection中可以包含多个文件夹,多个接口,方便进行接口管理;如项目文件夹-模块文件夹-接口请求,多级管理;
- 创建目录-Add Folder,创建多个文件夹,方便进行多级管理;
- 添加请求-Add Request,文件夹下创建多个接口,如登录相关接口放在一个文件夹中

断言:5种断言
断言:让程序判断预期结果和实际结果是否一致
postman工具自带断言:选择需要的断言即可

-
状态码为200断言:
// 判断响应状态码是否等于200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
}); -
响应体JSON数据校验,如其中的code值、value值校验、message值交易等:
pm.test("Your test name", function () {
var jsonData = pm.response.json(); //将响应中的数据存到变量jsonData中
pm.expect(jsonData.value).to.eql(100); //jsonData.value--实际结果,eql(100)--预期结果,如果是数字则不用双引号,如果是字符则需要双引号(例如:eql("操作成功");)
}); -
响应体中包含特定字符:
//响应体中包含"操作成功"字符串
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("操作成功");
}); -
判断响应体数据等于指定的字符串
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
}); -
判断响应头中包含指定的头信息
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
断言结果:

postman应用

环境/全局变量-手动/代码
- 全局变量:作用范围是针对postman下面所有测试集均生效;
- 环境变量:如开发环境、测试环境、生产环境;一个变量只能属于一个环境;
- 设置环境变量:请求中使用双大括号显示{{}},如环境变量名称都为base_url;
- URL中获取变量
- 请求头中获取变量
- 请求体中获取变量
- 方式一:手动设置环境变量和全局变量,先设置后获取

- 方式二:代码设置环境变量和全局变量;set设置

控制台输出console
1、postman底部有console,可查看控制台输出以及接口出问题时可供查询

关联:多接口依赖
关联:下一个请求中入参是前面的接口中的返回值。如登陆接口返回值中有token,这个token值可供后续的查询接口等使用;
使用步骤:
- 第一步:获取当前请求中返回值中的userId
- 第二步:将userId存储到全局变量中;
- 第三步:下一个查询接口中入参使用userId值


请求前置脚本
- 请求前置脚本:在"Pre-request Script"标签中所编写的脚本,是在请求发送之前要执行的代码片段;
- 使用场景:如请求参数中包含一个随机数或者时间戳或者请求之前需要对请求参数做进一步处理(如:对敏感参数进行加密)
- 如图:报备客户手机号,随机生成后四位的整数。可在script中写代码生产随机数或者使用函数;

多接口批量执行
- 和测试集相关,鼠标左键-》run,运行后得到结果

参数化
-
参数格式:csv和json格式,两种格式的参数文件操作流程一致,需要注意的是格式问题
//csv格式-常用
username,password
15811328522,123123
15811328523,123123//json格式
[
{"username":"15811328522","password":"123123"},
{"username":"15811328523","password":"123123"},
{"username":"15811328524","password":"123123"}
] -
参数化流程
-
第一步:准备参数化格式文件:使用notepad++软件,录入参数化文件,使用utf-8格式的文件;注意:如果在参数化的文件中有判断测试用例是否通过的结果,可以通过内置变量 data来获取,判断断言结果,如data.result(如data.name)

-
第二步:添加请求,请求参数或者body中录入需要参数化的变量,使用方式{{参数化名称,如username}},不要忘了断言

断言查看

-
第三步:通过测试集运行测试用例,导入参数化文件后点击运行即可

-
第四步:查看测试结果以及可以在console控制台查看。


-
测试报告
-
Newman:基于node.js开发的可以运行Postman脚本的工具,并可以生成测试报告;
-
安装node.js:下载地址:http://nodejs.cn/download/ 直接下载安装即可 cmd node -v nmp -v 安装成功

-
安装newman以及安装newman-reporter-html:命令行安装使用npm命令
npm install -g newman //安装newman
newman -v //查看版本
npm install -g newman-reporter-html //安装newman-reporter-html

-
离线安装newman和newman-reporter-html。将npm压缩包放在我的电脑C:\Users\ganfe\AppData\Roaming文件夹下,解压即可用。不用命令行安装;

-
导出测试集:导出的为json格式文件存储,后续可以通过这个json格式文件导入后运行我们的测试用例

导出后是json格式文件

-
导出全局变量,也是json格式

-
测试报告生成:通过命令行生成测试报告 newman run 测试脚本文件 -e 环境变量文件 -g 全局变量文件 -d 测试数据文件 -r html

生成测试报告,打开测试报告:

