找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手
cookie、session 和 token 区别
1、什么是 cookie
  • cookie 是保存在本地终端的数据。cookie 由服务器生成,发送给浏览器,浏览器把 cookie 以 kv 形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该 cookie 发送给服务器。由于 cookie 是存在客户端上的,所以浏览器加入了一些限制确保 cookie 不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的 cookie 数量是有限的。
  • cookie 的组成有:名称( key )、值( value )、有效域( domain )、路径(域的路径,一般设置为全局:"\")、失效时间、安全标志(指定后,cookie 只有在使用 SSL 连接时才发送到服务器( https ))。下面是一个简单的 js 使用 cookie 的例子:

2、什么是 session
  • session 的中文翻译是"会话",当用户打开某个 web 应用时,便与 web 服务器产生一次 session。服务器使用 session 把用户的信息临时保存在了服务器上,用户离开网站后 session 会被销毁。这种用户信息存储方式相对 cookie 来说更安全,可是 session 有一个缺陷:如果 web 服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候 session会丢失。
  • session 认证流程:

  • 用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session
  • 请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器
  • 浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名
  • 当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。

  • 根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。

3、什么是token
  • token 的意思是"令牌",是用户身份的验证方式,最简单的 token 组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由 token 的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token 请求服务器)。还可以把不变的参数也放进 token,避免多次查库

token 的身份验证流程:
  • 客户端使用用户名跟密码请求登录
  • 服务端收到请求,去验证用户名与密码
  • 验证成功后,服务端会签发一个 token 并把这个 token 发送给客户端
  • 客户端收到 token 以后,会把它存储起来,比如放在 cookie 里或者 localStorage 里
  • 客户端每次向服务端请求资源的时候需要带着服务端签发的 token
  • 服务端收到请求,然后去验证客户端请求里面带着的 token ,如果验证成功,就向客户端返回请求的数据

区别点
cookie                存储在本地客户端浏览器,以键值对的形式,存储量小一个站点存储20个,1个不超过4K,安全性较差
session                存储在服务器,存储量大,安全性高,服务端生成,通过接口的返回报文头中返回
token                通过接口的返回报文体中返回


同步接口和异步接口
  • 同步接口:发起一个接口请求必须要等到响应结果才能发起下一个接口请求。
  • 同步调用:当一个支付请求被发送到支付渠道方,支付渠道会很快返回一个结果。但是这个结果,只是告诉你调用成功了,不是扣款成功,这叫同步调用。
    • "同步" 就好比:你去外地上学(人生地不熟),突然生活费不够了;此时你决定打电话回家,通知家里转生活费过来,可是当你拨出电话时,对方一直处于待接听状态(即:打不通,联系不上),为了拿到生活费,你就不停的 oncall 、等待,最终可能不能及时要到生活费,导致你今天要做的事都没有完成,而白白花掉了时间。


  • 异步接口:发起一个接口请求不需要等到响应结果就能发起下一个接口请求。
  • 异步调用:同步请求参数里面会有一个回调地址,这个地址是支付渠道在扣款成功后调用的,这叫异步调用。
    • "异步" 就是:在你打完电话发现没人接听时,猜想:对方可能在忙,暂时无法接听电话,所以你发了一条短信(或者语音留言,亦或是其他的方式)通知对方后便忙其他要紧的事了;这时你就不需要持续不断的拨打电话,还可以做其他事情;待一定时间后,对方看到你的留言便回复响应你,当然对方可能转钱也可能不转钱。但是整个一天下来,你还做了很多事情。   或者说你找室友临时借了一笔钱,又开始 happy 的上学时光了。


消息列队(MQ(Message Queue))
  • 消息队列可以简单理解为:把要传输的数据放在队列中。
  • 把数据放到消息队列叫做生产者。

  • 从消息队列里边取数据叫做消费者。
  • 作用
    • 解耦
    • 异步
    • 削峰/限流
  • 消费者怎么得到消息队列的数据?—消费者怎么从消息队列里边得到数据?有两种办法:

  • 生产者将数据放到消息队列中,消息队列有数据了,主动叫消费者去拿(俗称push)
  • 消费者不断去轮训消息队列,看看有没有新的数据,如果有就消费(俗称pull)






