牛鹭学院学员:丁孟辉

App启动时间

冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动

启动app命令:adb shell am start -W -n package/activity

停止app命令:adb shell am force-stop package

获取运行app包名:adb logcat | grep START

热启动:当启动应用时,后台已有该应用的进程(例:按home键回到桌面,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动

启动app命令:adb shell am start -W -n package/activity

停止app命令:adb shell input keyevent 3

CPU

查看cpu的资源占用

Mac下:adb shell dumpsys cpuinfo | grep packagename

Windows下:adb shell dumpsys cpuinfo | findstr packagename

内存

获取app进程ID:adb shell ps | findstr packageName

查看App内存的占用:adb shell top -n 1 -d 5 | findstr pid(进程ID)

流量

获取进程ID指令:adb shell ps | grep packagename

查看Android 设备的网卡信息:adb shell netcfg

查看所有网卡流量:adb shell cat /proc/pid/net/dev

获取进程ID网卡流量:adb shell cat /proc/ pid /net/dev | findstr wlan0

电量

设置手机为非充电状态:adb shell dumpsys battery set status 1

查看电量的使用情况:adb shell dumpsys battery |findstr level

App在大量的用户那里被安装和使用的时,没有预料的问题

Crash的问题

设备兼容性的问题

流量使用过多的问题

App导致用户手机电量消耗过快的问题

在不同的网络情况下不稳定,比如卡死和白屏的问题

兼容性测试

针对App通常会考虑这些方面

操作系统版本:Andoird版本和iOS版本

屏幕分辨率:不同厂家的ROM

网络类型:比如Wifi、3G、4G下的功能情况

流量测试

在移动产品的测试中,很有必要对App使用的流量进行度量,大致来说,流量可以从用户使用的的相关性角度分为:一类是用户的操作直接导致的流量消耗;另一类是后台,即在用户没有直接使用情况下的流量消耗

步骤一:找到当前APP的进程号,shell模式下执行【ps -ef | grep 程序包名】

步骤二:shell模式下执行【cat /proc/进程号/net/dev 】

电量测试

在木器电池技术没有取得巨大突破前提下,这方面始终会存在一些瓶颈,如果一些App架构设计的不好,或者代码偶缺陷,就可能导致电量消耗比较高,所以电量测试也是很重要的

切换手机电池为非充电状态adb shell dumpsys battery set status 1

改变手机电量

让手机电量显示百分百: adb shell dumpsys battery set level 100

让手机电量显示1: adb shell dumpsys battery set level 1

弱网络测试

移动互联网产品相比PC互联网产品,有一个特点是前者使用的网络比较多样,除了Wif之外,很多时候是在移动网络下使用的,移动网络遇到的情况又比较复杂,比如地铁、隧道、体育场等。所以网络不稳定的情况是比较容易发生的,很多情况下App的一些问题是在复杂的网络情况下才会暴露,与其让用户发现和投诉这些问题,不如我们在测试阶段尽量模拟这样的网络情况,及早发现和修复这些问题

问题/原因

场景一

场景:上传大图或者多图时,在弱网络环境下出现进度条走到一半卡住然后又从头开始

原因:采用分段上传方式,在请求超时时间到时,分段传输没有结束,代码逻辑不对,导致每次重试都重头上传,一直循环

场景二

场景:在弱网络环境下容易出现登录不上

原因:登录没有缓冲机制,而请求超时时间的设置没有区分同网络情况;解决方案:针对wifi、2g、3g、4g设置不同的超时时间

场景三

场景:刷新页面很快就给出暂无内容的提示,明显没有到请求超时时间

原因:可能是连接超时时间太短,wifi下设置两秒,在弱网络下需要加长

场景四

场景:弱网络环境下,请求的数据返回时间较长,等待的过程中,如果页面上的相关控件仍然可以操作,则有可能出现闪退现象

原因:依赖数据的控件操作,在数据返回前没有做兼容处理

场景五

场景:搜索时输入关键字会连续发请求,停下时,显示最终的关键字搜索结果,但很快又会被前面的关键字搜索结果覆盖了

原因:中间的请求返回较慢,显示了最终的结果后,之前的请求返回的数据应不做处理

android 将程序设置成桌面应用 安卓桌面设置软件_数据

稳定性测试

在保证基本功能正确基础之上,App的稳定性就显得非常重要,如果一个App经常出现闪退或者卡死,那么用户体验就会受到很大伤害,在有其他竞争产品的情况下很容易造成用户的流失

安全测试

包括安装包的安全测试(能否反编译代码、安装包是否签名等)、敏感信息测试、软键盘劫持、账户安全、数据通信安全等。服务器端的SQL注入测试、XSS跨站脚本攻击等

环境相关的测试

在实际项目中,有一些缺陷我发现是和App所处的运行环境相关的,所以设计测试的时候,要多考虑这些场景。

干扰测试:收到电话、收到短信、收到通知栏消息、无电提示框弹出、第三方安全软件告警弹出

权限测试:一些用户在实际使用App的时候会有意识阻止某些功能。例如有的用户感觉让某个App访问电话本或者相册可能泄漏隐私,就在手机中设置了禁止了该App访问相册的权限

边界测试:

手机环境本身也有其边界情况需要在测试中覆盖。常见的场景有:可用存储空间过少、没有SD卡/双SD卡、飞行模式、系统时间有误(晚于和早于标准时间)、第三方依赖(比如我们的App依赖第三方App,但是现在第三方App没有安装或者版本过低的测试情况)

adb shell top -m 5 -n 6 -n 5

android 将程序设置成桌面应用 安卓桌面设置软件_android 将程序设置成桌面应用_02

显示前5个进程,刷新6次,间隔5秒

-m 最多显示多少个进程

-n 刷新次数

-d 刷新间隔时间(默认5秒)

PID 进程id

PR 优先级

CPU% 当前瞬时CPU占用率

S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程

#THR 程序当前所用的线程数

VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)

PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUND

UID 进程所有者的用户id

Name 进程的名称

压力测试

--throttle 设置每次随机事件的时间间隔(单位:毫秒)

例:adb shell monkey 100 --throttle 500

CPU测试中的测试子项

空闲状态下的应用CPU消耗情况

中等规格状态下的应用CPU消耗情况

满规格状态下的应用CPU消耗情况

应用CPU峰值情况

内存测试中的测试子项

空闲状态下的应用内存消耗情况

中等规格状态下的应用内存消耗情况

满规格状态下的应用内存消耗情况

应用内存峰值情况

应用内存泄露情况

应用是否常驻内存

压力测试后的内存使用情况

内存问题现象

ü 内存抖动

ü 大内存对象被分配

ü 内存不断增长

ü 频繁GC

名词解释

VIRT:virtual memory usage 虚拟内存

ü 进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等

ü 假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

RES:resident memory usage 常驻内存

ü 进程当前使用的内存大小,但不包括swap out

ü 包含其他进程的共享

ü 如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反

ü 关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR:shared memory 共享内存

ü 除了自身进程的共享内存,也包括其他进程的共享内存

ü 虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小

ü 计算某个进程所占的物理内存大小公式:RES – SHR

ü swap out后,它将会降下来

举报/反馈