• 转载:Android自动化测试- 自动获取短信验证码


    前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码。

    主要就是实时获取短信信息。

    android上获取短信信息主要有BroadcastReceiver方式与数据库方式,要实时的话就BroadcastReceiver比较方便

    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[i] = (byte[]) messages[i];
            }
            byte[][] pdus = new byte[pduObjs.length][];
            int pduCount = pdus.length;
            SmsMessage[] msgs = new SmsMessage[pduCount];
            for (int i = 0; i < pduCount; i++)        {
                pdus[i] = pduObjs[i];
                msgs[i] = SmsMessage.createFromPdu(pdus[i]);
            }
            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按验证码的具体位置截取即可。

    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"/>

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

  • 相关阅读:
    leetcode 673. 最长递增子序列的个数 java
    leetcode 148. 排序链表 java
    leetcode 98. 验证二叉搜索树 java
    leetcode 29. 两数相除 java
    leetcode 234. 回文链表 java
    Valid Palindrome LeetCode Java
    Single Number II LeetCode Java
    Single Number LeetCode java
    Search in Rotated Sorted Array II LeetCode Java
    Search in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/dtest/p/4549287.html
Copyright © 2020-2023  润新知