常见面试题

1. Postman接口测试,它有一个功能可以设置参数化,你有用过吗?
用过,电脑上面创建一个cs文件,然后在文件里面去输入我们的一些数据参数,然后在                        postman里面的接口进行调通,然后对参数部分进行设置变量,然后在通过里面的runner工具        进行执行引入的参数化文件,以及对应的参数化的接口,再去执行这个接口用例,然后他就从你这个引入的参数文件,一行一行的进行读取,传输给我们的接口。
2. 你测试过哪些接口?
购物车,优惠券,下单接口,商品接口,
3. 有做过接口测试吗?接口测试你们是怎么测的
我做过,做过优惠券,首先,在用例评审完成之后,前后端联调完成之前,进行接口测试的工作,找后端要接口文档后,根据接口文档,当前版本的接口,找出新增的,或者有变更的接口,然后去进行输出我的接口测试用例,输出完测试用例之后,找对应接口的前后端开发进行接口用例评审,约定好参数,和报文的数据类型,然后用fiddler进行抓包在用postment进行,先把接口调通,调通之后,再按照我们的接口用例里面的参数进行变更,去进行验证测试结果,有bug通zangtao进行提bug,开发改完bug后,我在进行一个回归测试。最后没问题在完成。


4. 多接口怎么测(postman里面有一个批量处理)
postman做接口集合测试注意细节有三点:
               1、我们要实现批量执行接口用例
               2、在批量执行接口用例时,我们需要在对应的用例加断言,一般用tests[重命名]responsebody.has(内容)
               3、在执行完成后,我们只需关注断言失败的用例(要是密码改不了,需要删除cookie后再登录,再修改密码)
执行,首先在collections中新建一个文件夹,把要测试的用例saveas到这个文件夹中,并重新命名,注意我们的格式和数据,及cookie值是否保存。
完成之后,第二步就是来到runner运行,选择文件夹,环境选择、根据参数来选择执行次数。等待时间、参数范围、data数据类型本地本件、文件格式txt/csv,勾是处理编码问题。
最后看运行结果,只看body中的参数是否传入中却就可以了,因为有断言爆红
5. getpost请求的区别?
1、get请求参数全部放在url中,post请求将所有参数放在body
2、get请求的url长度受限,post请求他的参数是放在body中其长度
                  可以无限放大
3、get请求安全级别比post请求低
      get请求优点:查询效率高,性能好,一般用于数据查询业务
                 缺点:安全级别低、url长度受限          
     post请求优点:安全级别高,长度可以不受限,一般用户新增,创建等场景
                 缺点: 执行效率和速度要低于get请求
