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

2023-11-16

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、计算机基础

 

资料获取方式 :

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android自动化测试中操作技巧合集(建议收藏) 的相关文章

随机推荐

  • Android 统一打包框架(附源码下载)

    唠叨 把手给我 我带你去吃云浮吃石磨肠粉 云吞面 木瓜渣 那里的肠粉和广州的不一样 皮很薄很滑 肉馅没广州的那么花里胡哨 只有肉碎和香葱 但吃起来就很香滑 再配上它的甜辣酱 那味道好极了 云吞面的面是手打的竹升面 就是手动用个大竹子 一下下
  • 做量化你需要知道的那些术语!(持续更新)

    金融相关 股票 股份公司发行的所有权凭证 债券 承诺按一定利率支付利息并按约定条件偿还本金的债权债务凭证 风险较低 固定收益 固定收益类投资指投资于银行定期存款 协议存款 国债 金融债 企业债 可转换债券 债券型基金等固定收益类资产 风险低
  • antd design pro 之「PageHeaderWrapper」

  • 微服务-API网关-权限控制

    权限控制介绍 权限控制是一个古老的话题 你可能会想有没有什么权限设计方案可以满足所有的应用场景呢 答案是没有 就像几乎所有问题一样 没有一种系统可以解决所有情况的 我们需要根据不同的场景和需求来设计不同的系统 权限控制主要设计用户 角色 组
  • CCIE面试题

    前言 这里是几个月前在网上转载很多的CCIE面试题 题虽然不难 但如果没有在电信或cisco代理商工作过 仅仅凭书面的知识还是回答不全的 下面是网上的参考答案加上我的一点点补充 以后有时间再补充 先贴出来供大家参考 也让从事相关技术的人自我
  • YOLOV5更换轻量级的backbone:mobilenetV2

    目录 简洁概要 修改主干网络 一 添加自己主干网络 二 在yolo py中添加common中的两个函数 三 制作mobilenetv2的yaml配置文件 四 制作数据集VOC的yaml配置文件 五 启用训练 六 性能检测 简洁概要 Mobi
  • Elasticsearch 8.8.0 发布

    Elasticsearch 是一个基于 Lucene 库的搜索引擎 它提供了一个分布式 支持多租户的全文搜索引擎 具有 HTTP Web 接口和无模式 JSON 文档 Elasticsearch 基于 Java 开发 并在 SSPL Ela
  • 使用mongo命令工具操作集合数据

    与 MongoDB 建立连接 mongo 如果设置了密码 使用这行命令 mongo port 27017 u admin p xxxxxx authenticationDatabase admin 以操作八月创建的历史数据为例 确认操作集合
  • docker 启动时错误docker: Cannot connect to the Docker daemon

    在学习docker的时候遇到一个错误docker Cannot connect to the Docker daemon at unix var run docker sock Is the docker daemon running 如下
  • make[1]: [persist-settings] Error 2 (ignored) CC adlist.o /bin: cc: command not found make[1]: *

    Linux系统安装Redis执行Make编译时报错 make 1 persist settings Error 2 ignored CC adlist o bin cc command not found make 1 adlist o E
  • 微信小程序 scroll-view的滚动条设置

    小程序的scroll view用的比较多了 列表页一般也没管它的滚动条 最近突然发现在android与ios中横向滑动的时候表现不一样 不一样在哪呢 ios上直接就不显示啊 也是没谁了 深入想了一下 这滚动条能不能换一颜色或者换个样式 有这
  • 基于AIOT技术的智慧校园空调集中管控系统设计与实现

    AIOT技术的智慧校园空调集中管控系统设计与实现本科毕业论文 I 引言 本文旨在探讨基于AIOT技术的智慧校园空调集中管控系统的设计和实现 首先 综述当前AIOT技术发展状况和智慧校园空调集中管控系统在当前应用领域中的重要性 其次 分析相关
  • 原理图符号(原理图库)创建流程及注意事项

    参考资料 电巢EMEA体验营二期 1 原理图符号创建流程 1 0 元器件属性 以一款压力传感器芯片LPS22HH为例 来讲解原理图符号的创建流程 LPS22HH的引脚描述如下所示 1 1 创建工程 1 2 创建原理图符号文件 创建完成原理图
  • Xilinx BUFGMUX使用注意事项

    Xilinx BUFGMUX使用注意事项 最近使用Xilinx FPGA的时候 需要用到一个外部时钟和一个PLL产生的时钟 可以通过外部SWICH进行时钟的切换 觉得这种方式可以通过原语例化完成 原语 果不其然 在原语示例中找到了类似的模块
  • java基础:浅谈泛型

    1 为什么要使用泛型 给一段代码 import java util ArrayList import java util List public class GenericList error public static void main
  • 解决“The method XXXXXX of type XXXXXXXXX must override a superclass method”

    我的Eclipse版本是3 6 1 Override 时出现以下错误 The method XXXXXX of type XXXXXXXXX must override a superclass method 上网搜索原来原因是 实现类里面
  • Docker 部署Streamlit项目

    文章目录 前言 关于streamlit Docker 部署Streamlit项目 Streamlit如何部署到云服务器 1 安装docker 2 拉取python镜像 2 1 什么是DockerHub 2 2 配置docker加速器 2 3
  • SpringMVC增删改查(CRUD)的实现

    目录 前言 一 前期准备 1 pom xml 依赖与插件的导入 2 jdbc properties 数据库连接 3 log4j2 xml 日志文件 4 spring mybatis mybatis与spring整合文件 5 spring c
  • 解决AttributeError: module 'tensorflow' has no attribute 'ConfigProto'

    使用CUDA10 1加上Tensorflow 2 0会出现AttributeError module tensorflow has no attribute ConfigProto 这个问题 这个是由于现在新版本中一些1 0版本的函数被和2
  • Android自动化测试中操作技巧合集(建议收藏)

    Android自动化测试中短信验证码的操作技巧 一 内容提供器机制简介 Android 系统采用了内容提供器 ContentProvider 机制来管理不同应用的数据访问 内容提供器为不同应用间的数据共享提供了接口 它们像是一个中央数据仓库