测试百晓生
ceshibaixiaosheng
测试圈懂的最多的人,跟着百晓生一起学测试,你定会有收获。短信激活码从哪看我就在你的口袋,你――有问题难得倒我吗?
PS短信激活码从哪看:一颗安利,百晓生继续招种子用户啦。积分攒够兑换礼品的就会得到种子群的邀请,怎么得到积分呢?
● 在百宝箱-我的任务 里面进行游戏、测试题、留言等互动就能获得对应积分
● 积分可以兑换辣条、测试行业热门书籍。后期奖品正在持续上架中....
● 积分还能换取简历写作的指导,百晓生的成员都是面人无数的哦
● 积分还能....培训....反正我是信短信激活码从哪看了
正文
相信大家在做自动化测试的时候,都会遇到一个问题就是获取短信验证码。
有的公司的短信验证码是存到数据库的,有的公司的短信验证码是存到日志里面的,但是有些短信验证码是开发都拿不到,没办法提供保存方法的。 但是我们不能因为开发没有保存这个借口 ,我们就不做短信验证码的获取了。
说到这里,大家应该知道了,小编今天要分享的就是如何拿到短信验证码。
在做拿验证码这个工作之前,小编先做了调研,就是咨询一些资深工作经验的人,如何获取到短信验证码,得到了三种方法,可能不全,请大神指出。
卡猫 (要付费)
安卓的短信广播
第三方接码平台 (要付费)
两种要付费的,不考虑了,因为qiong??。下面就来分享下,如果通过安卓的广播拿到短信验证码。
Android在收到短信后会发送一个Action为android.provider.Telephony.SMS_RECEIVED的广播,所以我们只需要写个类继承BroadcastReceiver就可以很容易地监听到短信。
小编是这样做的,首先安装个android studio,然后新建个工程,建好工程之后到工程-->app-->src-->main-->java-->com.example.xxx.myapplication 下新建个文件,文件名是SmsInterceptReceiver ,输入如下代码,如果你拷贝之后发现有些类的名称是红色的,说明你没有导包,mac 是按住alt+enter然后添加包 ,windows的快捷键请自行百度。
package com.example.getsms;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
/**
* Created by xxx on 17/3/28.
*/
public class SmsInterceptReceiver extends BroadcastReceiver {
private final String TAG = "SmsRec";
private static final String SMS_EXTRA_NAME ="pdus";

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String message = "";
Log.e(TAG, "free message " );
Bundle extras = intent.getExtras();
if ( extras != null ) {
try {
Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME );
ContentResolver contentResolver = context.getContentResolver();
Log.e(TAG, "free message " );
for ( int i = 0; i < smsExtra.length; ++i ) {
SmsMessage sms = SmsMessage.((byte[]) smsExtra[i]);
String body = sms.getMessageBody().toString();
message += body;
}
Log.e(TAG, "free message : " + message);
} catch (Exception e) {
// TODO: handle exception
Log.e(TAG, e.getMessage());
}
}
}
}
AndroidManifest.xml(这个文件在java同级目录res下)里注册一下接收器:
下面的代码添加到activity标签同级的下方即可
<receiver android:name=".SmsInterceptReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
添加权限(还是上面这个xml文件,搞不清就问下你们安卓开发):
下面这个代码我这里是添加在application标签上面的
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
手机要连上电脑,打开USB调试。adb devices查看手机有没有连接上,准备工作做好之后,点击android studio 页面上的绿色三角按钮运行即可。运行成功的话手机上会有个你自己建的工程名蓝色标题的页面。??
python 代码,主要通过adb log来获取apk包所截取的短信信息,然后进行分析后既可使用。
#coding=utf-8
import os
def GetCodeFromSms():
os.system("adb logcat -c")
cmd = ' adb logcat -d |grep E/SmsRec'
while(1):
smscode = os.popen(cmd).read()
print smscode
if (smscode!=""):
smscode = smscode.split("验证码:")[1].split(",")[0]
break;
print "验证码是:"+smscode
if __name__ == '__main__':
GetCodeFromSms()
因为小编用的是mac,所以过滤用的grep,如果你是windows,改成findstr。
文件小编是放在终端的文件夹里面,运行python文件,通过接口给被链接手机发验证码或者是用其他手机给被连接手机发送验证码进行测试。就可以在终端看见输出验证码,然后根据自己需求拿出来即可。
E/SmsRec (12345): free message
E/SmsRec (12345): free message
E/SmsRec (12345): free message : 验证码:654321
验证码是:654321
至于为什么会多出来几个free message,是因为写java那段代码的开发用Log.e调试用的。E/ 是错误消息的意思,但是可以显示出来就好。D/ 是debug 消息,I/是一般消息 W/警告消息 V/ 是各种乱七八槽的消息
以上是今天的分享,有什么不足或者问题可以在留言里面进行反馈。另外现在的代码有点小问题,如果收不到短信就陷入了死循环,就是可以看见python文件一直在运行,但是没有输出短信验证码,可以写个循环判断下,拿到验证码即跳出循环,没有拿到的话给个超时时间,大家有什么解决方式也欢迎提出短信激活码从哪看!
其实github上面还有分享个apk,但是因为看不太懂安卓代码,打包之后,apk页面显示收到的验证码是null,权限是按照readme里面配置过的,哪位朋友搞过,烦请回答下是为什么,github文章链接。
https://github.com/Robin-jiangyufeng/SmsObserverForAndroid
○
○
痛苦结成的烙印是生活
臧克家
借鉴文章链接:
https://www.360doc.com/content/16/0128/22/7249274_531344917.shtml
https://testerhome.com/topics/6970
测试百晓生
每日一文,篇篇精彩
每日一问,句句原创
投稿邮箱:csbaixiaosheng@163.com
微信号:ceshibaixiaosheng


