App测试
2016/9/14整理
一、环境搭建
1、安装jdk(java development kit)版本:jdk_8u91_windows_i586_8.0.910.15
——新建系统变量:
名称:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.7.0_79
——添加到path:
变量值: ; C:\Program Files\Java\jre7\bin
2、安装 android sdk 模拟工具包
——添加到path:
E:\Setup\android-sdk\platform-tools
E:\Setup\android-sdk\tools
——新建系统变量:
名称: ANDROID_SDK_HOME
变量值: e:\setup\android-sdk
3、安装genymotion 模拟器 版本:genymotion-2.7.1
1帐号注册:http://www.genymotion.net
fuyongming,密码:tenson888
2设置ADB,否则ADB无法使用。如下图,设置路径为:
C:\Users\sks\AppData\Local\Android\android-sdk
3加一个模拟器设备
拷贝文件Genymobile.rar到用户目录
C:\Users\Administrator\AppData\Local,
并在这个目录下解压文件Genymobile.rar,
点击Add出现如图界面,从Available virtual
devices中选设备Custom Phone-4.1.1-API16
进行安装,安装需要网络稳定。
4如果运行模拟器出现右图的错误,需要修改windows
主题文件文件。如果是32位的系统,需要把文件
themeservice.dll.backup、themeui.dll.backup、
uxtheme.dll.backup拷贝到windows的目录
C:\Windows\System32下,并运行
UniversalThemePatcher-x86,如右下图,全部选
恢复来还原这3个文件,变成未破解状态。
然后重新start模拟器设备。
4、安装virtualbox虚拟机 版本:VirtualBox-4.3.12-93733-Win
5、无法安装app
需要genymotion-arm-translation_v1.1
二、adb(android debug bridge)
介绍adb
当启动一个adb客户端时,客户端首先确认是否有一个adb服务器进程在运行。如果没有,则启动服务器进程。当adb服务器运行,adb服务器就会绑定本地的TCP端口5037,并监听adb客户端发来的命令。
接着服务器将所有运行中的模拟器或设备实例建立连接。它会扫描所有5554到5584之间的端口来定位所有模拟器或设备。一旦服务器与所有模拟器实例建立连接,就可以使用adb命令控制和访问该设备。
adb devices >>查看当前的设备
adb -s >>设备名 命令>>指定设备执行命令
adb install 路径 >>为设备安装应用
adb uninstall >>安装包名>>卸载应用
adb pull 设备目录 本地目录>>从设备下载文件
adb push 本地目录 设备目录>>从本地上传文件到设备
adb help >> 帮助信息
adb version >>查看adb版本号
adb logcat |findstr ""
adb remount >>重新挂载文件系统
adb get-serialno >>设备序列号
adb get-state >>设备状态 device连接 offline无响应
adb logcat >>查看日志
adb start-server >>开启adb进程
adb kill-server >>关闭adb进程
adb bugreport >>启动各种信息
memor info:系统内存使用状态
cpu info:cpu使用状态
procrank:应用使用内存状况
virtual memory stats:虚拟内存分配
vmalloc info:虚拟内存使用
process:进程状态信息
system log:系统当前状态
event log:时间日志
radio log:网络相关日志
system properties:系统属性
adb get-serialno >>获取设备序列号
adb get-state >>查看模拟器设备状态
device:设备连接
offline:没有连接
抓取各种log
1、logcat
(四类log
buffer是main,radio,system,events)
adb wait-for-device logcat
adb logcat -v time > logcat.txt //默认是-b
main -b system
adb logcat -v time -b main
//main log
adb logcat -v time -b radio
//radio log
adb logcat -v time -b system
//system log
adb shell dmesg
//kernel log
adb logcat -v time -b events
2、anr log
adb pull /data/anr
3、tombstone log
adb pull /data/tombstones
4、core log
adb pull /data/log/core
5、开机log
adb shell dmesg > dmesg.txt
6、logcatch
adb pull /data/logcatch
7、qxdm log
adb pull /sdcard/logs
8、 hprof log
在分析app
时,我们通常需要分析app 的java heap 资料,如分析java memory leak, 追查heap
中相关变量情况等。
在android 中抓取app 的hprof 操作方式有下面几种:
第一种方式: 使用am 命令
adb shell am dumpheap {Process} file
如 adb shell am dumpheap com.android.phone
/data/anr/phone.hprof
adb pull /data/anr/phone.hprof
第二种方式: 使用DDMS 命令
在DDMS 中选择对应的process, 然后在Devices 按钮栏中选择Dump Hprof file, 保存即可
第三种方式: 通过代码的方式
在android.os.Debug 这个class 中有定义相关的抓取hprof 的method.
如: public static void dumpHprofData(String fileName)
throws IOException;
这样即可在代码中直接将这个process 的hprof 保存到相对应的文件中,注意这个只能抓取当时的
process.
如果想抓其他的process 的hprof, 那么就必须通过AMS 帮忙了。
可以先获取IActivityManager 接口,然后调用它的dumpheap
方法。具体的代码,大家可以参考
frameworks/base/cmds/am/src/com/android/commands/am/am.java 中的调用代码
抓取回hprof 后,就可以用hprof-conv 命令将DVM 格式的hprof 转换成标准的java
命令的hprof
hprof-conv in.hprof out.hprof
然后使用如MAT 之类的工具进行具体的分析
9、bugreport
adb bugreport >
bugreport.txt
10、kernel
log(只有从当前时间起的很少的log)
cat proc/kmsg >
kmsg.txt
11、其他
adb shell dumpstate
//各类信息,比如进程信息,内存信息,进程是否异常,kernnel的log等
adb shell dumpcrash
adb shell dumpsys //查询所有service的状态
三、adb shell
adb shell >>进入设备系统
exit >>退出设备系统
adb shell 命令
dumpsys battery >> 电池情况
ac powered >>电源供电
usb powered >>usb是否供电
health电池状态:0正常1未知2良好3过热4损坏5过压
status电量等级:5为满
present当前有电池:true
leval剩余电量100%:100
voltage:电压
temperature温度:
technology电池技术:li-ion锂电池
dumpsys wifi |more >>wifi信息
wifi is enabled:disabled,disabling正在关闭,enabled,enabling正在打开,unknown
internal state:
dumpsys cpuinfo >>cpu占用信息
dumpsys power >>电源管理信息
dumpsys poewr|find
"mScreenOffTimeoutSetting" 屏幕关闭时间
dumpsys telephony.registry >>电话相关信息
mcallstate呼叫状态:0待机1来电未接2电话占线
mcallincomingnumber:最近一次来电
mservicestate网络服务状态:0正常1没有连接2紧急拨号3电话关机
msignalstrength信号强度:
mmessagewaiting是否在等待无线信号:
mcallforwarding:是否启用呼叫转移
mdataconnectionpossible:是否有数据连接
mdataconnectionapn:apn名字
mcelllocation基站
设备信息查询
cat /proc/cpuinfo >>cpu设备信息
cat /proc/meninfo >>内存设备信息
memtotal:总共运行内存
menfree:剩余内存
cat /prociomem >>查看i/o内存分区
cat /system/build.prop | findstr
"ro.product.model" >>手机型号
dumpsys window >>窗口管理信息
dumpsys window |findstr "Display" 当前分辨率
getprop ro.build.version.release>>手机系统版本
cat /proc/version >>手机内核版本
getprop gsm.operator.alpha >>运营商信息
getprop gsm.network.type >>手机网络类型
dumpsys iphonesubinfo | findstr
"Device ID">>手机串号信息
df >>手机系统各个分区信息
du >>手机所有目录情况
dmesg >>手机内核日志信息
dumpstate >>系统当前状态
dumpsys meninfo >>应用占内存状况
dumpsys cpuinfo >>动态占用率
adb shell top -m 10
-n 5 -s cpu
-m(显示进程数量) 10
-n(刷新次数) 5 cpu
-s: 按什么排序
-d: 刷新时间间隔,默认为5秒。
cat /proc/net/xt_qtaguid/stats>>手机流量
第四列:uid 应用运行的用户id
第六列:接受数据量
第八列:发送数据量
am 命令 >>模拟系统操作
adb shell am start -W com.android.camera 启动相机 –W 等待完成启动
adb shell am
force-stop com.android.camera 关闭
am start -W com.android.camera>>启动相机
pm 命令 >>查询设备应用
pm list packages列出所有应用
四、aapt (android asset
packaging tool) 应用资源打包工具
aapt list 包 >>列出包中文件
aapt d values 包 >>查看包基本信息
aapt d badging 包路径|findstr
"launchable-activity" 查找应用启动窗口
aapt d badging gewara_v6.6.0.apk | findstr
"package" 查找包名
values=badging(基本信息)
permissions(权限)
configuratioins(配置信息)
resources(应用里面的资源)
五、monkey稳定压力测试工具
adb shell ls /data/data >>应用名查询
adb shell monkey -p 应用名 100 >>指定应用实行100次测试
adb sehll monkey 100 >>不指定应用实行100次测试
adb shell monkey -p com.android.calendar -v
100 v 显示级别 >>三个v
adb shell monkey -p
com.android.calendar –v –v
–v 100
选项
-s
--throttle
300 延迟300毫秒
--pct-touch
10 触摸事件百分比
--pct
-motion 10 设置动作事件百分比
--pct-trackball
轨迹事件百分比
--pct-nav
基本导航事件百分比
--pct-majornav
主导航事件百分比
--pct-syskeys
系统按键百分比
--pct-appswitch
应用活动切换百分比
--pct-rotation
转屏工作百分比
--pct-anyevent
其他类型事件百分比
--ignore-crashes
忽略应用崩溃
--ignore-timeouts
忽略无响应,发生anr时
--ignore-security-exceptions
忽略许可错误
--kill-process-after-error
发生错误时保持状态
--monitor-native-crashes监视报告应用崩溃时代码
--pkg-blacklist-file PACKAGE_BLACKLIST_FILE 设置黑名单
--pkg-whitelist-file PACKAGE_WHITELIST_FILE白名单
例子:
adb shell
monkey -s 100 --throttle 500 -p com.android.calendar --pct-nav 40 --ignore-crashes --ignore-timeouts -v -v -v
600 > monkey_calendar.txt
说明:测试日历应用,指定伪随机种子数为100,设置每个事件间隔时间为0.5秒。设置up/down/left/right导航百分比为40%,忽略程序崩溃,忽略程序发生ANR,忽略许可错误,指定信息级别为Level
2。
测试最后把信息Log保存在文件
monkey_calendar.txt里面。
六、测试标准
1). 无重启、冻屏、系统崩溃等严重问题
2). 应用FC(崩溃闪退)及ANR(无响应)次数少于3次
3). 相关应用FC及ANR的应用数量少于1次
4). 先在模拟器上测试,最后需要在3~5台真机上测试。
monkey自动化测试脚本
DispatchPointer(0,0,0,505,802,0,0,0,0,0,0,0)按下
DispatchPointer(0,0,1,505,802,0,0,0,0,0,0,0)抬起
DispatchTrackball(0,0,0,500,700,0,0,0,0,0,0,0)按下
DispatchTrackball(0,0,2,500,800,0,0,0,0,0,0,0)滑动
DispatchPress(4)
LaunchActivity(cn.com.open.mooc,cn.com.open.mooc.ui.loading.MCLoadingActivity)启动
DispatchString(1234qwer)输入
UserWait(700)等待