接口测试理论(4)--会话管理

会话的概念

由于HTTP协议无状态的特点,所以客户端和服务器都不会保存客户端请求的相关信息。

所以服务器无法知道客户端的请求状态是不是已登录的状态,

为了解决这个问题,我们需要通过一个字符串表示用户的未登录/已登陆的状态。然后控制用户对资源的访问。

在现在的Web项目中,管理用户会话主要有3种实现方式:

基于Cookie

基于Session

token

典型的会话管理接口也叫做登陆接口或授权接口

基于Cookie实现会话管理

Cookie:一种由服务器发送到用户浏览器并保存在本地的小型数据块,通常以key-value的形式存储。每当浏览器请求该网站时,浏览器会同时发送该Cookie,使得服务器能够识别用户并恢复之前的状态或偏好。默认大小4KB

Cookie的特点:

不能跨域:我们访问服务器时,都会通过域名来访问。例如:www.lagou.com,这个www.lagou.com是域名。 如果是我们www.lagou.com域名指向的服务器发送的cookie,那么这个cookie就不能在www.baidu.com中使 用。

存在有效期: Cookie存在有效时间,超过规定的时间后就会失效。可以设置Cookie的配置,来让cookie永久不失效。 不设置有效期时,cookie默认是一个session cookie,浏览器不关闭,cookie不失效

大小:默认4KB大小

有数量限制:不同浏览器限制的cookie数量不一样,为了保证兼容性,做最低兼容,cookie数量不要超过二十 个。

对字符编码有限制

Cookie实现会话管理流程

 1.用户发起登陆请求,服务器根据用户输入的用户名密码判断是否满足登陆的条件,满足则创建一个用户凭证 (字符串)

 2.服务器对该用户凭证进行签名,加密后,写在cookie中

 3. 服务器返回该cookie给客户端

4.客户端保存cookie,并且下次请求时,会默认发送cookie给服务器,服务器做解密和签名认证后拿到其中的登 陆凭证,判断其有效性。判断通过则允许用户访问登陆后的页面,不通过则提示用户登陆

 基于Session实现会话管理

session是:一种在服务器端跟踪用户状态的机制,它通过在客户端和服务器之间传递一个唯一的Session ID来识别用户。把用户数据,放在服务端。

 但是客户端依然需要通过sessionid来访问存放在服务端的session,这样才能实现会话管理。

 cookie和session的区别

1.位置不同,cookie在客户端,session在服务器

2.大小不同,cookie默认4kb,session无上限。

3.性能不同,cookie在客户端,不会占用太多服务器资源,而session占用服务器资源,对服务器压力较大

4.有效期不同,cookie可以设置为永久不失效,而session中,浏览器一旦关闭sessoin就会自动close失效

5.安全性不同:cookie在客户端不安全。session在服务端更安全

Token实现会话管理

Token是服务端生成的一串字符串,用来当作客户端请求的令牌,当第一次登录后,服务器根据用户数据的信息,生 成token,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

作用:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

token的结构:

token分成三个部分,头、请求体和签名。每个部分用“.”做分隔符

 头(header) 服务器从头信息中,获取相关的加密算法来对请求体进行解密

请求体(payload) 服务器使用头信息中的算法解密payload部分后,得到用户信息,然后继续管理用户的状态。

签名(signature) 服务器通过使用头信息中记录的签名算法,来对头和请求体进行签名,再与token中的签名进行比较。 如果一致,证明token没有被篡改。

会话的有效时间控制

cookie实现的会话,可以通过cookie的有效时间配置,客户端无法控制cookie的有效时间,怎么通过服务端代码进行控制。

session实现的会话,可以通过cookie和session双向的有效时间进行控制

token的有效时间,可以通过token、cookie和session三个技术的有效时间进行控制

此外,实际应用中,还可以通过给接口的参数指定时间戳,然后通过内部代码逻辑校验时间戳。 应用:12306未支付订单的有效时间

 

 

接口测试难点:登陆接口处理方法

登陆接口是一个带有安全功能的接口,其中包括了用户名、密码、验证码这三块。

其中,密码必须使用内部算法加密;验证码必须让黑客难以识别。这也就带来了无法通过接口对登陆接口进行全面测 试的问题。

所以接口测试中,不会全面测试登陆接口,改为通过手工进行登陆功能的测试。

 绕过登陆的方法:拿到令牌(也就是token)【"token"(令牌)想象成一把特殊的钥匙。这把钥匙被用来确认你的身份并授予你特定的权限。】

通过前端页面登陆,拿到令牌

Mock登陆接口: Mock验证码为万能验证码,Mock登陆接口密码为固定密码从而让测试能够进行登陆,拿到令牌

白名单控制 在代码中增加白名单功能,白名单账号无需复杂的校验就可以通过接口登陆,拿到令牌

以上解决方法,除了第一种可以测试人员独立解决以外,其他两种,都需要开发协助才能解决。

 

扩展:接口签名

 接口签名非常好理解,就是把接口的请求数据,进行签名后,再放入该接口的sign中。

主要的目的,就是为了防止接口信息被非法篡改,保证每次接口请求数据的一致性和完整性。 但是它并不能阻止黑客查看接口的数据。

 

应用:保证数据的一致性、完整性

签名后的接口测试方法:

开发提供签名算法,我们使用工具也构造出同样要求的请求

开发提供签名的工具或插件,我们使用它们,结合接口测试工具,构造出同样要求的请求

开发关闭签名,不校验sign(这种属于不全面的测试,没有校验的sign,需要开启sign之后,放在手工环节进 行)

 

posted @ 2023-07-28 15:56  越长大越孤单哦  阅读(84)  评论(0编辑  收藏  举报