• 一、了解

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

  • 四、接口架构

1、SOAP:webservice协议,接口地址:http://......?wsdl

  • 轻量级的、简单的、基于XML协议的规范。

2、RPC:

  • 远程调用,它像调用本地服务一样去调用远程服务器的接口服务。
  1. dubbo协议,阿里RPC架构,接口地址:dubbo://......;适用于数据量少的情况下的高并发。
  2. 基于SpringCloud的服务,微服务技术。
  3. thrift、RMI、Hessiasn。

3、RestFul(最主流):http协议,接口地址:http://......

  • 它将网络上的事物看成是资源,含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 = postman.getResbonseCookie("key")
  • 八、postman动态参数

1、内置动态参数:

{{$timestamp}}           获得时间戳(当前时间到1900年的秒数,也可以理解为较长的随机数)

{{$randint}}                 获得0~1000的随机数(有局限)

{{$guid}}                     获得随机字符串(很长)

2、自定义动态参数(无法精确断言的情况,例如参数中含有时间戳):

Pre-request Script(前置断言):

//Date.now()   获取时间戳
var times = Date.now()
//设为全局变量
pm.globals.set("time", time);

Body:

在body中使用时间戳的地方,将时间戳参数{{$timestamp}} 改为自定义动态参数{{times}}

断言中使用的取值方式:

//response body:contains string  (断言返回的结果中包括有一个字符串)
//+表示拼接,get a global variable来获取
pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("xxx"+pm.globals.get("times"));
});
  • 九、断言

断言列表说明:

//断言(前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-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 保持活跃

Content-length:内容长度

Accept:客户端接收的数据格式:text、css、applic   ation/json

X-Requested-with:XML-HttpRequest:一般用于登录接口,异步请求(ajax的技术)

User-Agent:发送请求的客户端的类型(例如,百度的查询接口必须带这个请求头——用户代理,可能是工具名称、浏览器名称、客户端角色)

Content-Type:请求的内容格式(请求的数据,表单的方式提交)

Cookie:保存cookie信息(通过cookie方式鉴权)

扩展: Cookie的工作原理【Jmeter中HTTP Cookie管理器的作用和工作原理】:

  1. 在客户端第一次访问服务器的时候,服务器会生成Cooike信息,并且在响应头的Set-Cookie里面把Cookie的信息传输到客户端;
  2. 从第2+N步的请求都会在请求头的Cookie里面自动的带上上面的Cookie信息。

作用:Cookie鉴权,证明后面的请求都是同一个客户端。

  • 请求正文

响应:响应头(set-cookie)、响应行(状态码)、响应正文(响应数据)

2、Cookie、Session、Token相同和不同点?

相同:都是服务器生成的。

不同:①Cookie保存在客户端,Session保存在服务器内存里。Session和Token可以通过Cookie传输,也可以不通过它传输;Token保存在服务器的数据库或文件里。

②Cookie不够安全,web中,session消耗服务器内存,token用于接口或app鉴权。(app中可能三种方式并存)

3、GET和POST请求的区别?

①GET一般是获取数据,POST是提取数据;

②POST比GET安全;

③最本质:传参方式不同。GET在地址栏之后,以?分隔的方式传参,多个参数之间&相隔;

POST:通过表单传参。

  • 十四、拓展

//自定义函数,请求之前睡眠4秒
const sleep = (milliseconds) => {
const start = Date.now();
while (Date.now() <= start + milliseconds){}
};
sleep(4000);

