51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2123|回复: 0
打印 上一主题 下一主题

【我分享】android自动获取短信验证码

[复制链接]
  • TA的每日心情
    慵懒
    2017-7-9 10:38
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    跳转到指定楼层
    1#
    发表于 2015-1-9 08:42:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    好吧,标题党了~
    前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码。
    主要就是实时获取短信信息。
    android上获取短信信息主要有BroadcastReceiver方式与数据库方式,要实时的话就BroadcastReceiver比较方便
    [java] view plaincopy

    • public class SMSReceiver extends BroadcastReceiver{  
    •       private String verifyCode="";  
    •     public static final String TAG = "SMSReceiver";  
    •     public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";  
    •     @Override  
    •     public void onReceive(Context context, Intent intent){  
    •        if (intent.getAction().equals(SMS_RECEIVED_ACTION)){  
    •            SmsMessage[] messages = getMessagesFromIntent(intent);  
    •            for (SmsMessage message : messages){  
    •               Log.i(TAG, message.getOriginatingAddress() + " : " +  
    •                   message.getDisplayOriginatingAddress() + " : " +  
    •                   message.getDisplayMessageBody() + " : " +  
    •                   message.getTimestampMillis());  
    •               String smsContent=message.getDisplayMessageBody();  
    •               Log.i(TAG, smsContent);               
    •               writeFile(smsContent);//将短信内容写入SD卡  
    •            }  
    •        }  
    •     }  
    •   
    •     public final SmsMessage[] getMessagesFromIntent(Intent intent){  
    •         Object[] messages = (Object[]) intent.getSerializableExtra("pdus");  
    •         byte[][] pduObjs = new byte[messages.length][];  
    •         for (int i = 0; i < messages.length; i++)  
    •         {  
    •             pduObjs = (byte[]) messages;  
    •         }  
    •         byte[][] pdus = new byte[pduObjs.length][];  
    •         int pduCount = pdus.length;  
    •         SmsMessage[] msgs = new SmsMessage[pduCount];  
    •         for (int i = 0; i < pduCount; i++)        {  
    •             pdus = pduObjs;  
    •             msgs = SmsMessage.createFromPdu(pdus);  
    •         }  
    •         return msgs;  
    •     }  
    •   //将短信内容写到SD卡上的文件里,便于将文件pull到PC,这样可方便其它如WWW/WAP平台的自动化   
    •     @SuppressLint("SdCardPath")  
    •     public void writeFile(String str){  
    •         String filePath="/mnt/sdcard/verifyCode.txt";         
    •         byte [] bytes = str.getBytes();  
    •         try{  
    •         File file=new File(filePath);  
    •         file.createNewFile();  
    •         FileOutputStream fos=new FileOutputStream(file);  
    •         fos.write(bytes);  
    •         fos.close();  
    •         }catch(IOException e){  
    •             e.printStackTrace();  
    •         }         
    •     }  


    如此当有短信收到时就可以将短信内容写到SD卡中的文件里
    在另一个java类中写个读取文件内容的方法,并在写测试用例过程中,将得到的String按验证码的具体位置截取即可。

    [java] view plaincopy

    • public String read(String str) throws IOException{   
    •         File file=new File(str);  
    •         FileInputStream fis=new FileInputStream(file);  
    •         StringBuffer sb=new StringBuffer();  
    •          
    •         BufferedInputStream bis=new BufferedInputStream(fis);  
    •         BufferedReader  read = new BufferedReader (new InputStreamReader(bis));  
    •         int c=0;  
    •         while ((c=read.read())!=-1) {  
    •             sb.append((char) c);  
    •         }  
    •         read.close();  
    •         bis.close();  
    •         fis.close();  
    •         Log.i(TAG, sb.toString());        
    •         String verify=sb.toString();         
    •         return verify;  
    •     }  


    最后需要在manifest中增加申明,且注册权限
    <receiver android:name="com.cplatform.surfdesktop.test.util.SMSReceiver">
                <intent-filter>
                    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                </intent-filter>

    </receiver>

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


    测试过程中需要用到短信验证码时就可以实时获取了


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏1
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-11 00:05 , Processed in 0.069290 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表