session 是为了保持服务器与客户端的会话状态,在用户登录后,服务器端生成一个sessionID传给客户端;之后的每次会话,客户端只需要传这个sessionID即可不用重新登录,保持在线状态。故服务器端需要保存所有在线的sessionID,从而影响服务器性能! sessionID是存在cookie中的。
token 是为了解决服务器压力,用户登录成功后,服务器端生产token(钥匙和锁)通过 cookie或请求头的方式 传给客户端,再次请求时带上token即可,无状态(服务端通过算法验证钥匙和锁是否正确)。
总之 ,就是两种鉴权方式,通过sessionID或者token,服务器来判断是否是某用户登录后的其他请求。
其他:
2、一个用户在一次会话(打开浏览器,访问服务器,直到浏览器关闭,称为一次会话,严格的说,一次会话应该是依赖 session 的生成机制)上就是一个session_id。
3、每次登录时,总会产生一个token或者sessionID,生成这个的目的是为了每次 *** 作其他接口的时候,会判断当前用户是否登录。
1)cookie的处理
准备:两个接口:一个登录、一个充值
登录接口
充值接口:会失败
1、添加:HTTPCookie管理器,放到最上面。
2、再次运行:就会充值成功。
登录时会有set_Cookie存在
1、添加后置处理器>>>正则表达式提取器
设置:
2、添加:调试取样器
运行结果:已经拿到cookie
3、添加:右击线程组>>添加>>配置元件>>HTTPCookie管理器
设置:
4、添加:JSESSIONID:${正则表达式提取器提取到的变量名}
域:
路径:
5、查看运行结果:
2)token的处理
查询用户信息需要先登录,在查询用户信息的时候需要携带token。
1、在登录接口下面使用正则表达式提取器获取token
登录接口响应数据中返回token。
配置提取器:
2、添加:调试取样器,运行后查看是否可以获取到
3、添加HTTP信息头管理器
运用相关资料
1.在测试计划下面添加http请求默认值,我们可以把域名添加好,每个请求只输入URL即可2.登录请求:在消息体数据中输入json数据格式的参数
3.添加正则表达式提取器获取token
(1)引用名称 token
(2)正则表达式 "token":"(.+?)"
(3)模板 用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值
(4)匹配数字 0代表随机取值,1代表全部取值,通常情况下填0
(5)缺省值 如果参数没有取得到值,那默认给一个值让它取
4.添加BeanShell 取样器将token值设为全局变量,${__setProperty(newtoken,${token},)}
5.添加请求头部管理器作为全局使用,将变量token使用如下。${__property(newtoken)}
如果没有Content-Type 则手动增加:application/jsoncharset=UTF-8
这是为了自己方便记录与查看,所以记录在上,原文地址: https://www.cnblogs.com/zynzyf/p/11221958.html
在接口测试中,有这样的使用场景,某一步 *** 作需要用到之前步骤获取到的值,token就是一个典型。关于网上获取token的教程大同小异,但是没有一篇能解决我的问题。因此本人从正则表达式、抓包工具等入手,终于解决了获取token的问题。现将需要注意的地方分享如下。
1.首先需要确认需要用到的token是哪个接口返回的,如果是登录的步骤就使用到了token,那么肯定在登录前还有其他的接口访问,否则登录没有token必然失败,因此,先使用抓包工具或者F12功能查看登录之前的接口访问情况。本人的情况就是登录的时候就需要使用token,用fiddler抓包后发现,在login的接口访问之前,有一个registerDevice的接口访问,查看这个接口的返回,发现此时已经有给到token的信息。
2.查看token是从哪个地方提交的。网上有好多文章都是token在请求头信息中,所以都是按照这种方式去处理的,但是本人的情况不是,使用抓包工具查看token信息,发现login的这个接口,在请求发送的时候,就把token当做参数发送了。
3.因此要搞清楚你的token是从哪个地方提交的。如果是请求头中,那么就需要添加HTTP信息头管理器(网上的文章大部分是这种情况);如果是像我这种在请求中提交的,那么添加一个HTTP请求默认值就好了,这是两个不同的配置元件。
4.对于我的这种情况,就是要添加请求默认值。在添加请求默认值的时候,名称应该填写抓包时抓到的参数名(见图2)。值为jmeter获取变量的写法${自定义的变量名}。其中“自定义的变量名”可以是你自己给定义的任意名字。比如下图中,我给token定义了x的名称(网上有好多token、newtoken、accesstoken等等,和真正的token搞在一起搞的人都糊涂了),然后它的值就按照jmeter的写法,写作${x}。需要注意的是,下图中,默认请求值的名称,需要和实际抓包的参数名一致。
5.然后添加正则表达式提取器,注意一定要添加到请求的下面(请求的下一级),使得请求的作用域覆盖到。
6.正则表达式的写法,是冒号左右两边各一个双引号。其中左侧的引号中的值,需要和本次请求返回内容中的token的名字一致,比如我的请求返回内容中,token的参数名叫deviceToken(见图1),右侧的引号中就写固定的(.+?)即可。所以填写正则表达式的时候,我这里填写的就是【"deviceToken":"(.+?)"】,并且这里的引用名称,则需要和刚才起名的时候那个名字一致。我之前起名叫x,这里的引用名称就也应该是x。模板的话,就写固定的【$1$】。所以我的正则表达式提取器,内容就如下图。
7.运行查看结果,发现接口已通。
本人只是一只菜鸟,有些用法和理解可能甚至都是错误的,但是至少解决了自己的问题,算是一个学习的过程吧。每个程序的情况都有所不同,所以需要根据自身的情况来添加相对应的配置元件以达到目的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)