使用自动化测试获取手机短信验证码

目前在职测试开发,,写一些脚本,个人认为这职业不科学不应该有的职业,测试就是测试,开发就是开发,运维还是老鸟,这行业总能折腾些莫名其妙的东西出来,刚做这行时学的第一门语言是bash shell, 去新去单位上班直接写了个一键搭建测试环境的测试脚本,本来不想干测试了,好好做微信小程序开发,可是苦于学历不高,时间不够,还有开发工作很累,工资行情也差不了多少,

不扯了,说这些是因为最近由于一些蹊跷的事情,之前做过人力老板的李某人把我简历给了一家外包,让我以二等公民的身份去做自动化,我想着...项目多有挑战性,加上很长时间没有真正做过测试了,手痒痒就去了,之前做过一些接口自动化,自学过robotframework框架,来了之后才知道这是在做web端和andriod端的UI自动化测试,选好框架码好码就可以RUN了嘛!,用例倒是也简单,就是一些页面展示检查和图形比对....话不多吹

可是一看需求,一接触就慌了,这TM不适合做自动化呀,第一, 数据查询类web端,这种就没必要做自动化还是功能点点来的快;第二, 主使用环境是IE .最重要的是由于安全原因和现网使用:不用允许留后门,设置万能码,上上下下协调了多少次就是不给解决,这样每次登陆就有2大门槛 1,短信验证码 2,图形验证码

依据这两个问题,自己查找解决的办法,网上的方法大都是打酱油的多,查了很多也问了很多人,无果,没办法只能自己解决,短信验证码自动获取稍微的简单一些就从这儿入手,我的思路是:既然python处理数据存储也比较方便简单就用它结合selenium来做此产品的框架吧,首先,如果能实时的把短信存储到一份文件里就方便python去读取了,再把读取到的最新短信字段,通过截取数字,发送到输入框不就就搞定了么?

好了! 需要一个有权限的 APK 在手机实时存储短信到手机内存 /sdcard/smslog.txt 里(外部SD卡也可以,能通过adb命令访问到):

python 复制代码
/*****  
 
......
 
try {
long timestamp = System.currentTimeMillis();
String time = formatter.format(new Date());
String fileName = "smsLog.txt";
if (Environment.getExternalStorageState().equals(Environment.MOUNTED)) {
String path = Environment.getExternalStorageDirectory()+"/";
***
if (!dir.exists()) {
dir.mkdirs();
}
 
*
 
fos.write((time + " " + s).getBytes());
fos.close();
}
return fileName;
} catch (Exception e) {
Log.e("sms", "an error occured while writing file...", e);
}
return null;
}
 
*******/

注册一下接收器:

python 复制代码
<receiver android:name=".SmsInterceptReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

添加下权限:

<uses-permission android:name="android.permission.RECEIVE_SMS"/>

android脚本好了,签名+打包,装入手机就好了,安装实验一下:安装时我都是一些权限都打开给到这个APK

自动生成了一个smslog.txt 再打开看一下内容,能正常记录,下面用写一个python脚本截取最后一段的最后四个数字就可以了

通过cmd

adb shell cat /sdcard/smsLog.txt

成功显示文件里的内容

2017-05-16-16-39-27 您好,你的短信验证码为7959

2017-05-16-16-40-09 您好,你的短信验证码为6474

2017-05-16-16-45-22 您好,你的短信验证码为4664

2017-05-16-17-19-47 您好,你的短信验证码为3320

2017-05-16-17-21-20 您好,你的短信验证码为3146

2017-05-16-17-27-40 您好,你的短信验证码为2709

2017-05-16-17-27-43 您好,你的短信验证码为9421

2017-05-16-17-27-46 您好,你的短信验证码为5035

2017-05-16-17-27-48 您好,你的短信验证码为2212

2017-05-16-17-27-49 您好,你的短信验证码为5745

2017-05-16-17-28-28 您好,你的短信验证码为5409

2017-05-16-17-28-32 您好,你的短信验证码为1176

2017-05-16-17-28-33 您好,你的短信验证码为8708

2017-05-16-17-28-35 您好,你的短信验证码为3997

2017-05-16-17-28-37 您好,你的短信验证码为3567

2017-05-16-18-45-57 您好,你的短信验证码为3060

在python脚本中再构个函数就解决了

python 复制代码
def getSma():
    adb = "adb shell cat /sdcard/smsLog.txt"
    smsLog = os.popen(adb).readlines()
    smscode = smsLog[-1][-6:-2]
    return smscode

OK! 脚本登陆RUN,步骤到点击发送验证码之后成功获取并自动填入,短信验证码成功解决,提升了脚本的执行效率和自动化覆盖率! 下周再开始解决图形验证码自动识别问题, 之前用UFT试过识别率太低,这款商业软件越做越不值钱了. 咱不再去求人,自己解决,活着就是为了折腾.

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
ifanatic2 小时前
[面试]-golang基础面试题总结
面试·职场和发展·golang
行則独善其身3 小时前
华为无线AC+AP组网实际应用小结
程序人生
霍格沃兹测试开发学社测试人社区4 小时前
数据驱动与并行策略:用 JUnit 5 让软件测试更高效
软件测试·测试开发·junit
霍格沃兹测试开发学社测试人社区4 小时前
软件测试丨探索 JUnit 5 中的参数化与调度执行:提升软件测试的效率与灵活性
软件测试·测试开发·junit
jiao_mrswang4 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
Swift社区14 小时前
LeetCode - #139 单词拆分
算法·leetcode·职场和发展
Dong雨15 小时前
力扣hot100-->栈/单调栈
算法·leetcode·职场和发展
trueEve17 小时前
SQL,力扣题目1369,获取最近第二次的活动
算法·leetcode·职场和发展
AI_小站20 小时前
RAG 示例:使用 langchain、Redis、llama.cpp 构建一个 kubernetes 知识库问答
人工智能·程序人生·langchain·kubernetes·llama·知识库·rag
召木21 小时前
C++小白实习日记——Day 2 TSCNS怎么读取当前时间
c++·职场和发展