写点什么

安卓 App 测试简析

  • 2020-02-12
  • 本文字数:2376 字

    阅读完需:约 8 分钟

安卓App测试简析

安卓系统知识简介


1.1 安卓系统架构:


1、应用程序层


2、应用程序框架层


3、系统运行库库层


4、系统内核层


1.2 安卓权限系统:


Android 操作系统其实是一个多用户的 linux 操作系统,每个 android 应用使用不同的用户,运行在自己的安全沙盘里。系统为所有的文件设置权限,这样一来只有同一个用户的应用可以访问它们。每个应用都有自己单独的虚拟机,这样应用的代码在运行时是隔离的,即一个应用的代码不能随意访问或者意外修改其他应用的内部数据。


1.3 安卓调试桥简介:


ADB,即 Android Debug Bridge,他是 Android 提供的一个通用的调试工具,借助这个工具,我们可以很好的调试开发的程序,adb.exe 在安装的 Android 的 sdk 开发包 platform-tools 目录下。


它是一个客户端/服务器架构的命令行工具,主要由以下 3 个部分组成:


1、adb 客户端:一个用于用户开发程序的电脑上运行的客户端


2、adb 服务端:负责客户端与用户设备的守护进程的通信


3、adb daemon(守护进程):一个以后台进程的形式运行于模拟器或者物理手机设备上的守护程序


1.4 系统监控 ADB 命令


1.4.1 查看应用启动耗时


adb-s *设备 id shell am start -W -n 应用名.app/ .MainActivity


1.4.2 获得电池电量和电池温度


adb shell dumpsys battery


1.4.3 获得最耗资源的应用


adb -s *设备 id * shell top -m 6 -n l -s cpu


1.4.4 获得内存使用情况


adb -s *设备*id adb shell dumpsys meminfo 应用程序包名


1.4.5 获取指定程序 cpu 使用情况


adb -s *设备*id shell dumpsys cpuinfo 应用程序包名


1.4.6 获取指定程序 PID


adb shell “ps | grep packageName”


安卓 APP 测试流程图:


安卓 app 测试简析图片.png


App 测试点


3.1 UI 测试


1、按钮、对话框、列表和窗口等静态界面测试


2、内容(列表页、提示框)等动态界面测试


3.2 兼容性测试


1、不同手机品牌


2、不同的操作系统以及操作系统的不同版本


3、不同手机屏幕分辨率和不同屏幕尺寸(一般测试主流分辨率)


4、网络环境的兼容性 (WiFi、移动网络、弱网环境、无网络环境)


5、与本地软件的兼容性


3.3 安装卸载测试


1、应用程序的正常安装,图标显示正常,安装后正常运行(不同操作系统下安装)


2、不同版本之间的覆盖安装


3、覆盖安装后,用户数据的保留


4、应用程序的正常卸载,卸载后用户数据是否删除


5、安装/卸载过程中异常情况(断电,空间不足等)


6、 安装/卸载过程是否支持取消操作


3.4 版本升级测试


1、当客户端有新版本时,有更新提示。


2、 当版本为非强制升级版时,用户可以取消更新,老版本能正常使用。用户在下次启动 app 时,仍能出现更新提示。


3、当版本为强制升级版时,当给出强制更新后用户没有做更新时,退出客户端。下次启动 app 时,仍出现强制升级提示。


4、当客户端有新版本时,在本地不删除客户端的情况下,直接更新检查是否能正常更新。


3.5 交互测试


1、应用的前后台切换


2、杀进程


3、锁屏


4、长时间待机


5、中断


3.6 客户端数据库测试


1、客户端后台数据的增、删、改、查等数据更新测试


2、数据为空的情况测试


3、检查客户端数据存在时,app 数据是否能自动从客户端数据中取出,检查客户端数据存在时,app 数据是否能自动从客户端数据中取


4、当业务对数据进行了修改、删除后,客户端和服务端是否会有相应的更新。


3.7 接口测试


1、业务逻辑功能测试


2、边界值测试


3、参数组合测试


4、异常情况测试


