zoukankan      html  css  js  c++  java
  • python解决接口测试获取手机验证码问题

    最近在做接口测试的时候遇到一个问题,就是有个很重要的接口要用到手机短信验证码,而其他接口都依赖于这个验证码,如果没有短信验证码就不能进行下面接口的测试,所以为了定时的验证线上的接口是否正常,而且又不修改代码,所以就想到一下解决方案,如果大家有了更好方案可以一起交流分享
    
    android 代码
    Android在收到短信后会发送一个Action为android.provider.Telephony.SMS_RECEIVED的广播,所以我们只需要写个类继承BroadcastReceiver就可以很容易地监听到短信。
    
    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.text.TextUtils;
    import android.util.Log;
    
    
    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.createFromPdu((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里注册一下接收器:
    
     <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"/>
    
    
    python 代码,主要通过adb log来获取apk包所截取的短信信息,然后进行分析后既可使用
    __author__ = 'guozhenhua'
    #coding=utf-8
    import urllib2
    import os,time
    
    
    
    #解析短信验证码
    os.system("adb logcat -c")
    cmd="adb logcat -d |findstr E/SmsRec"
    #time.sleep(30);
    while(1):
        smscode= os.popen(cmd).read()
        #print smscode
        if (smscode!=""):
            smscode=smscode.split("验证码:")[1].split(",")[0]
            break;
    
    
    print "验证码是:"+smscode
  • 相关阅读:
    解决Win8设置为快速启动后ubuntu不能访问win下磁盘的方法
    Why Not Specialize Function Templates?
    Build your first web service with PHP, JSON and MySql
    本地开发与linux服务器端的文件传输
    数据库设计中一对多的解决方法.
    C++ 模板练习摘要
    Understanding ASP.NET Validation Techniques
    我的sublime text 个人设置
    Eclipse 快捷键
    数字图像处理
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/5002296.html
Copyright © 2011-2022 走看看