1.接口分类
外部接口--只需测试正例即可
内部接口--只提供给内部系统使用(预算系统、保单系统)---测试正例即可
内部即可---提供给外部系统使用---测试必须全面,正例、各种异常场景、权限登
2.接口测试流程
(1)拿到API文档(通过抓包工具获取),熟悉接口业务、接口地址、鉴定方式、入参、返回码
(2)编写测试用例
正例:输入正常入参,接口能够返回数据
反例:
鉴权反例:鉴权码为空、错误、过期...
参数反例:参数为空、参数类型异常、参数长度异常
错误码覆盖:根据业务而定
其他错误场景:接口黑名单、接口调用次数限制、分页场景。
(3)使用接口测试工具postman执行接口测试
(4)postman+newman+jekins实现持续集成,并且输出测试报告并且发送邮件。
3.postman 安装、注册
官网安装、注册登录
home 主页
workspaces 工作空间
collections 集合,项目集合
APIs API文档
Enviromennts 环境变量,全局变量
Mock Server 虚拟服务器
Monitors 监听器
History 历史记录
4.postman执行接口测试
(1)请求页签:
Params get请求传参
authonzation 鉴权
headers 请求头
Body post请求传参
form-data 传键值对参数或文件
x-www-form-urlencoded 只能够传键值对参数
raw json、text、xml、html、JavaScript
binary 把文件以二进制方式传参
pre-request 请求之前的脚本
tests 请求之后的断言
cookies 用于管理cookie信息
(2)响应页签
body 接口返回的数据
pretty:以json、html、xml等不同的格式查看返回的数据
raw:以文本方式查看返回的数据
preview :以网页方式查看返回的数据
cookies:响应的cookie信息
headers:响应头
tests results:断言结果
200状态吗 ok状态信息 响应时间 响应字节数 保存响应
(3)get请求和post请求的区别(面试题)
get请求一般是获取数据,post一般是提交数据。
post请求比get请求安全。
本质区别,传参方式不一样:
get请求在地址栏后面以?的方式传参,多个参数之间用&分隔。
post请求是在body以表单的方式传参。
问题:开发环境、测试环境、生产环境
接口关联:需要手动关联
参数需要手动修改
解决:
5.postman的环境变量和全局变量
环境变量就是全局变量
全局变量是能够在任何接口里面访问的变量
获取环境变量的值是通过:{{变量名}}
6.接口关联的两种方式
(1)使用json提取器实现接口关联
第一个接口:
//console.log(responseBody);
//使用json提取器提取access_token值
//把返回的字符串格式的数据转换成对象的形式
var result = JSON.parse(responseBody);
//console.log(result.access_token);
//把access_token设置为全局变量
pm.globals.set("access_token", result.access_token);
第二个接口:{{access_token}}
(2)使用正则表达式提取器实现接口关联,match匹配
第一个接口:
console.log(responseBody);
var result = responseBody.match(new RegExp('"access_token":"(.*?)"'));
//新建一个正则表达式RegExp左边界和右边界
console.log(result[1]);
//设置全局变量
pm.globals.set("access_token", "result[1]");
第二个接口:{{access_token}}
7.postman内置动态参数及自定义的动态参数
postman内置动态参数:可能没办法做断言
{{$timesstamp}}生成当前时间的时间戳
{{$randomInt}}生成0-1000之间的随机数
{{$guid}} 生成速记GUID字符串
自定义动态参数:
//手动获得时间戳
var times =Date.now();
//设置为全局变量
pm.globals.set("times",times);
使用时使用:{{times}}
8.增删改查业务闭环:
创建标签-查询标签-修改标签-删除标签-查询标签
//获得创建的标签ID
var tag_id = responseBody.match(new RegExp('"name":(.*?),'));
console.log(tag_id);
9.postman断言
Tests 里断言
常规6钟断言:
Status code :Code is 200 检查返回的状态码是否为200 状态断言
Response body:Contains string 检查响应中包括指定字符串 业务端断言
Response body:Json value check 检查响应中其中json的值
Response body:Is equal to a string 检查响应等于一个字符串
Response headers:Content-Type...检查是否包含响应头Content-Type
Response times is less than 200ms:检查请求耗时小于200ms。
在断言中获取自定义动态参数(全局变量)的方式:
pm.globals.get("times")
globals["times"]
globals.times
**全局断言:**把状态断言放在 项目-edit-tests里面,单个接口就不需要写状态断言了,只需要写业务断言。
10.postman 批量运行测试用例
项目-run collection
文件:需要把文件拷贝到工作目录,允许读取工作目录下的文件(settings里打开)
11.postman数据驱动之CSV文件和json文件的处理
params取值用{{参数名}}
断言里面取数据(表名.assert_value)
新建一个data.csv文件,填写以下内容
修改以下内容
search
选择对应接口执行
JSON文件格式,其余步骤一样
执行结果,迭代四次
json文件格式:
【
{“参数1“:”值1”,“参数2“:”值2”,““:””}
{“参数1“:”值1”,“参数2“:”值2”,““:””}
】
12.测试必须带请求头的接口
settings里关掉ssl 安全认证,headers里传入必传的请求头
常见的请求头:
Host 请求的主机地址
Connection 连接方式
Accept 客户端接收到的数据格式
X-Requested-With 异步请求
User-Agent 客户端的用户类型
Referer 来源
Cookie Cookie信息
Content-Type 请求内容的格式
不知道哪一个是必传的请求头,就全部试一遍
请求https时要禁用SSL安全认证
案例
13.postman接口Mock Servier服务器
相关视频:https://www.bilibili.com/video/BV11K4y1J7sh?p=18&spm_id_from=pageDriver
后端接口还没有开发完成,前端的业务需要调用后端的接口。
default默认里面可以改返回值,比如:{"error_code":0,msg:"返回成功",data:[]}
success
https://85483510-c7d2-4974-b3b9-58dfc9972716.mock.pstmn.io/test
https://be2e2bd9-9c35-4c05-a5d7-a5fb00aaadea.mock.pstmn.io
14.postman的Cookie鉴权、token鉴权
cookie是一小段文本,格式为key=value
cookie鉴权的原理:
- 当客户端第一次访问服务器的时候,那么服务器就会生成cookie信息,并且在响应头的set-cookie里面把生成的cookie信息发送给客户端。
- 当客户端第2-n次访问服务器的时候,那么客户端就会在请求头的cookie带上cookie信息,从而实现鉴权。
在浏览器-高级可以清除电脑目前所有的cookie
cookie的分类:
- 会话cookie:保存在内存,当浏览器关闭之后就会自动清除cookie
- 持久cookie:浏览器关闭后不会清除,只有当失效时间到了才会自动清除
token鉴权:使用正则表达式提取第一个接口返的token值
十六、Newman
postman专为接口测试而生,newman是专为postman而生。Newman可以让我们的postman的脚本通过GUI(命令行)的方式运行命令:newman run
常用参数:
-e 引用环境变量
-g 引用全局变量
-d 引用数据文件
-n 指定测试用例迭代的次数
-r cli,html,json,junit --reporter-html-export 指定生成HTML的报告
将这些文件到处到一个文件夹
目录中输入cmd------> newman run testcase.json -e environment .json -g globals.json -d data.json -r cli,html,json,junit --reporter-html-export report.html
执行成功会生成一个报告文件 report.html
十七 Postman+Newman+Jenkins实现接口测试持续集成
- 打开Jenkins
https://www.bilibili.com/video/BV11K4y1J7sh?p=21