一、背景
我现在的公司用的还是 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?