• 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
  • 相关阅读:
    COM+帐户权限注意事项
    [转]MVC和MVP的一些思考
    让VS智能感知Nhibernate的映射文件
    C#中使用Ftp一例
    [源码共享]以前用Remoting写的一个小游戏:Network Bomb
    wxwidgets学习与使用备忘录三(烦恼与便捷解决方案篇)
    regsvr32简介
    cocos2dx for XNA
    使用wxformbuilder进行wxwidgets的快速开发
    wxwidgets学习与使用备忘录一(下载、安装、配置篇)
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/5002296.html
Copyright © 2020-2023  润新知