【装包测试】Android应用权限授权小技巧

2024-09-05 13:04

本文主要是介绍【装包测试】Android应用权限授权小技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

大家在日常测试中,每次新安装应用或游戏都有一些前置的权限设置需要点击,但在不同的Android设备上的同意按钮都不完全相同,如果需要提高脚本的通用性以及复用性我们应该怎么办呢?那我们本周就一起来探讨一下这个问题吧~

二、pm授权与取消授权指令详解

PM工具,即包管理器(Package Manager),是Android开发和测试中不可或缺的工具。可以用于执行安装应用程序、查询应用包信息、管理系统权限以及控制应用程序。通常,PM工具位于系统的/system/bin目录下。

pm工具有两个指令参数,分别是 grant(授予应用权限许可)与 revoke(撤销应用权限),在Airtest环境的具体使用如下:

#授予应用权限许可。必需android6.0(API级别23)以上的设备
shell(pm grant <packageName> <permission>)#撤销应用权限。必需android6.0(API级别23)以上的设备
shell(pm revoke <packageName> <permission>)

在知道了pm工具的使用方法之后,那我们来看一下我们常用的Android应用的权限操作指令有哪些呢?当然,我们这里只是列举了一部分常见的权限指令,更多的权限指令,我们可以自行去搜索一下。

指令说明指令
应用的电话权限android.permission.READ_PHONE_STATE
应用存储的读取权限android.permission.READ_EXTERNAL_STORAGE
应用存储的写入权限android.permission.WRITE_EXTERNAL_STORAGE
应用打开位置权限android.permission.ACCESS_COARSE_LOCATION
应用打开摄像头权限android.permission.CAMERA
应用访问麦克风android.permission.RECORD_AUDIO
应用读取联系人数据android.permission.READ_CONTACTS
应用读取短信数据android.permission.READ_SMS
应用读取设备的日历表android.permission.READ_CALENDAR
应用写入设备的日历表android.permission.WRITE_CALENDAR

如果我们需要给微博打开“允许应用的电话权限”,或者关闭“允许应用的电话权限”,那我们可以这么写:

#允许应用的电话权限
shell("pm grant com.sina.weibo android.permission.READ_PHONE_STATE")#撤销应用的电话权限
shell("pm revoke com.sina.weibo android.permission.READ_PHONE_STATE")

将应用包名跟对应的权限指令传入,即可给对应的应用开启对应权限指令,但有个别权限是需要执行两条权限授权指令,如:读写设备存储权限、读写设备日历表等

#允许应用存储的读写权限
shell("pm grant com.sina.weibo android.permission.READ_EXTERNAL_STORAGE")
shell("pm grant com.sina.weibo android.permission.WRITE_EXTERNAL_STORAGE")#撤销应用存储的读写权限
shell("pm revoke com.sina.weibo android.permission.READ_EXTERNAL_STORAGE")
shell("pm revoke com.sina.weibo android.permission.WRITE_EXTERNAL_STORAGE")

在装包后通过先行允许对应的权限,再打开应用进行测试,这样我们可以减少这类权限申请弹窗的跳出。或者需要测试应用的权限申请弹窗是否可以正常跳出的时候,可以反复通过关闭对应的权限,再进行打开应用进行测试。

三、使用案例

根据上述所说的命令以及使用方式,我们可以根据自己的测试需求组合一个小小的使用案例,我们这里就利用了微博APP为例,可以看到我们在同意了APP权限之后,直接打开是可以跳过权限弹窗的,当我们撤销关闭掉权限之后,应用的弹窗是照常出现的。

在这里插入图片描述

参考代码:

# -*- encoding=utf8 -*-
__author__ = "Airtest"from airtest.core.api import *auto_setup(__file__)from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)# 定义授予权限的函数
def grant_permit():#先行允许应用的电话权限shell("pm grant com.sina.weibo android.permission.READ_PHONE_STATE")print("已允许应用的电话权限")#允许应用存储的读写权限shell("pm grant com.sina.weibo android.permission.READ_EXTERNAL_STORAGE")shell("pm grant com.sina.weibo android.permission.WRITE_EXTERNAL_STORAGE")print("已允许应用存储的读写权限")# 定义撤销权限的函数
def revoke_permit():#撤销应用的电话权限shell("pm revoke com.sina.weibo android.permission.READ_PHONE_STATE")print("已撤销应用的电话权限")#撤销应用存储的读写权限shell("pm revoke com.sina.weibo android.permission.READ_EXTERNAL_STORAGE")shell("pm revoke com.sina.weibo android.permission.WRITE_EXTERNAL_STORAGE")print("已撤销应用存储的读写权限")if __name__ == "__main__":#安装微博appinstall("./com.sina.weibo.apk")#点击确认安装按钮poco("com.sonymobile.cta:id/btn_ok").wait_for_appearance()poco(text="确定").click()#先允许微博的所需权限grant_permit()#点击打开微博Appstart_app("com.sina.weibo")#点击开屏的用户隐私确认poco(text="我知道了").click()# 检查微博是否成功打开if exists(Template(r"tpl1725350455008.png", record_pos=(0.001, -0.803), resolution=(1080, 2520))):print("已成功打开微博")#关闭微博stop_app("com.sina.weibo")#移除微博的所需权限revoke_permit()#点击打开微博Appstart_app("com.sina.weibo")sleep(3.0)# 检查权限申请弹窗是否出现if exists(Template(r"tpl1725350984228.png", record_pos=(0.001, -0.061), resolution=(1080, 2520))):print("权限申请弹窗正常跳出")

四、小结

本周推文我们介绍了关于Android设备的应用权限授权以及撤销授权的命令以及在Airtest环境中的具体的使用方法。包括了常见的电话权限、媒体存储权限等等。大家可以根据自己的需求去找更多的权限指令,并运用起来。

同时如果大家在使用过程中有一些新的使用方式或者遇到了问题,又或者有任何想要深入了解的知识点,欢迎在官方交流群(526033840)里告诉我们或者提交issue。

这篇关于【装包测试】Android应用权限授权小技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139042

相关文章

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

CPython与PyPy解释器架构的性能测试结果对比

《CPython与PyPy解释器架构的性能测试结果对比》Python解释器的选择对应用程序性能有着决定性影响,CPython以其稳定性和丰富的生态系统著称;而PyPy作为基于JIT(即时编译)技术的替... 目录引言python解释器架构概述CPython架构解析PyPy架构解析架构对比可视化性能基准测试测

kingbase修改权限实现方式

《kingbase修改权限实现方式》该文章详细介绍了如何在数据库中创建用户并赋予其相应的权限,包括创建用户、回收默认权限、创建数据库、赋权数据库权限、创建只读用户以及回收权限等步骤... 目录前言使用步骤总结前言创建用户后对数据库对象的读写权限进行修改使用步骤1、创建用户create user cs

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2