3.8 性能测试


1、单位时间耗电量


2、单位时间网络流量


3、移动端相关资源利用率


4、业务响应时间


5、帧率(主要针对游戏应用)


工具 Emmagee 简介:


4.1 简介


Emmagee 是网易杭州研究院 qa 团队开发的一款用于监控安卓客户端性能的小工具,可以监控指定被测应用在使用过程中器的启动时间、CPU、内存、流量和电量变化情况,用户可自定义配置监控的频率以及性能的实时显示,并最终生成一份性能统计 csv 文件,支持 Android2.2 及以上版本。


4.2 主要功能


1、检测当前时间被测应用的 CPU 使用率以及总体 CPU 使用量。


2、检测当前时间被测应用占用的内存量、百分比,剩余内存量。


3、检测应用从启动开始到当前时间消耗的流量数。


4、测试数据写入到 CSV 文件中,存储在手机/storage/sdcard0 目录下,同时支持以邮件形式发送文件。


5、可以选择开启浮窗功能,浮窗中实时显示被测应用占用性能数据信息。


6、在浮窗中可以快速启动或者关闭手机的 wifi 网络。


4.3 实现原理


4.3.1、监控 CPU 的实现原理


Android 系统是基于 Linux 内核的,所以系统文件的结构和 Linux 下一样,系统总体 CPU 使用信息放在/proc/stat 文件下,/proc/cpuinfo 文件存放 CPU 的其它信息,包括 CPU 名称,直接读取即可。Emmagee 是将选中应用的 PID 传入,读取/proc/PID/stat 文件信息及可获取该 PID 对应程序的 CPU 信息。


4.3.2、监控内存的实现原理


内存和 cpu 的处理方式类似。先获取到当被测应用的 PID,然后按照 PID 从 /proc/meminfo 文件中获取当前被测应用占用的内存信息。


4.3.3、监控流量消耗的实现原理


系统中有存放整体流量和针对当程序的流量统计,/proc/net/dev 和/proc/uid_stat/UID 下存放 tcp_rcv 和 tcp_send 文件,分别存放下行流量和上行流量,操作前后相减就得出结果 。


4.3.4、监控电量的实现原理


电量、电压和温度情况是通过监听系统的电池管理事件的广播来获取的。


4.3.5、监控启动时间的实现原理


我们点击界面的开始测试时,程序会启动 EmmageeService,之后所有的数据统计以及更新都是 EmmageeService 进行处理的。 EmmageeService 会在 onStartCommand()里面启动一个线程“handler.postDelayed(task, 1000)”,进行数据的更新同时会尝试通过 ActivityManger 从 logcat 中获取到软件的启动时间。


红色框框内的东西就是通过调用一个管理 Android 帧缓冲区的系统服务 SurfaceFlinger 来获取用于计算 fps 的帧数据,具体可参考: Android fps 的计算方式。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/188


2020-02-12 15:331040

评论

