Android自动化测试中操作技巧合集(建议收藏)

news2025/1/17 6:19:33

Android自动化测试中短信验证码的操作技巧
一、内容提供器机制简介
Android 系统采用了内容提供器(ContentProvider)机制来管理不同应用的数据访问。内容提供器为不同应用间的数据共享提供了接口,它们像是一个中央数据仓库,各个应用可以通过内容 URI 来存取数据。每条短信都会被存储在内容提供器的SMS ContentProvider中。SMS ContentProvider的内容 URI 地址是content://sms/inbox。所以通过操作这个内容 URI,我们可以获取存储在系统中的短信信息。

二、获取方式介绍
获取短信验证码主要有两种方式:

通过 adb shell 和 content 命令查询内容提供器,直接获取短信信息。
编写 Android 程序,通过 Android SDK 提供的 API 查询内容提供器。本文主要介绍第一种方式,即通过 adb 命令获取短信验证码。
三、命令解析

adb shell 进入adb命令行模式
content query --uri <内容URI> 查询内容提供器的内容
--projection <列名> 指定查询返回的列
--where <条件> 指定查询的条件
--sort <排序方式> 指定结果排序方式
--limit <数量> 指定返回数据的最大行数

所以,我们可以通过组合这些参数,写入 adb 命令,直接查询取得短信验证码。例如:

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 命令,封装成函数可以提高代码复用率,也使自动化测试用例的实现更简洁。同时,加入一定校验与优化,可以使获取验证码更稳定可靠。

随着测试需求的变更,我们也可以轻松调整内部实现逻辑。总之,合理利用内容提供器机制,可以帮助我们将测试用例的自动化做到更彻底。

下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

 

资料获取方式 :

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/944170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

比较差值结构的两种排斥作用

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;让差值结构中有两个点&#xff0c;一种情况两个点都属于A&#xff0c;一种情况两个点分别来自A和B。排列组合所有可能&#xff0c;统计迭代次数并排序。…

【C++多态】

目录 1.多态的概念2.多态的定义及实现2.1多态的构成条件2.2虚函数的一些细节2.3析构函数可以是虚函数吗&#xff1f;2.4 重载、覆盖(重写)、隐藏(重定义)的对比 3.抽象类4.多态的原理4.1虚函数表4.2虚函数地址的打印4.3多继承的函数虚表 1.多态的概念 什么是多态&#xff1f; …

FLV 封装格式解析

1、FLV 简介 FLV(Flash Video) 是 Adobe 公司推出的一种流媒体格式&#xff0c;由于其封装后的音视频文件体积小、封装简单等特点&#xff0c;非常适合于互联网上使用。目前主流的视频网站基本都支持FLV。采用 FLV 格式封装的文件后缀为.flv。直播场景下拉流比较常见的是 http…

git学习笔记(重实践) | 版本管理 - 分支管理 - 常见场景

文章目录 git学习笔记Git是什么仓库常见的命令commit 备注规范在文件下设置git忽略文件 .gitignore 版本管理git log | git reflog 查看提交日志/历史版本版本穿梭 git resetgit reset HEAD <file> git checkout -- fileName 丢弃工作区的修改git revertGit恢复之前版本的…

成功项目风险预防可控的5个重点

成功的项目往往重视项目风险的预防和管控&#xff0c;这样有利于可能风险的及时控制和解决&#xff0c;将其不利影响降到最小。如果不重视对风险的预防和管控&#xff0c;不及时发现和处理项目风险&#xff0c;那么项目风险往往会为我们带来意想不到的不利后果&#xff0c;往往…

【LeetCode-中等题】146. LRU 缓存

文章目录 题目方法一&#xff1a;直接继承LinkedHashMap调用api方法二&#xff1a;自定义LinkedHashMap HashMap ListNode LinkedHashMap 题目 LRU缓存是什么&#xff1a;LRU缓存机制&#xff0c;你想知道的这里都有 实现 LRU 缓存算法 方法一&#xff1a;直接继承Linked…

深度图相关评测网站

文章目录 1 单目/Stereo相关测评网站介绍12 单目/Stereo相关测评网站介绍23 单目/Stereo相关测评网站介绍3 1 单目/Stereo相关测评网站介绍1 https://vision.middlebury.edu/stereo/eval3/ 2 单目/Stereo相关测评网站介绍2 http://www.cvlibs.net/datasets/kitti/eval_stereo…

Vscode画流程图

1.下载插件 Draw.id Integration 2.桌面新建文件&#xff0c;后缀名改为XXX.drawio 在vscode打开此文件 &#xff0c;就可以进行绘制流程图啦

无涯教程-Android - Broadcast Receivers

