最近在做生产环境自动化测试,碰到一个难题就是短信验证码的获取,生产环境短信验证码是真实的,不能采用测试环境将短信验证码写成固定的方法解决,我的思路是:做一个apk小程序,将手机上的短信验证码实时读取出来,存储到手机sd卡的一份文件里,再通过python读取文件内容就可以了。

一、apk是采用Android studio 开发,开发步骤如下:

首先创建一个空项目




android 获取验证码的布局 android获取短信验证码_sd卡


android 获取验证码的布局 android获取短信验证码_android 获取sd卡目录失败_02


创建完之后,项目目录结构如下:


android 获取验证码的布局 android获取短信验证码_android 获取sd卡目录失败_03


添加权限

编辑清单文件(AndroidMainfest.xml,此文件在mainfests文件夹下),添加短信接收读取权限,添加sd卡操作文件权限,添加位置如图所示:


android 获取验证码的布局 android获取短信验证码_android 获取验证码的布局_04


接下来就是主要的JAVA代码部分

写代码之前先进行下分析:

获取短信内容中的验证码:

(1)分析短信内容:

我们想收取的短信格式一般为:“【】XXX验证码为123456.XXX”

格式为 “中文字符” + 6位数字验证码” + “其他字符”

(2)使用正则表达式表述验证码:[0-9]{6,6}(?![0-9])

在java->com.example.sms文件夹下添加java文件SmsReceiver.java,文件代码如下:


android 获取验证码的布局 android获取短信验证码_短信验证码_05


android 获取验证码的布局 android获取短信验证码_短信验证码_06


android 获取验证码的布局 android获取短信验证码_验证码_07


二、android代码编写完成后,点击运行按钮,选择要运行代码的手机,点击【OK】,程序会自动安装到手机上


android 获取验证码的布局 android获取短信验证码_android 获取验证码的布局_08


安装的时候会要求用户勾选权限,如图所示:


android 获取验证码的布局 android获取短信验证码_短信验证码_09


安装完成,如图所示:


android 获取验证码的布局 android获取短信验证码_android 获取sd卡目录失败_10


接下来我们给此手机发送短信,收到短信后,我们在手机的sd卡里自动生成了一个sb.txt文件,此文件存储的最新短信验证码


android 获取验证码的布局 android获取短信验证码_sd卡_11


sb.txt文件内容如下:


android 获取验证码的布局 android获取短信验证码_sd卡_12


到此为止短信验证码已经能够读取到了,接下来在我们的自动化代码(python编写)里构建个函数,将此文件内容读取出来


android 获取验证码的布局 android获取短信验证码_android 获取验证码的布局_13


跑脚本时,手机需要连接到电脑(可以用数据线连接,也可以远程连接,此处不再详述)

OK!脚本执行到获取短信验证码之后,调用getSMS()函数取到验证码并填入,短信验证码成功解决,提升了脚本的执行效率和自动化覆盖率!