发布
暂无评论
  • 智能语音:好玩的语音控制是怎么实现的?

    我介绍了智能音箱的技术架构,以及在树莓派上用于实现智能音箱的一些可选的技术方案,并且带你实现了语音控制智能电灯的目的。

    2020-12-25

  • 软件测试 | 测试开发 | ADBLib 在 android 中的使用

    ADBLib 在 Android 中的使用

    2022-09-13

  • Monkey 基本参数介绍

    说到android移动端稳定性测试,大家通常会想到android系统自动Monkey小猴子,通过Monkey命令模拟用户触摸点击屏幕、滑动、系统按键等操作来对设备上的app进行压力测试,来测试应用的稳定性和健壮性。

    2022-09-27

  • Tapdata 与麒麟软件完成兼容性互认证,国产化生态布局再跃步

    近日, Tapdata 实时数据平台(Tapdata Live Data Platform, Tapdata LDP)与麒麟软件完成产品兼容互认证。经深圳钛铂数据有限公司和麒麟软件有限公司协同严格测试,结果证实 Tapdata 实时数据平台与银河麒麟高级服务器操作系统(飞腾版)V10、银河麒麟高级服

    2022-08-16

  • 爱奇艺 iOS 稳定性测试实践

    稳定性测试是长时间持续运行APP,以验证应用是否稳定的测试。它可以有效发现APP长时间运行下的偶发闪退、内存泄露、性能变差等问题。iOS端通常由苹果系统的API快速执行点击事件,开展稳定性测试,类似的优秀工具如FastMonkey等虽然有诸多好处,但是作为长期运

    2021-10-29

  • 设置工作模式与环境(上):建立计算机

    经过前面那么多课程的准备,现在距离把我们自己操作系统跑起来是一步之遥。这节课,我们先来搭好操作系统的测试环境。

    2021-05-31

  • 验证一个小小的问题

    在之前的文章提到过一个问题,而且网上很多文章也是这么说的,前几天有人对这个问题提出了一点不同的意见,抱着谨慎的态度做了一个测试。

    2022-09-06

  • 【面试 - 八股文】万字 app 测试 面试题,助你吊打面试官系列

    大家好,我是温大大。

    2022-03-18

  • 干货 | 一文搞定 uiautomator2 自动化测试工具使用

    Google 官方提供了一个 Android 自动化测试工具(Java 库),基于 Accessibility 服务,功能很强,可以对第三方 App 进行测试,获取屏幕上任意一个 App 的任意一个控件属性,并对其进行任意操作,但有两个缺点:1.测试脚本只能使用 Java 语言;2.测试脚本要打

    2022-09-09

  • 软件测试 | 测试开发 | Uiautomator 项目搭建与实现原理

    Uiautomator是Android原生测试框架,可以用于白盒接口测试也可以用于UI自动化测试,Uiautomator分1.0版本与2.0版本,它们都是基于UiAutomation的测试框架,都是通过UiAutomation的接口操作设备, 1.0权限更高,运行更灵活,2.0针对app定制化更高,在同进程内

    2022-09-13

  • 实战 1:从 0 到 1 建立系统应用的可观测性

    这节课,我会基于一个典型的Spring Cloud的应用,给你讲解如何从 0 到 1 来构建端到端的全链路可观测性,如何打通可观测性数据的联合。

    2022-10-05

  • 场景联动:智能电灯如何感知光线?(下)

    在这一讲中,我介绍了利用树莓派打造网关,让光照传感器接入物联网平台的办法,并且带你实现了光照传感器和智能电灯的场景联动。

    2020-12-23

  • 04|如何快速搭建 Prometheus 系统?

    这一讲我们来自己动手搭建Prometheus

    2023-01-16

  • 软件测试 | 测试开发 | 该如何测客户端专项测试?

    Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。在一个android应用中,一个Activity通常就是一个单独的屏幕,Activity上可显示控件,也可以监听并处理用户的事件并做出响应,下图是Android启动app时发生的事情:

    2022-09-23

  • IntelliJ IDEA 的 Code Coverage 测试

    IntelliJ IDEA 是可以帮我们进行 Code Coverage 测试的。

    2023-02-08

  • 软件测试 | 测试开发 | java 远程连接 ssh 的实现

    在开发或者测试的过程中,经常会登录到远程服务器上进行一系列操作(如目录跳转、脚本执行等);这些动作固定,但是每次重复操作会显得较为繁琐。基于此,开发出一个自动化脚本用以代替手工执行很有必要。

    2022-09-06

  • Electron 多窗口应用实战

    讲师介绍: 黄晨,毕业于伊利诺伊大学厄巴纳香槟分校电脑工程专业,猿辅导桌面端开发工程师,曾在猿辅导用WPF架构开发 Windows Native 应用,后参与桌面端向 Electron 架构的迁移并负责后续桌面端在 Electron 上的直播课堂研发工作。 问题背景: Electron 作为一个流行的前端架构,可以让我们快速地利用前端技术栈开发跨平台的桌面应用。但是现在主流的前端技术栈(Angular、React等)主要解决的是单页应用(SPA)的开发问题,而并没有考虑 Electron 环境下的多窗口应用的使用场景。 内容看点: 子窗口管理 多窗口的数据同步 数据传输开销

    2022-01-14

  • Charles 工具如何做断点测试

    在测试工作过程中,我们经常会在程序的某一行或者某一环节设置断点,在程序请求的过程中,修改断点处的参数、请求或者响应,借此定位问题,这就是所谓的断点测试。这类断点测试主要用于接口测试。

    2022-06-14

  • 软件测试 | 测试开发 | 一文搞定 uiautomator2 自动化测试工具使用

    Google 官方提供了一个 Android 自动化测试工具(Java 库),基于 Accessibility 服务,功能很强,可以对第三方 App 进行测试,获取屏幕上任意一个 App 的任意一个控件属性,并对其进行任意操作,但有两个缺点:1.测试脚本只能使用 Java 语言;2.测试脚本要打

    2022-09-07

