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

 

posted @ 2015-11-28 10:39  狂师  阅读(2083)  评论(0编辑  收藏  举报