Postman接口测试使用教程和接口自动化测试项目实战你要的都有

有些图片没有cv过来,建议大家边看视频边记笔记,笔记一定要自己记。
如果笔记有错误加我qq:3279793245 p22之后视频没有看
测试系统组件接口之间的一种测试
1 分类:
测试外部接口:测试被测系统和外部系统之间的接口 (只测正向)
测试内部接口:
1.内部接口只提供给内部系统使用 (公司内部使用)
2.内部接口提供给外部系统使用 (全面测试,异常场景,权限控制)
2 接口测试流程和用例设计
1 拿到接口api文档(或者f12抓包工具),熟悉接口业务,接口地址,鉴权方式,入参,错误码
2 编写接口测试用例以及评审
思路:
正例:输入正确入参,接口返回正确数据
返例:
鉴权反例:
鉴权码为空,错误,过期......
参数反例:
为空,参数类型异常,长度异常
错误码覆盖:
根据业务来定。
其他错误场景:
接口黑名单,接口调用次数限制,分页场景
3 使用postman执行测试用例
4 postman+nweman+Jenkins实现持续集成并且输出测试报告并且发送邮件。
3 postman 介绍 使用
创建项目
3.2 创建接口
get请求页签
左边竖着目录解释
collections :集合 项目
APIS: api文档
environments:环境变量
Mock servers:服务器
Monitors:监听
History:历史记录
=---------------=
横着关键字解释
Params :get传参
Authorization:鉴权
Headers :请求头
Body:post请求传参地方
none:没有参数
from-data :既可以传键值对,也可以传文件
x-www-from-urlcodend:只能传键值对
raw:传json,text,xml,html,javaScript
binary:把文件以二进制的方式传参
Pre-request Script:请求之前的脚本
Tests:请求之后的(脚本)断言
Settings:设置
Cookies:用于管理cookies信息
-----Authorization:鉴权图解
Body:post请求传参地方
from-data :既可以传键值对,也可以传文件
Cookies:用于管理cookies信息
post请求标签
Params 里可以以key-value形式添加鉴权token
响应页签
下方关键字解释
body:接口返回的数据
Pretty:以json,html,xml。。。不同格式查看返回的数据
Raw:以文本的方式查看返回的数据
PreView:以网页的形式查看返回的数据
Cookies:响应的cookies信息
Headers:响应头
Test Results:断言的结果
··· -> Save response to file : 以文件形式保存此次响应
get请求 post请求区别
get请求一般是获取数据
post请求一般是提交数据
git:
速度快
不限制参数长度
入参在url里,保密性不强 url后面加 ? 多个参数以 & 分割
post:
速度慢
限制参数长度
入参加密
4 postman环境变量 全局变量
Create Environment(环境变量):
添加环境变量:
使用环境变量:
环境变量key在URl栏里输入要用 {{}} 括起来 ,然后右上角选择对应的环境运行。
Globals(全局变量):
全局变量:能够在任何接口里面都能访问的变量
5 接口关联
1 使用json提取器实现接口关联
需求:第一个接口里有access_token,第二个接口里需要这个token,就可以把token在第一个接口里设置为全局变量。
第一个接口里的 Tests :
console.log(responseBody); //使用json提取器提取access_token值 //把返回的字符串的数据转换成对象的形式 var result = JSON.parse(responseBody); console.log(result.access_token); //把access_toekn设置为全局变量 pm.globals.set("access_token".result.access_token);
console.log(responseBody); 打印上一个接口测试里的值
var result = JSON.parse(responseBody); 把json值转为对象
console.log(result.access_token); 打印需要的值的value (value=result.key) //点左下角Consele显示控制台
pm.globals.set("access_token",result.access_token); 设置变量名称为 ‘access_token’的全局变量
高亮两行代码就可以完成
第二个接口:
value里使用{{access_token}} 获取value
图示:
不用看地址栏(url没改 )
第一个接口
第二个接口
1.1 查看环境变量和全局变量:
2 使用正则表达式提取器实现接口关联
第一个接口里的Tests:
var result = responseBody.match(new RegExp('"access_token":"(.*?)"')); console.log(result);//到这先运行一下 result会有好几个值,选择正确的值的下标放在第三行 pm.globals.set("access_token",result[1]); 设置全局变量
new RegExp('') //创建一个正则表达式 ,括号里传进的值如果加双引号,RegExp('')这个括号里就使用单引号。
new RegExp('"access_token":"(.*?)"') //黄色高亮是值的前面,橙色是值本身,值本身使用 (.*?) 代替。
原来的值为:
写完第二行先运行一下 result会有好几个值,选择正确的值的下标放在第三行。
//点左下角Consele显示控制台
第二个接口
value里使用{{access_token}} 获取value
3 内置动态参数以及自定义动态参数
postman内置动态参数:
{{$timestamp}} 生成当前时间的时间戳
{{$randomint}} 生成1-1000的随机数,有可能重复
{{$guid}} 生成一个随机的GUID的字符串
自定义动态参数
Pre-request Script()://请求之前执行的脚本在这里写代码
var times = Date.new(); pm.globals.set("times", times);
var times = Date.new(); 获得当前时间戳赋值给times
pm.globals.set("times", times); //把时间戳设置为全局变量
Body里直接使用times 。
//点左下角Consele显示控制台
6 业务闭环(增、改、查、删)和文件上传
一个业务如果有增删改查,可以按照 增 改 查 删的顺序执行接口,这样数据库就不会有多余数据。
文件上传
Body from-date file
key设置文件名字 value 选择地址
7 断言
传送门:csdn
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 header check
header报文检查
Response time is less than 200ms
响应时间小于200ms
一般状态断言只有一个,业务断言可以有多个
写在Tests
运行结束之后在 Test Results里查看结果
全局断言 :
每个接口都要写状态断言
在项目- 项目名称右键 Edit Tests 里添加状态断言
Status code: Code is 200 检查返回值是否为200
//状态断言 pm.test("检查返回状态码是否为200",function (){ pm.response.to.have.status(200); });
Response body: Contains string 检查是否含有某个关键字
一定要自定义参数,需要拼接 + pm.globals.get("key") 或者 globals["times"] 或者 globals.times都是获取全局变量
//业务断言 pm.test("检查响应中是否有token这个关键字", function () { pm.expect(pm.response.text()).to.include("token"); });
//猪猪侠215222在上面接口里是由 猪猪侠+{{times}} 组成的
//times是一个时间戳,在这里当做随机数
//业务断言 获取 值为猪猪侠times(猪猪侠215154)的key pm.test("检查是否有猪猪侠215648561", function () { //猪猪侠215222在上面接口里是由 猪猪侠+{{times}} 组成的 //times是一个时间戳,在这里当做随机数 pm.expect(pm.response.text()).to.include("猪猪侠"+ pm.globals.get("times")); pm.expect(pm.response.text()).to.include("猪猪侠"+globals["times"])); pm.expect(pm.response.text()).to.include("猪猪侠"+globals.times)); });
Response body: JSON value check
pm.test("检查errcode为0",function(){ var jsonData = pm.response.json(); pm.expect(jsonData.errcode).to.eql(0); });
8批量运行测试用例
在项目- 项目名称右键 Run collection
批量上传文件时,要在settings里General里 Working directory 下面 打开可读取文件权限
9 通过csv或者json实现数据驱动(一个接口同时运行正例和反例)
csv
1 创建data.csv文件
2 value值依次为空进行运行,查看出错后的返回值
3 所有的key,在文件的第一行用逗号隔开
4 第二行输入正确的value,逗号隔开
5 其中一个key的value为空,其他正确,
其每个key的value依次为空,几个key写几条数据
后面加上第一步各个value为空时的返回值代码
正确的参数会返回token,错误会返回错误代码
6 Params 下面 value 要改成date文件里的{{key}}
7 如果接口运行前需要token 或者鉴权验证 要先进行判断
因为错误的数据进行测试是没有token,鉴权或api验证可能不需要判断
这个里token:
如果token不等于-1 ,则获取token
if(responseBody.search("access_token")!=-1){ var result = responseBody.match(new RegExp('"access_token":"(.*?)"')); console.log(result);//到这先运行一下 result会有好几个值,选择正确的值的下标放在第三行 pm.globals.set("access_token",result[1]); 设置全局变量 };
这个token是写死的,使用csv要修改
原来的:
//业务断言 pm.test("检查响应中是否有token这个关键字", function () { pm.expect(pm.response.text()).to.include("token"); });
csv:
accert_value在data.csv里对应的就是token的key
//业务断言 pm.test("检查响应中是否有token这个关键字", function () { pm.expect(pm.response.text()).to.include(data.accert_value); });
json
创建data.json
第一行写正确数据
其他每个key的value依次为空,几个key写几条数据
后面加上第一步各个value为空时的返回值代码
正确会返回token,错误会返回错误代码
[ {"A":"1","B":"2","C":"3","accress_token":"token值4sdf6ds54gv6d4g35d4"}, {"A":"","B":"2","C":"3","accress_token":4004}, {"A":"1","B":"","C":"3","accress_token":4005}, {"A":"1","B":"2","C":"","accress_token":4006} ]
其他和csv一样
10 必须带请求头的接口
host:请求地址
Accept:客户端接收到的数据格式
Connection: 连接方式
X-Requested-With 异步请求
User-Agent: 客户端用户类型
Referer: 请求来源地址
Cookie :Cookie信息
Content-type: 请求内容格式
1 不知道用哪个请求,就把所有请求头全部复制
抓包软件
2 postman Headers-Bulk Edit 粘贴
3 删除 Host以及Host以上的内容
4 点击Key-Value Edit,然后运行一遍取消一个对号,直到运行后Body-Previwe不显示网页
11 Postman接口Mock Servier服务器
mock 模拟
后端的接口还没开发完成,前段的业务需要调用后端的接口
1 postman-Mock Servers-创建一个服务
这里是成功之后返回“ok”
2浏览器测试:
复制浏览器地址+“/接口名字”
https://b6965b04-0e94-42f0-b681-7b968017a447.mock.pstmn.io/test
11 Cookie鉴权
cookie只是一小段文本,格式key-value
原理:
1当客户端第一次访问服务器的时候,那么服务器就会生成cookie,
并且在响应头的set-cookie里面把生成的cookie信息发送个客户端,在客户端保存起来。
2当客户端以后每次访问服务器的时候,那么客户端就会在请求头的cookie带上cookie信息,
从而实现鉴权。
cookie分类
会话cookie:保存在内存里,浏览器关闭就会自动化清除cookie
持久cookie:保存在硬盘里,浏览器关闭后不会清除,只有当过期时间过了才会清除
演示:
cookie在第一个接口里,使用正则表达式把cookie设置为全局变量(需求文档会提示cookie在前端源码里的位置)
需求文档提示的token位置:
第一个接口Tests里代码:
responseBody.match(new RegExp('name="csrf_token" value="(.*?)"')); pm.globals.set("csrf_token",result[1]);
运行第一个接口,点右上角眼睛,最下面显示cookie信息
第二个接口使用设置的全局变量
点击cookies,删除全部cookie,第二个接口会访问失败
12 加密和解密
13 Newman(新男人)
newman专用于接口测试,为postman而生,可以让posman的脚本用过命令行的方式执行
运行命令:newman run
常用参数;
-e 引用环境变量
-g 引用全局变量
-d 引用数据文件
-n 指定测试用例迭代次数
-r cli,html,json,junit --reporter-html-export 指定生成html报告。
示例:
1 导出项目接口,环境,全局变量,数据文件(标题9的csv和josn格式数据文件),把这些文件放在一个空白文件夹里。
接口
环境
全局变量
数据文件
2 文件地址栏cmd
3 输入执行代码
newman run 接口文件.json -e 环境变量文件.json -g 全局变量.json -d 数据文件.json -r cli,json,unit --reporter-html-export report.html
--------------------------------------
-r cli,json,unit --reporter-html-export report.html 为固定格式 输出report.html 这个文件
在文件存放的文件夹里,有输出的html文件。