打开浏览器,输入网址,回车。页面加载,白屏三秒,然后一个报错弹窗跳出来——"500 Internal Server Error"。这是web测试最经典的出场方式。我干这行七年,见过太多这样的瞬间。问题从来不在代码逻辑本身,而在于你根本不知道用户会在什么环境下打开你的页面。
上个月我们上线了一个电商活动页。开发说测过了,功能全通。我拿自己那台老掉牙的Windows 7电脑,用IE11打开,页面直接变形,按钮错位,点击毫无反应。开发一脸茫然:"我用的Chrome啊。"对,问题就在这。你测的是"你以为的用户",不是真实用户。
Web测试的核心不是找bug,而是找"差异"。同一套代码,在Chrome、Firefox、Safari里渲染结果可能完全不同;在Windows、macOS、Linux上字体大小不一样;在手机竖屏和横屏下布局会跳。更别提浏览器版本迭代——Chrome每六周更新一次,你的用户可能还停留在两年前的版本,因为公司IT禁止自动更新。
有个真实案例:某银行网银系统,所有功能测试都过了,性能测试也达标。上线后大量用户反馈"转账按钮点了没反应"。排查三天,最后发现是某个用户的浏览器设置了"禁用第三方Cookie",而转账功能依赖的跨域会话恰好被拦截。这种问题,自动化测试永远测不出来,因为你没法预测每个用户的浏览器设置。
所以我现在做web测试,第一件事就是问三个问题:目标用户用什么浏览器?什么操作系统?网速大概多少?不是所有人都在一线城市用5G。我见过用2G网络打开重页面的用户,等加载等了四十秒,然后直接关掉走人。这就是现实。
测试环境本身也是个坑。我们有个测试服务器,配置是生产环境的四倍。所有性能测试在那上面跑都漂亮得很,响应时间两百毫秒。上线后生产环境一压,直接超时。后来才明白,测试环境就该跟生产环境一样破,甚至更破。这样才能暴露真实问题。
还有那些"偶现"的bug。用户报告说"有时候点保存会丢数据",开发说"我复现不了"。这种时候我通常会做一件事——反复操作二十次,用不同的速度,不同的间隔,甚至故意在动画还没结束时就点击。十次里总有一次能撞上。这类问题多半是竞态条件,两个异步请求互相覆盖了数据。你按常规流程测,永远测不出来。
做web测试久了,你会养成一种"恶意"思维。看到输入框就想输入超长字符串、特殊符号、SQL注入语句;看到上传按钮就想传个.exe文件试试;看到日期选择器就想选2月30号。这不是无聊,是这些操作背后都有真实用户干过。有人真的会在密码框里输入"'; DROP TABLE users;--"。
最后说个最容易被忽视的——浏览器后退按钮。单页应用流行后,很多开发忘了处理浏览器历史记录。用户从商品页跳到详情页,再点后退,结果页面直接空白。这种问题,你测功能流程时完全正常,但真实用户一定会按后退键。我习惯每测一个流程,就用后退键回退几步,再前进,看页面状态是否保持。
web测试说到底,就是替开发者体验用户可能走的每一条路,包括那些开发者认为"不可能有人这么操作"的路径。事实上,用户永远比你想象的更野。你设了输入长度限制,有人会通过控制台修改DOM绕过;你设了登录超时,有人会开着页面放一晚上再操作。你的任务,就是把这些"野路子"都走一遍,然后告诉开发:这里会炸,修一下。