自动化测试遇到手机号验证码怎么办?

这个问题也是软件测试面试时经常遇到的一个问题,解决的办法很多,各种方法都有优劣,接下来就好好探讨下。

要想把这个问题想清楚,其实关键点是首先要想清楚手机号和验证码登录的过程,过程清楚了,解决思路也就清楚了。

第一步:手机号验证码登录的过程:

1、页面输入手机号,点击获取验证码。

2、后端收到手机号,校验手机号格式的正确性,然后调用短信网关发送验证码, 短信网关只是负责发送短信, 要发送的手机号和短信内容是我们的系统给短信网关的, 所以我们系统肯定在一个地方存这个手机号和验证码的对应关系, 有可能缓存(redis),有可能数据库,也有可能其他地方。

3、手机收到短信验证码。

4、页面输入验证码点击提交。

5、系统收到登陆请求的手机号和验证码, 然后在保存手机号验证码对应关系的地方取出对应手机号的验证码,然后比较两个验证码是否相等,相等就登陆成功,不相等就登录失败, 当然还得在验证码的有效期内。

第二步:分析在哪里可以解决自动登录的问题?

其实就是第五步验证过程是判断我们是否登录成功的关键一步,那么搞定第五步有哪些方案呢?

方案1:让后端设置一个万能码, 这样登录的时候,如果是这个码,就直接默认登录成功,相当于一个后门, 这个时候需要和后端确认下,只有指定的手机号这个万能码才生效, 这样可以最大程度避免有万能码代码意外发到线上环境带来的损失。

方案2:让后端去掉短信验证码登录过程,直接输入手机号就可以登录, 这样代码改动大, 而且错误代码发到线上风险很大。

方案3:自己手工拿到登录的认证信息,比如token,然后写入到代码中,这样可以跳过登录环节,不好的就是每次运行都要手工操作。

其实可以看出方案1、方案2、方案3,都有一些不好的地方,不是需要开发协助修改代码逻辑, 就是弄起来比较麻烦, 接下来就有一个更好的方案。

最优方案:从第2步可以看出,短信的验证码其实是存在某个地方的,那么我们可以直接通过操作数据库、操作redis、或者调用接口获取到验证码,然后就可以输入正确的验证码了,这样不需要开发修改代码,也不麻烦, 就是我们写自动化脚本的时候需要多一点知识,但是跑通之后效果比前面的方案都要好。

从上面也可以看出, 现在做自动化不仅仅说我们会selenium、appium就完事了,其实自动化要能好好运用起来,代码操作数据库、操作redis、操作接口的技能也需要掌握,灵活运用到自动化中,会有事半功倍的效果。



我的回答