先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
正文
adb shell "content query --uri content://sms/inbox --projection body --where “address=‘135XXXXXXXX’”
这条命令的作用是:
--uri content://sms/inbox
指定查询短信内容提供器的收件箱--projection body
只查询短信的 body,也就是内容列--where "address='135XXXXXXXX'"
指定过滤条件,地址等于发验证码的手机号
这样我们就可以直接取得该手机号发送过来的短信验证码了。
四、实际应用
在自动化测试中,我们可能需要频繁获取短信验证码,以实现某些测试用例。例如注册账号和重置密码时,都需要验证短信验证码。每运行一遍测试用例,都需要获取新的验证码。为了简化这部分的处理,我们可以编写一个获取验证码的公共函数。利用 adb 命令查询短信内容提供器,获取到最近的一条短信,然后通过正则表达式解析出 6 位数字验证码。这样就可以实现一个通用的获取验证码组件。示例代码:
import re
import subprocess
def get_verification_code(phone_number):
构建adb命令
adb_command = f’adb shell "content query --uri content://sms/inbox --projection body --where “address=‘{phone_number}’”’
执行命令,取得输出
output = subprocess.check_output(adb_command).decode(‘utf-8’)
解析验证码
match = re.search(r’(\d{6})', output)
if match:
return match.group(1)
return None
这样,在任意测试用例里,我们就可以直接调用该函数来获取验证码,而不需要每次都写 adb 查询的代码。
五、优化效果
- 将专用功能封装成函数,提高代码复用率
- 将 adb 命令进行参数化,使查询更通用灵活
- 使用正则表达式解析验证码,减少处理过程中的硬编码
- 分离业务代码和底层实现,降低代码耦合 以上几点优化,使得获取验证码的逻辑更清晰,也为未来可能的改造提供了方便,例如需要改用 UI 自动化工具获取时,只需要调整函数内部实现即可,外部调用方无须做任何改变。
六、注意事项
- 小部分 Android 系统版本需要开启
adb shell
的root
权限,才能查询短信内容提供器 - 如果有多个发送方发送了验证码短信,需要额外加入限制,仅获取指定发送方的短信
- 短信内容提供器的数据以时间倒序排序,要获取最新短信可以加上限制行数的参数
- 短信内容可能以编码形式存储,需要检查是否需要提前做解码
- 考虑到网络及其他因素,短信接收可能有延迟,获取时需要加入重试逻辑
- 验证码有一定有效期,获取的验证码需要判断时间距离发送时长,避免使用过期验证码
- 测试环境中需要考虑重复数据的影响,保证每次获取的都是新的验证码
七、总结
本文介绍了如何通过 adb 命令查询内容提供器的方式来自动化获取短信验证码,并给出了一个示例代码实现。相比每次编写 adb 命令,封装成函数可以提高代码复用率,也使自动化测试用例的实现更简洁。同时,加入一定校验与优化,可以使获取验证码更稳定可靠。
随着测试需求的变更,我们也可以轻松调整内部实现逻辑。总之,合理利用内容提供器机制,可以帮助我们将测试用例的自动化做到更彻底。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!