问题背景
近两年随着网络实名制的普及,很多系统需要通过手机短信校验的方式进行实名认证,这种短信校验的场景给系统的自动化测试脚本开发带来了很大的挑战。拿我所负责的车险承保系统为例,在投保商业险的过程中就涉及到短信校验的测试场景,具体业务流程如下图所示。
方案选择
要实现上述业务流程的自动化测试,最关键的点是自动获取短信校验码,为了解决这个难题,我的团队设想过三种方案:
方案一是从后台截取商业平台发送给用户的手机短信,这个方案看起来很美,但其存在的问题是短信校验码是由第三方平台发送出来,采取后台截取并解析报文的方式不仅成本高,而且还有可能触犯网络安全底线,不可行。
方案二是从手机端做文章,开发一个手机应用程序将验证码短信转发到邮箱,然后在电脑端登录邮箱来获取验证码,这种方式可行,但是存在网络延时的风险。
方案三是开发手机应用程序来解析短信校验码并写入手机内存文件,再通过USB连接将校验码文件复制到电脑端,读取本地文件来获取校验码。由于方案三相较于方案二来说规避了网络延时的风险,因此我们选择它作为最终的解决方案。
技术实现
一、安卓手机端配置
1、基于安卓系统,开发一个APK用来解析短信校验码并写入手机内存文件,我们将其命名为SmsTest。
2、在安卓手机安装SmsTest,安装完成之后可以在手机桌面看到如下图标。
3、开启SmsTest应用的所有权限。
4、开启手机开发者模式,并开启USB调试。
二、电脑端配置
1、安装JDK,配置环境变量。
2、安装SDK,配置环境变量。
具体步骤可参考https://blog.csdn.net/dr_neo/article/details/49870587的第一步和第三步,SDK安装好之后在命令行窗口输入ADB指令进行测试,如果看到如下提示则表示SDK配置成功。
3、安装安卓USB驱动。
三、获取平台校验码
1、手机端启动SmsTest小程序。
2、将手机和电脑通过USB线相连,在手机弹出的提示信息中选择允许访问文件。
3、在自动化测试脚本中调用getSms方法即可获取平台发送的校验码。