python解決介面測試擷取手機驗證碼問題

來源:互聯網
上載者:User

標籤:

最近在做介面測試的時候遇到一個問題,就是有個很重要的介面要用到手機簡訊驗證碼,而其他介面都依賴於這個驗證碼,如果沒有簡訊驗證碼就不能進行下面介面的測試,所以為了定時的驗證線上的介面是否正常,而且又不修改代碼,所以就想到一下解決方案,如果大家有了更好方案可以一起交流分享


android 代碼

Android在收到簡訊後會發送一個Action為android.provider.Telephony.SMS_RECEIVED的廣播,所以我們只需要寫個類繼承BroadcastReceiver就可以很容易地監聽到簡訊。

 
  1. 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";@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString 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裡註冊一下接收器:

 
  1.  <receiver android:name=".SmsInterceptReceiver">        <intent-filter>        <action android:name="android.provider.Telephony.SMS_RECEIVED" />        </intent-filter>        </receiver>

添加許可權:

 
  1. <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

python解決介面測試擷取手機驗證碼問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.