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

目前在职测试开发,,写一些脚本,个人认为这职业不科学不应该有的职业,测试就是测试,开发就是开发,运维还是老鸟,这行业总能折腾些莫名其妙的东西出来,刚做这行时学的第一门语言是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试过识别率太低,这款商业软件越做越不值钱了. 咱不再去求人,自己解决,活着就是为了折腾.

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

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

相关推荐
鱼跃鹰飞1 小时前
Leetcode面试经典150题-130.被围绕的区域
java·算法·leetcode·面试·职场和发展·深度优先
霍格沃兹测试开发学社测试人社区7 小时前
人工智能 | 基于ChatGPT开发人工智能服务平台
软件测试·人工智能·测试开发·chatgpt
戊子仲秋15 小时前
【LeetCode】每日一题 2024_9_19 最长的字母序连续子字符串的长度(字符串,双指针)
算法·leetcode·职场和发展
大柏怎么被偷了15 小时前
【软件测试】测试的岗位有哪些?
软件测试·测试
哲伦贼稳妥17 小时前
程序人生-我的外服经历(4)
经验分享·程序人生·职场和发展
程序猿进阶17 小时前
如何在 Visual Studio Code 中反编译具有正确行号的 Java 类?
java·ide·vscode·算法·面试·职场和发展·架构
XXX-1718 小时前
1.pytest基础知识(默认的测试用例的规则以及基础应用)
软件测试·pytest
无名之逆18 小时前
云原生(Cloud Native)
开发语言·c++·算法·云原生·面试·职场和发展·大学期末
小码哥说测试19 小时前
软件测试技术之 GPU 单元测试是什么!
自动化测试·功能测试·测试工具·jmeter·单元测试·集成测试·postman
豆姐姐1 天前
金九银十,分享一波用例设计、数据库、编程笔试题!
自动化测试·数据库·测试用例·软件测试面试