postman学习笔记与相关面试题(含部分接口测试知识,可用于Jmeter的运用)相关推荐

  1. 好记性不如烂笔头-linux学习笔记4apache相关知识

    好记性不如烂笔头-linux学习笔记4apache相关知识 apache 启动有2种模式 1是prefork模式,每个进程对应一个线程,如果是比较稳定的平台,那么prefork模式是worker模式 ...

  2. oracle创建索引index,【学习笔记】Oracle索引 创建含sysdate的函数index案例

    天萃荷净 分享一篇运维DBA需求,创建含sysdate的函数index案例 1.模拟Oracle数据库环境 创建表插入数据库 [oracle@node1 ~]$ sqlplus chf/oraclep ...

  3. Reeds-Shepp曲线学习笔记及相关思考

       本篇博客主要记录在学习Reeds-Shepp曲线过程中的笔记及相关思考和概括总结 一.主要参考资料      1.提出Reeds-Shepp曲线的原始论文:[点击此处跳转]      2.路径规 ...

  4. Dubins曲线学习笔记及相关思考

       本篇博客主要记录在学习Dubins曲线过程中的笔记及相关思考和概括总结 一.主要参考资料      1.Andy G's Blog:[点击此处跳转]      2.Andy G's Blog的P ...

  5. 2017年12月6日 学习笔记(JAVA面试题)

    前段时间都在泡图书馆,看<java核心技术卷1>.感觉好多东西会用了,但是并不知道底层实现原理,还有好多没见过的知识点概念.觉得果然还是要多读书. 接下来准备边读书,边把各种面试题提及的知 ...

  6. Python学习笔记:使用PIL批量合成jpg+png图片,用于水印、合并图片,生成YOLO数据集+标注数据等等

    [Python学习笔记] 使用PIL,批量合成jpg+png图片,用于水印.合并图片,生成YOLO数据集+标注数据等等 起因:在了解很多关于YOLOv5的相关内容,于是尝试着去训练自己的游戏目标检测模 ...

  7. 前端学习笔记一:HTML(1)预备知识及一个简单的网页

    先唠唠嗑: 选择计算机相关的专业纯粹是因为爱屋及乌(x .因此在之前的大学学习生涯中就没有专业方向的概念,(虽然代班在班会上提到过,但是大学新生嘛,都懂得(划掉 ).所上过的课程都是老师教什么就学什么 ...

  8. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

    又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...

  9. [Linux学习笔记] 浅谈信号(文章含不少学习资源)

    百金买骏马,千金买美人,万金买爵禄,何处买青春? 目录 信号的概念 信号的种类: kill -l 命令可以查看信号列表 man 7 signal 查看信号详细内容 信号的产生 补充知识 Core Du ...

最新文章

  1. python基础知识资料-Python基础知识篇 列表简介
  2. android can为啥能发收不到数据_拼多多登录时手机收不到短信验证码怎么办
  3. AI:《DEEP LEARNING’S DIMINISHING RETURNS—深度学习的收益递减》翻译与解读
  4. 2.Linux技能要求
  5. Xamarin 跨移动端开发系列(01) -- 搭建环境、编译、调试、部署、运行
  6. 从Oracle到PostgreSQL:一文掌握Checkpoint重要概念
  7. 平面/UI设计师社区交流网站集设|给你的作品多一个展示机会
  8. 子查询四(在select子句中使用子查询)
  9. Linux下zip的操作命令
  10. vb初学回顾:最大公约数 最小公倍数 素数求取
  11. Apache服务安全加固及Apache优化
  12. Linux shell脚本中判断变量文件目录:权限、是否存在、空值、相等
  13. jni c java_使用JNI在C中调用java代码
  14. 汽车系统英文缩写大全,值得收藏
  15. matlab2012b安装教程32位,Matlab2012B Windows 安装详细教程
  16. 目前SolidWorks软件哪个版本比较好用?更稳定一些?
  17. 《产品经理认证(NPDP)知识体系指南》
  18. 美化桌面软件测试面试题,软件测试面试题的经典逻辑题
  19. Android Studio安装教程(保姆级超级详细)
  20. [原创] 神的计划2 - 创世纪 - 伊甸园的故事

热门文章

  1. 华为云爆出“神器”,助力游戏AI“闯关升级”
  2. 让移动设备用上轻量级、低延迟的视觉Transformer,苹果搞了个MobileViT(ICLR 2022)...
  3. 拼音首字母缩写在线翻译源码|趣味源码
  4. 基金评价专题3:交叉积比率
  5. 互联网人应该怎么写年终总结?
  6. SAT句子填空题10个示例及答案
  7. 【Android】5,android开发app代码
  8. 监控自动上传自己的服务器,10 分钟实现一个自己的服务器监控器
  9. 4种锻炼方法保护你的视力
  10. JVM类加载机制、双亲委派机制、自定义类加载器、打破双亲委派机制