发现更多内容

1分钟就能学会的时间管理大法

小匚

时间分配 时间管理

从“成为作者”到“立即创作”:开启你的“写作极客”生活

岛乾坤

写作

Hadoop集群搭建-01前期准备

虚拟世界的懒猫

hadoop hdfs mapreduce zookeeper centos

Hadoop集群搭建-02安装配置Zookeeper

虚拟世界的懒猫

hadoop zookeeper centos7

跬步贴|5分钟搞定缓存击穿问题

架构师跬步营

做好仓储控制系统(WCS)的关键

申扬科技

仓储控制系统 WCS

centos6搭建NEXUSphp pt私人种子站

虚拟世界的懒猫

centos nexusphp pt bt

【终于解决】ubuntu19安装nvidia驱动后屏幕亮度默认最亮不可调节

虚拟世界的懒猫

ubuntu 英伟达

机器学习中常用的处理手段

子夜2104

学习

Hadoop集群搭建-04安装配置HDFS

虚拟世界的懒猫

hadoop

利用Translate ToolKit 2.5.0 API构建Flask web app

虚拟世界的懒猫

Python nginx flask uwgsi translate

如何写作一本书(2):前言与正文

英子编辑

技术 写作

我愿沉迷于学习,无法自拔(一)

孙瑜

深度思考 个人成长

Zookeeper选举机制

tunsuy

zookeeper 开源 源码分析 分布式协同

消息队列Kafka - Kafka中的选举

Java收录阁

kafka

管理信息系统课程基础知识

小匚

下一代存储NVMe over Fabrics

HU

安装VMware16兼容Hyper-v+WSL2+Docker+解决0x80370102报错

虚拟世界的懒猫

Docker vmware vm hyper-v WSL2

你真的理解 Java 的基础数据类型吗

Rayjun

Java

Arthas安装及基本用法

编程随想曲

Java

当 Redis 发生高延迟时,到底发生了什么

程序员历小冰

redis Linux 延迟

idea+spring4+springmvc+mybatis+maven实现简单增删改查CRUD

虚拟世界的懒猫

spring mybatis ssm springmvc java8

Hadoop集群搭建-05安装配置YARN

虚拟世界的懒猫

hadoop

Hadoop集群搭建-03编译安装hadoop

虚拟世界的懒猫

hadoop centos7

配置微软Azure大数据HDInsight云集群

虚拟世界的懒猫

microsoft 大数据 微软 azure hdinsght

“我代码写完了,QA可以测了。”

蔡建斌

Scrum 敏捷 质量管理 测试

程序员陪娃漫画系列——喂药

孙苏勇

程序员 生活 陪伴 漫画

如何无缝的将Flutter引入现有应用?

Geek_70xtik

flutter ios android 开源 移动应用

选赵敏还是选小昭,这可真是个问题 | Decision Tree

张利东

Python 学习 算法 决策树

和邓小平、基辛格“谈笑风生”的世界第一女记者:奥琳亚娜·法拉奇

赵新龙

记者 编辑 采访 法拉奇

Day 47|Week 07-5 曾国藩家书|问学篇-学问何处何时都可做

熊小北同学

安卓App测试简析_语言 & 开发_张晓燕_InfoQ精选文章