【装包测试】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

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi