第一次寫博,最近解決了做自動化測試短信驗證碼自動獲取填入的方法減少了腳本的人工干預,並非攔截短信,所以不存在安全警報提醒,拿出來分享給大家,有感興趣的大家可以加Q1856100
目前在職測試開發,,寫一些腳本,個人認為這職業不科學不應該有的職業,測試就是測試,開發就是開發,運維還是老鳥,這行業總能折騰些莫名其妙的東西出來,剛做這行時學的第一門語言是bash shell, 去新去單位上班直接寫了個一鍵搭建測試環境的測試腳本,本來不想干測試了,好好做微信小程序開發,可是苦於學歷不高,時間不夠,還有開發工作很累,工資行情也差不了多少,
不扯了,說這些是因為最近由於一些蹊蹺的事情,之前做過人力老板的李某人把我簡歷給了一家外包,讓我以二等公民的身份去做自動化,我想着...項目多有挑戰性,加上很長時間沒有真正做過測試了,手癢癢就去了,之前做過一些接口自動化,自學過robotframework框架,來了之后才知道這是在做web端和andriod端的UI自動化測試,選好框架碼好碼就可以RUN了嘛!,用例倒是也簡單,就是一些頁面展示檢查和圖形比對....話不多吹
可是一看需求,一接觸就慌了,這TM不適合做自動化呀,第一, 數據查詢類web端,這種就沒必要做自動化還是功能點點來的快;第二, 主使用環境是IE .最重要的是由於安全原因和現網使用:不用允許留后門,設置萬能碼,上上下下協調了多少次就是不給解決,這樣每次登陸就有2大門檻 1,短信驗證碼 2,圖形驗證碼
依據這兩個問題,自己查找解決的辦法,網上的方法大都是打醬油的多,查了很多也問了很多人,無果,沒辦法只能自己解決,短信驗證碼自動獲取稍微的簡單一些就從這兒入手,我的思路是:既然python處理數據存儲也比較方便簡單就用它結合selenium來做此產品的框架吧,首先,如果能實時的把短信存儲到一份文件里就方便python去讀取了,再把讀取到的最新短信字段,通過截取數字,發送到輸入框不就就搞定了么?
好了! 需要一個有權限的 APK 在手機實時存儲短信到手機內存 /sdcard/smslog.txt 里(外部SD卡也可以,能通過adb命令訪問到):
/*****
......
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;
}
*******/
注冊一下接收器:
<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腳本中再構個函數就解決了
def getSma():
adb = "adb shell cat /sdcard/smsLog.txt"
smsLog = os.popen(adb).readlines()
smscode = smsLog[-1][-6:-2]
return smscode
OK! 腳本登陸RUN,步驟到點擊發送驗證碼之后成功獲取並自動填入,短信驗證碼成功解決,提升了腳本的執行效率和自動化覆蓋率! 下周再開始解決圖形驗證碼自動識別問題, 之前用UFT試過識別率太低,這款商業軟件越做越不值錢了. 咱不再去求人,自己解決,活着就是為了折騰.