postman学习笔记与相关⾯试题(含部分接⼝测试知识,可⽤
于Jmeter的运⽤)
⼀、了解
1、什么是接⼝(API)?
内部接⼝:开发⼈员⾃⾏开发,对⾃⼰的系统提供模块之间数据交互。
⽤户接触不到,对安全性的要求不⾼。
外部接⼝:
系统对外提供的服务接⼝(银⾏:提供接⼝给等应⽤);
对安全⾮常重视,所以测试的覆盖率需达到极致。
开发系统调⽤外部的接⼝(电商项⽬:使⽤、⽀付宝的接⼝)。
只需要测试正例即可。
总结:软件提供给外部的⼀种服务,主要⽤于交互数据。
2、为什么需要接⼝?
能够让内部的数据被外部进⾏修改(银⾏---)。
3、为什么要做接⼝测试?
①项⽬前后端分离(mock server---前端)。
②基于安全考虑:前端js认证容易绕过,直接攻击后端接⼝,所以需要在接⼝层⾯对安全性做考虑 。(⾝份证、银⾏卡)=>使⽤鉴权码接⼝鉴权=>token、access-token、csrf-token、key。
③测试左移。(在开发阶段,尽早发现问题)
⼆、本质(函数---动作、⽅法)
接⼝协议:http/https、webservice、dubbo
接⼝测试的本质—>测试接⼝(函数)是否能够正常实现数据交互、异常场景提⽰、权限控制(token)
三、接⼝返回的数据格式
1、json:http、dubbo
返回数据常见规则:{error_code:错误码,message:错误码的中⽂说明,data:[]}
json数据详解:是⼀种数据格式,两种数据类型:
①键值对{key:value}
②列表[value1,value2,value3]
2、html:http
3、xml:webservice
四、接⼝架构
轻量级的、简单的、基于XML协议的规范。
2、RPC:
远程调⽤,它像调⽤本地服务⼀样去调⽤远程服务器的接⼝服务。
1. dubbo协议,阿⾥RPC架构,接⼝地址:dubbo://......;适⽤于数据量少的情况下的⾼并发。
2. 基于SpringCloud的服务,微服务技术。
3. thrift、RMI、Hessiasn。
它将⽹络上的事物看成是资源,含xml、json、jpg,所有的操作⽆状态。
同样的接⼝地址(例如⽤户地址),不同的请求⽅式结果不同,get查询⽤户、post新增⽤户、put修改⽤户、delete删除⽤户。
五、实际测试流程
1、拿到api接⼝⽂档(没有的情况下可通过抓包拿到),熟悉接⼝业务流程,包括地址、鉴权⽅式、⼊参、出参、错误码;
2、编写计划和⽅案;
3、编写⽤例并评审;
4、执⾏⽤例;
5、输出报告。
六、postman界⾯功能
1、请求页⾯:
Params:表⽰get请求⽅式传参,⾃动把路径中 ? 后的参数填充
Authorization:表⽰鉴权
Headers:请求头
Body:post请求⽅式传参,其中最主要的四个类型:
form-data:表单传参(可以传键值对,也可以传⽂件);
x-www-form-url:传键值对;
raw:多种格式;
binary:传⼆进制⽂件;
Pre-request Script:请求之前的断⾔
Text:请求之后的断⾔(状态断⾔、业务断⾔)
Settings:设置(某⼀请求)
Cookies:⽤来⾃动化管理cookie信息
右侧列表:
Documentation:中⽂说明
Comments:备注
Code:导出接⼝⾃动化测试脚本
Info:信息
2、响应页⾯:
Body:返回的数据
Pretty:可切换多种格式;
raw:⽂本;
Preview:⽹页;
Cookies:响应的cookie信息
Headers:响应头
Test Results:断⾔结果
菜单栏右侧:响应码、响应信息、响应时间、响应的字节数、保存响应3、Console(最下⽅):
控制台,⽤于调适接⼝。
七、接⼝关联
注意:提取中的字典需有下标。(例:data[1])
//1、通过JSON提取器实现
//①在第⼀个接⼝中提取token
//打印返回值
//console.log(responseBody)
/
/通过JSON提取器提取鉴权码(把返回值转化为json格式的字典,保存到jsData)
var jsdata = JSON.parse(responseBody)
//提取token值
//jsdata.access-token
//把鉴权码设置为全局变量,点击右侧列表中的set a global variable(变量名称、值)
pm.globals.set("access-token",jsdata.access-token)
//②在第⼆个接⼝中使⽤{{access-token}}的形式取值
//2、正则表达式提取器
//match 匹配(new RegExp('值的前(.+?)后边界') 新创建的正则表达式)
var jsdata = responseBody.match(new RegExp('"access-token":(.+?)",'))
//打印
/
/ console.log(jsdata[1])
//设置为全局变量
pm.globals.set("access-token",jsdata[1])
//3、cookie提取器,key为cookie中含此值的键
var cookie = ResbonseCookie("key")
⼋、postman动态参数
1、内置动态参数:
{{$timestamp}} 获得时间戳(当前时间到1900年的秒数,也可以理解为较长的随机数){{$randint}} 获得0~1000的随机数(有局限)
{{$guid}} 获得随机字符串(很长)
2、⾃定义动态参数(⽆法精确断⾔的情况,例如参数中含有时间戳):
Pre-request Script(前置断⾔):
//w() 获取时间戳
var times = w()
//设为全局变量
pm.globals.set("time", time);
Body:
在body中使⽤时间戳的地⽅,将时间戳参数{{$timestamp}} 改为⾃定义动态参数{{times}}
断⾔中使⽤的取值⽅式:
//response body:contains string (断⾔返回的结果中包括有⼀个字符串)
//+表⽰拼接,get a global variable来获取
<()).to.include("xxx"+("times"));
});
九、断⾔
断⾔列表说明:
//断⾔(前6为核⼼,前四最常⽤)
status code:code is 200 (断⾔返回的状态码为200,不可缺少的)
response body:contains string (断⾔返回的结果中包括有⼀个字符串)
response body:JSON value check (断⾔返回结果中对json数据做检查)
postman在线测试response body:Is equal to a string (断⾔返回的结果等于⼀个字符串,⼀般⽤于接⼝返回的数据很少的情况下)response headers:content-Tapy header check (断⾔响应头中包含有content-type)
response time is less than 200ms (断⾔相应时间⼩于200ms)
⼗、环境变量配置
也属于全局变量(调⽤⽅法{{url}} ),作⽤不同
⼗⼀、Mock server
1、创建mock服务;
2、查看环境变量;
3、重新修改mock接⼝返回值,增加返回案例,最后请求。
注意:地址中不能有空格
⼗⼆、接⼝加密
MD5(使⽤最多):
var user = CryptoJS.MD5("账号").toString();
var pass = CryptoJS.MD5("密码").toString();
console.log()
pm.globals.set("user", user);
pm.globals.set("pass", pass);
接⼝签名(难度系数⾼,⾦融、⽀付、银⾏等项⽬)
⼗三、⾯试题
1、你对http协议了解吗?
http是⼀种超⽂本传输协议,主要作⽤是⽤于浏览器和服务器之间交互数据。交互数据分为请求和响应两个部分:
请求中包含:
请求⾏ —— 请求⽅式、请求地址、请求协议&版本
请求头(很多接⼝必须带特定的请求头,常⽤请求头):
host:请求主机
Comnction:keep-alive 保持活跃
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论