python自动化测试绕过手机验证码

自动化测试登录需使用手机验证码,但是测试水平太弱只能让开发写死验证码???
不服气就试试别的方法,这里提供两种解决思路:

1.从服务器日志中获取

此种方法尤其适合生产数据库不开放给测试的公司,短信应用会将日志存在服务器上实现方式如下:

1.1 日志结构:
python自动化测试绕过手机验证码_第1张图片
1.2 安装paramiko库用于SSH登录服务器:

pip install paramiko

1.3 python编码连接服务器并查询结果

import paramiko
import re

hostname = "服务器host"
port = 端口号
username = "服务器账号"
password = "密码"
#创建SSH对象
client = paramiko.SSHClient()
#自动添加策略,保存服务器的主机名和密钥信息
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
client.connect(hostname, port, username, password, compress=True)
# 执行linux命令,进入日志文件夹,过滤日志
stdin, stdout, stderr = client.exec_command('cd /home/data/app/sms/logs&grep "测试手机号" msg.log')
#返回的是个列表,切片只要最新的日志
query_res = stdout.readlines()[-1]
#正则匹配提取验证码,切片只要列表中的值
sms_code=re.findall(r'为(.*?),',query_res)[0]
print(sms_code)

1.4 运行结果
在这里插入图片描述

2.从数据库获取

此种方法最简单,后端短信服务会将每次发送的验证码信息存进数据库,只需要使用pymysql连接数据库,查询到最新的短信内容,正则提取出验证码即可,实现方式如下:

2.1.1 数据库结构如下:

python自动化测试绕过手机验证码_第2张图片
2.1.2 SQL语句验证一下
python自动化测试绕过手机验证码_第3张图片
2.2 安装pymysql库用于操纵数据库

pip install pymysql

2.3编码实现

import pymysql
from pymysql.cursors import DictCursor
import re

#创建数据库连接,填写数据库连接参数,定义返回格式为字典
connect_sql = pymysql.connect(host = '数据库地址',
                            port = 3306,
                            user = '用户',
                            password = '密码',
                            charset = 'utf8',
                            database='数据库名',
                            cursorclass=DictCursor)
#建立游标,如需多次获取数据建议每次单独创建游标查询
mycursor = connect_sql.cursor()
#执行查询语句
mycursor.execute('SELECT record_sms_send.content '
                 'FROM record_sms_send '
                 'WHERE record_sms_send.phone = 测试手机号 '
                 'AND record_sms_send.`status` = 1 '
                 'AND record_sms_send.send_type = 1 '
                 'ORDER BY record_sms_send.send_time DESC '
                 'LIMIT 1;')
#接收查询结果,取出结果字典中的content字段值,并用正则表达式匹配出结果
query_msg=mycursor.fetchone()["content"]
sms_code=re.findall(r'为(.*?),',query_msg)[0]
print(sms_code)

#关闭连接和游标,避免内存消耗
mycursor.close()
connect_sql.close()

2.4执行结果
在这里插入图片描述

3.总结

以上两种方法都可以解决手机验证码依赖,可以根据自己情况活学活用,可以将上面的代码封装成工具,每次需要使用的时候放在用例前进行调用。

你可能感兴趣的:(接口自动化,python,自动化)