认证机制 | 如何测试 session?

关于 session 测试的场景设计

Posted by Haauleon on July 20, 2021

一、背景

  我现在的公司用的还是 session 来保持会话,挺坑的这玩意,前不久上线了一个项目,就是因为后台 session 没处理好导致出现了 bug,让领导们看了场笑话。还有一个问题是微信 code 过期后没有重新授权,导致前端传了个空的 openid,好死不死后台有一个死亡逻辑,就是:如果前台传了空的 openid,那么就返回一个默认的 openid 导致前台信息混乱。先抛开这个不说,来分析一下关于 session 的测试要怎么进行。我知道现在很多项目都用 token 来保持会话,但是没办法了现在的公司用的还是 session,坑多,但是又想填一下坑。



二、session 的测试场景

1.创建时间点

关于 session 的创建时间点测试需要考虑以下几种测试场景:
(1)打开浏览器访问开始创建 session?
(2)还是用户登录时开始创建 session?
(3)还是其它情况下创建的?



2.删除时间点

关于 session 的删除时间点测试需要考虑以下几种测试场景:
(1)过期文件是否删除?
(2)关闭浏览器时,session 是否会删除?
(3)当有多个窗口时,是全部关掉窗口还是仅关掉一个窗口就会删除 session?



3.session 超时

  基于 session 原理,需要验证系统 session 是否有超时机制,还需要验证 session 超时后功能是否还能继续使用。

测试方法:
(1)打开一个页面,等待 10 分钟使 session 超时,然后对页面进行操作,验证是否可以操作成功。
(2)浏览器打开了多个标签页。现在两个标签页中保留的都是用户 A 的 session 记录,然后在其中一个标签页中执行用户退登操作,马上在另一个标签页中进行操作,验证是否可以操作成功或者页面跳转至登录页面。



4.session 互窜

  session 互窜即用户 A 的操作被用户 B 执行。

测试方法:
浏览器打开了多个标签页。现在两个标签页中保留的都是用户 A 的 session 记录,然后在其中一个标签页中执行用户 A 的退登操作后登录用户 B,然后在另一个标签页中进行操作,验证是否可以操作成功。

预期结果:
(1)有权限控制的操作。用户 B 登录后不能执行用户 A 所在页面的操作,应该报错。
(2)没有权限控制的操作。用户 B 登录后执行了用户 A 所在页面的操作后,数据记录是用户 B 的而不是用户 A 的。



5.session 垃圾回收



6.关闭浏览器同时关闭 session



7.session 销毁



8.session 丢失

代码问题



9.session 共享

  不同浏览器的 session 共享机制都不同。

IE 中,所有打开的 IE 窗口(IE 进程)共享一个session。除非,用户通过菜单 File > New session 打开新窗口,或者使用命令行参数 iexplore.exe -nomerge 来打开IE。另外,当所有 IE 窗口被关闭后,session 结束。



10.最大并发数

  为了防止由于登录人数过多,造成服务器内存被消耗殆尽或服务器无响应的情况,需要检查服务器端是否设置了最大并发 session 数量。



11.刷新页面

  需要验证刷新页面是否对 session 存在影响。



12.后退操作

  用户登录成功并进行相关操作后执行用户退登操作,然后点击浏览器中的后退按钮,验证是否能回到刚才所在的操作页面。



13.拷贝粘贴地址

  用户登录成功后进入一个页面,将该页面地址进行拷贝,然后使用无痕模式打开一个浏览器后,直接粘贴该页面地址,验证是否能执行相关操作。



14.负载均衡

 若后台的网络架构使用了负载均衡,要考虑同一用户访问的页面被提交到不同的服务器后,session 能否能够被正确共享。

例如:用户登录成功后的请求被 A 服务器处理,但是用户接下来的操作却被 B 服务器处理,验证用户是否能够操作或访问其他需要 session 认证的页面。



15.异常情况

(1)若创建 session 时,由于环境故障(IE死机,或网络暂时断开等),造成 session 创建异常或失败,系统会如何反应?
(2)若创建 session 时,由于环境故障(IE死机,或网络暂时断开等),造成 session 创建异常或失败,若环境恢复后,系统是否会自动生成 session?



16.多用户并发

  进行大量用户并发登录时,是否会造成 session 创建时间延时?导致无法正常创建 session?