Broadcast Receivers 仅响应来自其他应用程序或系统本身的广播消息&#xff0c;这些消息有时称为events或intents。例如&#xff0c;应用程序还可以启动广播&#xff0c;以使其他应用程序知道某些数据已下载到设备并可供他们使用&#xff0c;因此广播接收器将拦截此通信并启动适…

做区块链卡牌游戏有什么好处?

区块链卡牌游戏是一种基于区块链技术的创新性游戏形式&#xff0c;它将传统的卡牌游戏与区块链技术相结合&#xff0c;实现了去中心化、数字化资产的交易和收集。这种新型游戏形式正逐渐在游戏行业引起了广泛的关注和热潮。本文将深入探讨区块链卡牌游戏的定义、特点以及其在未…

自定义node-red节点中,如何编写节点的配置信息弹窗

前言 最近有读者通过博客向我咨询,在自定义node-red节点时,如何编写该节点的配置页面,就是我们通常见到的,双节节点打开的信息弹窗。如下图: 上面两张图,展示了inject节点与mqtt in 节点的配置弹窗。 在弹窗中,除了上面的删除,取消,完成,和下面的失效按钮。 中间…

以“迅”防“汛”!5G视频快线筑牢防汛“安全堤”

近期&#xff0c;西安多地突发山洪泥石流灾害。防洪救灾刻不容缓&#xff0c;为进一步做好防汛工作&#xff0c;加强防洪调度监管&#xff0c;切实保障群众的生命财产安全&#xff0c;当地政府管理部门亟需拓展智能化技术&#xff0c;通过人防技防双保障提升防灾救灾应急处置能…

模型的保存加载、模型微调、GPU使用及Pytorch常见报错

序列化与反序列化 序列化就是说内存中的某一个对象保存到硬盘当中&#xff0c;以二进制序列的形式存储下来&#xff0c;这就是一个序列化的过程。 而反序列化&#xff0c;就是将硬盘中存储的二进制的数&#xff0c;反序列化到内存当中&#xff0c;得到一个相应的对象&#xff…

深度学习论文: Segment Any Anomaly without Training via Hybrid Prompt Regularization

深度学习论文: Segment Any Anomaly without Training via Hybrid Prompt Regularization Segment Any Anomaly without Training via Hybrid Prompt Regularization PDF: https://arxiv.org/pdf/2305.10724.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch Py…

【计算机系统概论Yale.patt】第二章

文章目录 2.数据的表示与计算2.1 bit2.1.1 信号的编码表示2.1.2 计算机采用二进制的原因2.1.3 数据类型无符号整数有符号整数原码反码补码编码方式与范围移码4-bit的不同编码方式 2.1.4 IEEE754浮点数尾数指数0000 0000 含义1111 1111含义 例 2.2 进制转换2.2.1 二转十2.2.2 十…

python面试:使用cProfile剖析程序性能

我们需要安装tuna&#xff1a;pip install tuna 程序执行完毕后&#xff0c;我们会得到一个results.prof&#xff0c;在CMD中输入指令&#xff1a;“tuna results.prof”。 import time import cProfile import pstatsdef add(x, y):resulting_sum 0resulting_sum xresulti…

mysql数据表Table is marked as crashed and should be repaired 的解决办法

错误原因 网上查了一下&#xff0c;错误的产生原因&#xff0c;有网友说是频繁查询和更新XXXX表造成的索引错误&#xff0c;还有说法是Mysql数据库因某种原因而受到了损坏。 【如&#xff1a;数据库服务器突发性断电&#xff0c;在数据表提供服务时对表的源文件进行某种操作都…

Java程序生成可执行exe文件及可安装程序

Java程序生成可执行exe文件及可安装程序 文章目录 Java程序生成可执行exe文件及可安装程序整体流程Maven项目打成jar包打成可执行文件准备工作&#xff1a;exe4j的下载、安装与激活使用exe4j打包 打成可安装文件参考 整体流程 将项目打包成可正常运行的jar包&#xff08;使用命…

涉及结构体的排序问题

简单举一个例子来介绍涉及结构体的排序问题。 例&#xff1a;输入若干学生姓名、语文成绩、数学成绩、英语成绩&#xff0c;根据三科成绩总分由高到低进行排序。 输入数据&#xff1a; 小明 78 89 90 小红 87 88 77 小华 91 92 96 输出样例&#xff1a; 小华 91 92 96 279 小明…

通义千问本地化部署不调用GPU只调用CPU的检查方法

今天部署本地版通义千问的时候遇到一个问题。 启动他的cli_demo.py调用的一直都是CPU模式的。 检查cuda已经正确安装&#xff0c;后面发现是torch即PyTorch的安装问题。 我安装torch的时候&#xff0c;用的是默认指令&#xff0c;没有增加别的参数。 检测一下&#xff0c;输出…