印象深刻的Bug(第一弹) -- 都是空格惹的祸
测试:
当时测一个功能,登录页面强制绑定手机号,手机号去重逻辑简单描述为不能重复(实际上逻辑要复杂,这里简单理解为去重)
现象:
强制绑定,校验手机号时,有时候去重逻辑正常,有时候去重逻辑又不对(即某个账号能绑定已使用的手机号)
排除思路:
假定某个账号已经绑定了手机号:phone1
1、新拿一个账号,触发强制绑定。获取验证码时,F12查看前端请求,请求中没问题,手机号确实是已经使用过的手机phone1
2、验证码。手机号phone1收取验证码也是成功的
3、输入验证码,确实新账号强制绑定phone1绑定成功了,这样就有两个账号都使用了相同手机号
4、开发查日志,日志中,打印手机号确实是 phone1,在代码计算是否重复时,返回的确是空,即手机号没重复,导致绑定成功了
5、重复 1~4,这次绑定失败,提示手机号已重复,开发查看日志,日志中,打印手机号确实是 phone1,在代码计算是否重复时,返回是 phone1,导致绑定失败
6、多次重复 1~4,有时候能绑定成功,有时候有绑定失败并提示手机号重复
陷入困境:
我操作一步,开发看一步日志,没发现啥问题,现象还是存在...暂时记录了一个偶发性 bug
峰回路转:
几天后,测试一个输入框时,复制了一个文本,发现有时候提示:不能有空格(输入框有校验,不能带空格)。 我发现有时候文本前面或者后面有个空格,突然就想到前面的问题,是不是有空格导致的
说干就干,于是我输入手机号的时候,在 phone1 前面/后面带个空格,果真就正常绑定了,不带空格,就提示手机号重复
破案了:
复制手机号的时候,不知道为啥前面或者后面有时候会带一个空格,导致校验失败。
回想一下排除步骤,由于空格在前面/后面,真没发现手机号后面带了一个空格,后续有了怀疑后,选中手机号字段,发现后面还真带了一个空格;获取验证码的代码,开发对传入的手机号,去掉了前后的空格,故获取验证码没问题;开发的日志,没有把手机号前后的空格展示,故查日志也没发现问题
结语:
测试时一定要注意空格!一定要注意空格!一定要注意空格!