6. 接口请求的基本结构?
在接口测试中,接口通常是get请求或者post请求。
get请求的结构:请求行,请求头
post请求的结构:请求行,请求头,请求主体
请求头:服务器收到数据后会以请求头中的Content-Type设置的内容来进行数据解析。确定好Content-Type的格式之后,请求主体的数据格式也就确定下来了。Content-Type的格式有四种:分别是application/x-www-form-urlencoded(这也是默认格式)、application/json、text/xml以及multipart/form-data格式。
请求行:包含请求方法和请求对应的URL地址,它和报文头的Host属性   组成完整的请求URL。同时请求行也是协议名称及版本号。
请求主体:是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“apter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。
7. 接口怎么做?
接口测试流程:
1.需求分析和评审
2.场景设计
3.工具的选择
4.环境的搭建
5.接口的组建
6.数据的准备
7.接口的执行
8.结果的分析
9.总结报告
接口测试步骤:
1.从开发那边获取对应的接口文档
2.根据接口文档组建接口(知道当前接口的基本信息如:url(请求地址),请求类型,参数,请 求头等)
3.进行接口测试
4.结果分析
8. 业务中接口测试的业务请求是怎样的?
在接口测试中,接口通常是get请求或者post请求。
get请求的结构:请求行,请求头
post请求的结构:请求行,请求头,请求主体
请求头:服务器收到数据后会以请求头中的Content-Type设置的内容来进行数据解析。确定好Content-Type的格式之后,请求主体的数据格式也就确定下来了。Content-Type的格式有四种:分别是application/x-www-form-urlencoded(这也是默认格式)、application/json、text/xml以及multipart/form-data格式。
请求行:包含请求方法和请求对应的URL地址,它和报文头的Host属性   组成完整的请求URL。同时请求行也是协议名称及版本号。
请求主体:是报文体,它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“
file:///C:/Users/xx/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif
apter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。
请求主体参数按照具体项目来说
9. 调用接口异常有哪些测试点?
异常测试:
异常分为两类,参数异常和数据异常
参数异常:
• 关键字参数:将参数写为开发语言中的关键字
• 参数为空:比如去掉了username参数
• 多或少参数:多或者少参数的验证,现在还不确定如果一个接口多了参数如果没有报错是否是合理的,或者是否需要优化,因为就目前开发给予的答案是,一般不对接口多了参数的处理
• 错误参数:比如将username参数写为了user等看是否能返回相应的errorcode
数据异常:
• 关键字数据:将参数的值填为开发语言中的关键字
• 数据为空:将参数的额值填为空
• 长度不一致:因为数据库中每个字段都设置有字段长度,填写不符合的长度进行验证
• 错误数据:就是将参数的值任意填写,或填写不存在的数值
• 异常类型测试: 比如count参数,这个参数的类型一定是可以转换为int类型的,这时候我们需要测试如果传的一些不可以 转换为int类型值来测试代码是否加入判断
10. 业务是怎么处理接口超时的?
1.增加超时时间
假设A系统有个方法methodA,会调用B系统的methodB这个http接口,如果mehodA不追求超快的响应速度,那么你在调用methodB这个http接口时,可以增长超时时间,例如10秒超时。因为经常在某些时刻,由于网络原因或者系统原因,调用method会超时的。
2.尝试多调用一次
如果第一次调用methodB超时了,那么你可以尝试多调用一次。当然前提是,methodA不追求超快的响应时间。
注意:调用多次不代表重复调用 制造脏数据
3.使用待处理队列
如果methodA需要很快的响应速度,那么当调用methodB接口超时时,可以使用一个队列存储本次失败的记录,然后使用一个job每隔一段时间去扫这个队列,看看是否有待处理的数据。
备注:如果对方系统挂掉了,使用待处理队列的方式,比较合适。
4.回滚数据
catch这个超时异常,然后记录日志后,抛出这个异常,并把之前的数据回滚。让对方的系统重新调用。
备注:宁愿没有数据,也不要存储脏数据。
5.使用异步机制
如果你的业务方法中,需要调用对方的http接口,如果这个http接口不影响主流程的,那么可以使用一个线程,异步调用对方的http接口,并把超时时间设置长一些。由于使用了异步,主流程会立刻继续走的。
11.一个完整的请求有哪几部分组成?
答:请求行(请求的方法和地址)、消息 头、请求的正文(内容)3个部分组成
另:
响应:状态行(状态码)、消息头、响应正文(服务器返回资源的内容)3个部分组成
12.请求方式有哪些?
答:get\psot\put\delete,常用get\post
13. 请求正文的文本格式 ?
答:  xmljsontxthtml
Post请求的正文文本格式:
1、application(请求)/x-www-form-urlencoded 参数的组成:key=value,且参数与参数直接 用‘&’连接
2json格式
3text格式
4multipart /formdata 上传
14.请求头包含哪些内容?
请求方式、headerbodypre-requestscript  tests
Host 接受请求的服务器地址,可以是 IP 端口号,也可以是域名
User-Agent 发送请求的应用程序名称
Connection 指定与连接相关的属性,如:connection:Keep-Alive
Accept-Charset 通知服务端可以发送的编码格式
Accept-Encoding通知服务端可以发送的数据压缩格式
Accept-Language通知服务端可以发送的语言
15.响应头包含哪些内容?
code状态码、msg信息、cookie
Server  服务器应用程序的软件名称和版本
Content-Type  响应正文的类型(是图片还是二进制字符串)
Content-Length  响应正文长度
Content-Charset  响应正文使用的数据压缩格式
Content-Language  响应正文使用的语言
16.常见的http响应状态码
1)100 初始的请求已经接受,客户应当继续发送请求的其余部分
2)200 一切正常
3201 服务器已经创建了文档
4202 已经接受请求,但处理尚未完成
5400 请求出现语法错误
6403 资源不可用
7404 无法找到指定位置的资料
8500 服务器遇到了意想不到的情况,不能完成客户的请求
9501 服务器不支持实现请求所需要的功能
17. postman参数化设置如何设置?
file:///C:/Users/xx/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg
18.Postman 如何设置断言
19.Postman 如何设置全局变量和环境变量
第一步:点击右上角图标,打开环境配置页面,选择Globals,设置全局变量;
第二步:添加变量名称,设置对应的变量值,保存;
第三步:接口地址或者需要取值的参数value设置;注意需要取值的设置为{{变量名}},双大括号,即可取全局变量设置的值
第一步:查看接口返回值;
{
    "data": {
        "leaguerId": "161",
        "token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxNjEiLCJjcmVhdGVkIjoxNTI5NTcyNTkzMTI5LCJleHAiOjE1Mjk1Nzk3OTN9.U6qmR-Qa9sJpwxShLOC8WLPBlhLxWWiQTv5bZtyOV0mdyCSHnFBb_p6T5PBY20m_0m2AmrQZGfrv6hvHCPAaow"
    },
    "status": 200
}
第二步:在接口的TESTS页签中输入以下内容(视返回值情况修改):
pm.test("Status codeis 200", function () {
   
file:///C:/Users/xx/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
pm.response.to.have.status(200);
});
// 把responseBody转为json字符串
var Jsondata =JSON.parse(responseBody);
// 设置环境变量access-token,供后面的接口引用
pm.environment.set("access-token[xb21cn1] ", Jsondata.data.token[xb21cn2] );
第三步:重新发送上一个接口的参数信息测试,执行后查看环境变量;如图,则表示环境变量的值已经正常存储;
20.接口测试用例设计主要考虑哪些方面
正常场景与异常场景;
1)   优先级--针对所有接口;
2)   优先级--针对单个接口;
3)   设计分析:通常,设计接口测试用例需要考虑以下几个方面:1、是否满足前提条件;2、是否携带默认值参数;3、业务规则、功能需求;4、参数之间是否存在关联;5、参数是否必填;
4)接口样例:接口协议;消息请求;消息响应;等
21. fiddler如何使用
   1、通过fiddler抓可以知道当前接口的请求类型,url地址、参数
   2、查看当前接口的请求数据和响应数据
  3、接口的返回的状态码
   4、可以通过fiddler设置代理
   5、可以通过fiddler设置断点,达到更改数据包在提交给服务器
   6、可以通过fiddler做接口测试
22. Fiddler如何抓包
详见图片教程,不知如何文字描述。
https://www.cnblogs.com/llxx07/p/8616042.html
23.Fiddler如何设置断点,为什么设置断点
我们主要是用fiddler打断点的方式去更改接口response,中的信息。
1)选择fiddler菜单中Rules->Automatic Breakpoints->Before Requests,设置断点, 也可以使用快捷键F11;
2)如果底部显示一个红色标识,证明设置断点成功了。
设置断点后,会自动拦截所有网页,对于不需要修改数据包的链接,直接点击右侧绿色的Run to completion;或者直接修改数据包,修改完成后,点击Run tocompletion,fiddler会把拦截的网页发送到服务器,再继续拦截跳转的下一个网页。
3)取消的话只要使用Rules->AutomaticBreakpoints->disabled进行取消
想要拦截单个网址的时候可以使用bpu url : 在请求之前断点 bpu 取消所有的断点24.Fiddler 如何手机代理,抓app
25. 开发者工具F12如何查看接口请求?
F12--network,点击ALL,查看请求的name,status,type,size,time等信息



分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册