自动化测试 短信验证登录
方法一:跟服务器开发沟通给一个接口:
import requests, json
r = requests.get(url='http://test-capha.singer.com/c/13524273413
') # 带参数的GET请求
verifycode = eval(r.text)[1]['verifycode']
print(verifycode)
r = requests.get(url='http://test-capha.singer.com/c/13524273413
') # 带参数的GET请求
verifycode = eval(r.text)[1]['verifycode']
print(verifycode)
方法二,在网上找到的方法记录下:
参考链接: http://www.jb51.net/article/89747.htm,之前试的发现只保存短信的后面一部分,后来才发现是前面一排字被挡住了。。。。。。。
分两步:第一步在手机端安装一个apk,保存手机的短信到txt文档里面:
public class SMSReceiver extends BroadcastReceiver {
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);
String verifyCode="";
for (SmsMessage message : messages){
verifyCode += message.getDisplayMessageBody();
}
writeFile(verifyCode);//将短信内容写入SD卡
}
}
public final SmsMessage[] getMessagesFromIntent(Intent intent){
Object[] messages = (Object[]) intent.getExtras().get("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();
}
}
}
注册:
receiver android:name=".SMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_SMS"/>
打包apk后安装
第二步:使用adb 命令读取txt文档内容,再从中获取短信 C#
//从手机文件中获取短信
public String getSmsText()
{
Process process = new Process();
String command = "adb shell cat /mnt/sdcard/verifyCode.txt";
string outtr = "";
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/C" + command;
process.StartInfo.RedirectStandardInput = true; //重定向输入(一定是true)
process.StartInfo.RedirectStandardOutput = true; //重定向输出
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
try
{
process.Start();
outtr = process.StandardOutput.ReadToEnd();
process.WaitForExit(5000);
}catch(Exception e)
{
Console.WriteLine(e.Message);
}finally
{
if(process != null)
process.Close();
}
Console.WriteLine("开始读取内容" + outtr);
return outtr;
}
//从短信中提取验证码
public String getVerificationCode(String s)
{
MatchCollection mc = Regex.Matches(s, @"\d{6}");
String str = "";
int k = 0;
foreach (Match item in mc)
{
if (k == 1)
break;
Console.WriteLine(item.Value);
str = item.Value;
k++;
}
return str;
}