一:ADB 命令
Android Debug Bridge 安卓调试桥
- adb devices (★) list all connected devices罗列所有已连接的设备 (检查电脑上连接的Android设备)
- adb kill-server 停止 ADB 服务
- adb start-server 开启ADB服务
- adb connect(★) 连接 Android 设备
- adb disconnect 断开已连接的Android设备
- adb shell (★) 进入 Android 的 Linux 交互环境
- adb remount 重新挂载获得文件系统的读写权限,需要有 root 权限
- adb pull(★) 从 Android 系统中获取文件 adb pull []
- adb push(★) 将文件推送到 Android 系统中 adb push adb version 查看当前adb版本
- adb install (★) 安装apk文件到Android系统
- adb uninstall 卸载apk文件
#adb version 查看当前adb得版本
D:\apk>adb version
Android Debug Bridge version 1.0.31
# adb devices列出当前电脑连接得所有Android设备
D:\apk>adb devices
List of devices attached
127.0.0.1:21503 device
D:\apk>adb devices
List of devices attached
127.0.0.1:21503 device
127.0.0.1:21513 device
#M7BBB18C09150533 真机设备名
D:\apk>adb devices
List of devices attached
127.0.0.1:21503 device
127.0.0.1:21513 device
M7BBB18C09150533 device
#连接设备adb connect 设备名,如果已连接,再次连接,提示already connected to
设备名
D:\apk>adb connect 127.0.0.1:21503
already connected to 127.0.0.1:21503
#断开连接设备adb disconnect 设备名
D:\apk>adb disconnect 127.0.0.1:21503
D:\apk>adb devices
List of devices attached
127.0.0.1:21513 device
M7BBB18C09150533 device
D:\apk>adb disconnect 127.0.0.1:21513
D:\apk>adb devices
List of devices attached
M7BBB18C09150533 device
#连接设备adb connect 设备名,如果未连接得,进行连接,则提示connected to 设备
名
D:\apk>adb connect 127.0.0.1:21503
connected to 127.0.0.1:21503
D:\apk>adb devices
List of devices attached
M7BBB18C09150533 device
127.0.0.1:21503 device
D:\apk>adb connect 127.0.0.1:21513
connected to 127.0.0.1:21513
D:\apk>adb devices
List of devices attached
M7BBB18C09150533 device
127.0.0.1:21503 device
127.0.0.1:21513 device
#adb kill-server结束正在运行中Android服务
D:\apk>adb kill-server
#adb kill-server结束,Android设备已下线offline
D:\apk>adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
M7BBB18C09150533 offline
#adb start-server启动Android服务
D:\apk>adb start-server
#启动后再次查看设计连接情况,发现还是offline,则需要再次连接adb connect
D:\apk>adb devices
List of devices attached
M7BBB18C09150533 offline
#再次连接adb connect
D:\apk>adb connect M7BBB18C09150533
unable to connect to M7BBB18C09150533:5555
D:\apk>adb devices
List of devices attached
M7BBB18C09150533 device
#再次连接adb connect
D:\apk>adb connect 127.0.0.1:21503
connected to 127.0.0.1:21503
D:\apk>adb devices
List of devices attached
M7BBB18C09150533 device
127.0.0.1:21503 device
二:内网测试服务器设置
adb install命令安装方式
#ECMobile3.2.apk文件存放在apk文件夹中,所以在安装时,使用相对路径安装
D:\apk>adb install ECMobile3.2.apk
3972 KB/s (8427488 bytes in 2.071s)
Success
#当有多个设备时,可在安装时,指定设备,adb -s 设备名 install apk文件名
D:\apk>adb -s 127.0.0.1:21503 install ECMobile3.2.apk6048 KB/s (8427488 bytes in 1.360s)
Success
#ECMobile3.2.apk文件存放在apk文件夹中,所以在安装时,也可以使用绝对路径安装
D:\apk>adb install d:\apk\ECMobile3.2.apk
4486 KB/s (8427488 bytes in 1.834s)
Success
#ECMobile3.2.apk文件存放在d盘apk文件夹中,所以在安装时,必须使用绝对路径安装(原因
是c盘与d盘没有相对路径,只能用绝对路径来表达)
C:\users\wjh>adb install d:\apk\ECMobile3.2.apk
4486 KB/s (8427488 bytes in 1.834s)
Success
#安装完成后,ecmobile内网仍无法访问,本项目中还需要进行内网配置,需修改配置文
件/etc/hosts
#adb shell 表示进入到shell窗口,如果有多个设备,adb -s 设备名 shell
D:\apk>adb shell
PCRT00:/ # ls
ls
acct fstab.intel init.zygote32.rc sepolicy
cache init lib service_contexts
charger init.bluetooth.rc mnt storage
config init.environ.rc proc sys
d init.intel.rc property_contexts system
data init.rc root ueventd.intel.rc
default.prop init.superuser.rc sbin ueventd.rc
dev init.trace.rc sdcard vendor
etc init.usb.configfs.rc seapp_contexts
file_contexts.bin init.usb.rc selinux_version
PCRT00:/ # cd etc
cd etc
PCRT00:/etc # ls
ls
NOTICE.html.gz excluded-input-devices.xml mkshrc
apns-conf.xml fonts.xml permissions
audio_effects.conf gps.conf ppp
audio_policy.conf hosts preloaded-classes
bluetooth init public.libraries.txt
clatd.conf media_codecs.xml seccomp_policy
compiled-classes media_codecs_google_audio.xml security
dhcpcd media_codecs_google_video.xml vold.conf
event-log-tags media_profiles.xml vold.fstab
#cat hosts查看hosts文件
PCRT00:/etc # cat hosts
cat hosts
127.0.0.1 localhost
::1 ip6-localhost
PCRT00:/etc #
#shell中,vim/vi没有此命令
PCRT00:/etc # vim hosts
vim hosts
/system/bin/sh: vim: not found
#exit退出shell窗口
127|PCRT00:/etc # exit
exit
#使用adb pull将/etc/hosts 文件拉到本地进行修改
#修改内容注意事项,在文件中增加一行172.31.128.199 shop.ecmobile.cn,再必须多一
个空行,如果没有空行,无法识别该指定hosts路径
D:\apk>adb pull /etc/hosts hosts
11 KB/s (56 bytes in 0.004s)
#使用adb push将hosts 文件上传到远程/etc/hosts文件中,但发现没有读写权限
D:\apk>adb push hosts /etc/hosts
failed to copy 'hosts' to '/etc/hosts': couldn't create file: Read-only file
system
#adb remount重新挂载,获取读写权限
D:\apk>adb remount
remount succeeded
#再次上传
D:\apk>adb push hosts /etc/hosts
13 KB/s (91 bytes in 0.006s)
#再次进入到shell窗口中查看相应/etc/hosts文件,有172.31.128.199
shop.ecmobile.cn记录
D:\apk>adb shell
PCRT00:/ # cat /etc/hosts
cat /etc/hosts
127.0.0.1 localhost
::1 ip6-localhost
172.31.128.199 shop.ecmobile.cn
# 验证Android系统的hosts文件生效
PCRT00:/ # ping shop.ecmobile.cn
ping shop.ecmobile.cn
PING shop.ecmobile.cn (172.31.128.199) 56(84) bytes of data.
64 bytes from 172.31.128.199: icmp_seq=1 ttl=62 time=14.3 ms
64 bytes from 172.31.128.199: icmp_seq=2 ttl=62 time=16.2 ms
64 bytes from 172.31.128.199: icmp_seq=3 ttl=62 time=14.0 ms
64 bytes from 172.31.128.199: icmp_seq=4 ttl=62 time=14.0 ms
64 bytes from 172.31.128.199: icmp_seq=5 ttl=62 time=12.4 ms
64 bytes from 172.31.128.199: icmp_seq=6 ttl=62 time=11.0 ms
^C
# 另一种方式,验证Android系统的hosts文件生效
D:\apk>adb shell ping shop.ecmobile.cn
PING shop.ecmobile.cn (172.31.128.199) 56(84) bytes of data.
64 bytes from 172.31.128.199: icmp_seq=1 ttl=62 time=15.6 ms
64 bytes from 172.31.128.199: icmp_seq=2 ttl=62 time=14.2 ms
64 bytes from 172.31.128.199: icmp_seq=3 ttl=62 time=12.4 ms
64 bytes from 172.31.128.199: icmp_seq=4 ttl=62 time=14.3 ms
当remount成功,但仍无法推送文件到Andriod系统时,可使用直接echo写入文件方式,步骤如下:
C:\Users\wjh>adb shell
VOG-AL00:/ # cd /etc
cd /etc
VOG-AL00:/etc # echo "172.31.128.199 shop.ecmobile.cn">>hosts
echo "172.31.128.199 shop.ecmobile.cn">>hosts
VOG-AL00:/etc # echo -e " ">>hosts
echo -e " ">>hosts
VOG-AL00:/etc # cat hosts
cat hosts
127.0.0.1 localhost
::1 ip6-localhost
172.31.128.199 shop.ecmobile.cn
三:安装测试
3.1 安装测试
安装前
安装包文件病毒检查在Windows系统或Android系统使用杀毒软件
检查
安装空间是否足够一般在手游项目或者安装包大小在GB级别可考
虑
安装中
安装方式和途径
1. 应用商店安装(app上线后再去下载测试)
官方的Google Play,小米的应用商店,360手机助手,豌豆荚 ...
2. 浏览器下载安装(app上线后再去下载测试)
3. 上传安装包文件到 SD 卡安装
#把文件推送到sdcard中
C:\Users\wjh>adb push d:\apk\ECMobile3.2.apk /sdcard/ecmobile3.2.apk
2704 KB/s (8427488 bytes in 3.043s)
C:\Users\wjh>adb shell
VOG-AL00:/ # cd sdcard
cd sdcard
VOG-AL00:/sdcard # ls
ls
360 Download Podcasts catlog
solopi
360Download LiveCloud QQBrowser com.qihoo.appstore
storage
360DownloadCache Movies Ringtones ecmobile3.2.apk tbs
Alarms Music Seafile insthub
xysdk
Android Notifications Tencent marketSp
DCIM Pictures baidu qnet_save
VOG-AL00:/sdcard #
#进入到相应的文件管理器中找到 ecmobile3.2.apk,进行安装
4. adb 安装adb install 安装包文件名
#1、安装被测软件ECMobile3.2.apk ,Success表示安装成功
C:\Users\wjh>adb install d:\apk\ECMobile3.2.apk
4096 KB/s (8427488 bytes in 2.009s)
Success
#2、切换到d的apk目录安装
C:\Users\wjh>d:
D:\>cd d:\apk
#当前目录为安装包的所在目录时,直接写入软件名称即可
d:\apk>adb install ECMobile3.2.apk
3283 KB/s (8427488 bytes in 2.506s)
Success
#3、当有多台设备时,必须指定-s来安装被测软件
d:\apk>adb devices
List of devices attached
127.0.0.1:21503 device
127.0.0.1:21513 device
d:\apk>adb -s 127.0.0.1:21513 install ECMobile3.2.apk
2809 KB/s (8427488 bytes in 2.929s)
Success
安装后
- 启动检查 (广告、欢迎界面)
- 权限检查(是否允许访问相册、相机、网络、定位等的权限)
- 欢迎界面检查(可选)
- [安装后的逆向思路]
- 卸载后再安装
- 应用管理里清除数据/清除缓存后再安装
3.2升级测试(★)
通过 adb 升级 adb install -r 安装包文件
# 初次安装,版本ecmobile3.2.APK
C:\Users\wjh>adb install d:\apk\ecmobile3.2.apk
4191 KB/s (8427488 bytes in 1.963s)
Success
# 同版本覆盖安装,成功
C:\Users\wjh>adb install -r d:\apk\ecmobile3.2.apk
3880 KB/s (8427488 bytes in 2.120s)
Success
# 低版本到高版本的升级,从3.2升级到4.0
C:\Users\wjh>adb install -r d:\apk\ecmobile40.apk
4147 KB/s (16163478 bytes in 3.805s)
Success
低版本、同版本、高版本覆盖安装
低版本到高版本的升级
假如当前最新版本是V4.1.1
1、某手机中的应用版本是V3.0,能否升级到当前最新版;
2、某手机中的应用版本是V3.2,能否升级到当前最新版;
3、某手机中的应用版本是V4.0,能否升级到当前最新版;
4、某手机中的应用版本是V4.1.0,能否升级到当前最新版;
# 低版本到高版本的升级,允许。
#先安装低版本3.0版本
D:\apk>adb install ecmobile30.apk
4028 KB/s (5149479 bytes in 1.248s)
Success
#验证升级后,版本是否已升级成功,可在手机中的设置-应用-ecmobile中查看,见下
图。
#从3.0升级至3.2
D:\apk>adb install -r ECMobile3.2.apk
4227 KB/s (8427488 bytes in 1.946s)
Success
#验证升级后,版本是否已升级成功,先使用aapt命令查看版本号,再在设置-应用-
ecmobile-应用信息中查看
D:\apk>aapt d badging ECMobile3.2.apk|findstr "package"
package: name='com.insthub.ecmobile' versionCode='6'
versionName='3.2'
#从3.2升级至4.0
D:\apk>adb install -r ecmobile40.apk
4435 KB/s (16163478 bytes in 3.558s)
Success
#验证升级后,版本是否已升级成功,先使用aapt命令查看版本号,再在设置-应用-
ecmobile-应用信息中查看
D:\apk>aapt d badging ecmobile40.apk|findstr "package"
package: name='com.insthub.ecmobile' versionCode='10'
versionName='4.0.0'
同版本的升级
#当前已安装4.0版本
#再次安装4.0,提示已经安装包已存在,无法再次安装,安装失败
D:\apk>adb install ecmobile40.apk
4171 KB/s (16163478 bytes in 3.784s)
Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install
com.insthub.ecmobile without first uninstalling.]
#在4.0版本得基础上,使用命令adb install -r ecmobile40.apk覆盖安装,安装
成功
D:\apk>adb install -r ecmobile40.apk
4460 KB/s (16163478 bytes in 3.538s)
Success
高版本到低版本的升级(降版)
#从4.0降版至3.2,系统提示失败,不能降版,报错
INSTALL_FAILED_VERSION_DOWNGRADE 安装失败版本降级
D:\apk>adb install -r ECMobile3.2.apk
3958 KB/s (8427488 bytes in 2.078s)
Failure [INSTALL_FAILED_VERSION_DOWNGRADE]
升级的特殊情况
强制升级不升级无法使用,必须升级后才能使用有需求再测
试,如果此版本无此需求,则无需考虑
非强制升级有提醒,关闭后提醒后,也能使用,但再次打开应
用,仍有提醒。有需求再测试,如果此版本无此需求,则无需考虑
应用商店升级(上线后再测试)
网页下载升级(上线后再测试)
升级后的注意事项!!!
升级后,文件、数据是否有丢失,功能使用要正常!
缓存数据或存储数据是否存在数据清除等。
在安装后或者升级后,要关注手机中的相关目录
手机 /data 目录下几个目录的作用
/data/app/存放APK 安装包(非系统安装的安装包)
/data/data Android系统中所有安装的包的信息(包括系统
自带和自己手动安装)
/data/data/包名 Android系统中某安装的包的信息
重点关注目录databases和shared_prefs,大部分软件
中都有这两个目录
/data/system/ 软件包相关信息
/data/dalvik-cache/x86 优化的已编译字节码,可执行的dex、art
后缀的文件
目录databases和shared_prefs的操作记录
#进入到shell窗口
D:\apk>adb shell
PCRT00:/ # ls
ls
acct fstab.intel init.zygote32.rc sepolicy
cache init lib
service_contexts
charger init.bluetooth.rc mnt storage
config init.environ.rc proc sys
d init.intel.rc property_contexts system
data init.rc root
ueventd.intel.rc
default.prop init.superuser.rc sbin ueventd.rc
dev init.trace.rc sdcard vendor
etc init.usb.configfs.rc seapp_contexts
file_contexts.bin init.usb.rc selinux_version
#存放数据的目录data
PCRT00:/ # cd data
cd data
PCRT00:/data # ls
ls
adb app-private local misc_de ss
user_de
anr backup lost+found ota system
app cache media ota_package system_ce
app-asec dalvik-cache mediadrm property system_de
app-ephemeral data misc resource-cache tombstones
app-lib drm misc_ce security user
#data中data目录
PCRT00:/data # cd data
cd data
PCRT00:/data/data # ls
ls
com.android.location.fused com.cyanogenmod.filemanager
com.android.packageinstaller com.insthub.ecmobile
com.android.pacprocessor com.microvirt.download
com.android.phone com.microvirt.guide
com.android.printservice.recommendation com.microvirt.installer
com.android.providers.blockednumber com.microvirt.launcher
com.android.providers.calendar com.microvirt.launcher2
com.android.providers.contacts com.microvirt.market
com.android.providers.downloads com.microvirt.memuime
com.android.providers.downloads.ui com.microvirt.tools
#进入到ecmobile文件包中
PCRT00:/data/data # cd com.insthub.ecmobile
cd com.insthub.ecmobile
#查看com.insthub.ecmobile中的目录,其中有databases和shared_prefs
PCRT00:/data/data/com.insthub.ecmobile # ls
ls
app_push_dex app_push_update app_webview code_cache files
shared_prefs
app_push_lib app_textures cache databases lib
#进入到databases目录,查看到有db文件
PCRT00:/data/data/com.insthub.ecmobile # cd databases
cd databases
PCRT00:/data/data/com.insthub.ecmobile/databases # ls
ls
ecmobile.db ecmobile.db-journal
PCRT00:/data/data/com.insthub.ecmobile/databases # exit
exit
#本地查看db文件,先需要将文件pull到本地,再使用DBeaver查看ecmobile.db中的user
表中数据,存在2个账户:ecshop和vip
D:\apk>adb pull /data/data/com.insthub.ecmobile/databases databases
pull: building file list...
pull: /data/data/com.insthub.ecmobile/databases/ecmobile.db-journal ->
databases/ecmobile.db-journal
pull: /data/data/com.insthub.ecmobile/databases/ecmobile.db ->
databases/ecmobile.db
2 files pulled. 0 files skipped.
3106 KB/s (639520 bytes in 0.201s)
#再次覆盖安装或升级,观察其数据是否有被清除,注意事项,在将db文件,pull到本地前
先登录ecmobile,以便保留数据
D:\apk>adb install -r ECMobile3.2.apk
4845 KB/s (8427488 bytes in 1.698s)
Success
#再次pull文件到本地,使用navicat查看ecmobile.db中的user表中数据,仍存在2个账
户:ecshop和vip
D:\apk>adb pull /data/data/com.insthub.ecmobile/databases databases
pull: building file list...
pull: /data/data/com.insthub.ecmobile/databases/ecmobile.db-journal ->
databases/ecmobile.db-journal
pull: /data/data/com.insthub.ecmobile/databases/ecmobile.db ->
databases/ecmobile.db
2 files pulled. 0 files skipped.
2846 KB/s (639520 bytes in 0.219s)
#再次进入shell窗口
D:\apk>adb shell
PCRT00:/ # cd /data/data/com.insthub.ecmobile
cd /data/data/com.insthub.ecmobile
PCRT00:/data/data/com.insthub.ecmobile # ls
ls
app_push_dex app_push_update app_webview code_cache files
shared_prefs
app_push_lib app_textures cache databases lib
#进入shared_prefs目录
PCRT00:/data/data/com.insthub.ecmobile # cd shared_prefs
cd shared_prefs
PCRT00:/data/data/com.insthub.ecmobile/shared_prefs # ls
ls
WebViewChromiumPrefs.xml com.insthub.ecmobile.xml
userInfo.xml
com.insthub.ecmobile.push_sync.xml pst.xml
#查看 userInfo.xml文件内容
PCRT00:/data/data/com.insthub.ecmobile/shared_prefs # cat userInfo.xml
cat userInfo.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="netType">wifi</string>
<string name="email">vip@ecshop.com</string>
<string name="uid">2</string>
<string name="sid">d047729f4db0ce64eb321f7e20602390a2ebc491</string>
<boolean name="isFirstRun" value="false" />
</map>
PCRT00:/data/data/com.insthub.ecmobile/shared_prefs # exit
exit
#将userInfo.xml拉到本地
D:\apk>adb pull
/data/data/com.insthub.ecmobile/shared_prefs/userInfo.xml userInfo.xml
55 KB/s (315 bytes in 0.005s)
#修改userInfo.xml中的<boolean name="isFirstRun" value="false" />false改为
true,再上传到手机终端中
D:\apk>adb push userInfo.xml
/data/data/com.insthub.ecmobile/shared_prefs/userInfo.xml
154 KB/s (314 bytes in 0.001s)
#查看上传后的userInfo.xml,<boolean name="isFirstRun" value="false" />由
false显示为true
D:\apk>adb shell cat
/data/data/com.insthub.ecmobile/shared_prefs/userInfo.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="netType">wifi</string>
<string name="email">vip@ecshop.com</string>
<string name="uid">2</string>
<string name="sid">d047729f4db0ce64eb321f7e20602390a2ebc491</string>
<boolean name="isFirstRun" value="true" />
</map>
#在手机中启动ecmobile(若ecmobile在手机中已启动,则要结束进程后,再启动),观
察到有欢迎界面,再次查看userInfo.xml,由true修改为false
D:\apk>adb shell cat
/data/data/com.insthub.ecmobile/shared_prefs/userInfo.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="email">vip@ecshop.com</string>
<string name="netType">wifi</string>
<string name="uid">2</string>
<string name="sid">d047729f4db0ce64eb321f7e20602390a2ebc491</string>
<boolean name="isFirstRun" value="false" />
</map>
3.3 卸载测试
卸载方式
通过 adb 卸载 adb uninstall 包名
1. 获取 App 对应的包名称
首选方法使用 aapt 命令 Android asset packaging tools安
卓资源打包工具
#查看上传后的userInfo.xml,<boolean name="isFirstRun" value="false" />由
false显示为true
D:\apk>adb shell cat
/data/data/com.insthub.ecmobile/shared_prefs/userInfo.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="netType">wifi</string>
<string name="email">vip@ecshop.com</string>
<string name="uid">2</string>
<string name="sid">d047729f4db0ce64eb321f7e20602390a2ebc491</string>
<boolean name="isFirstRun" value="true" />
</map>
#在手机中启动ecmobile(若ecmobile在手机中已启动,则要结束进程后,再启动),观
察到有欢迎界面,再次查看userInfo.xml,由true修改为false
D:\apk>adb shell cat
/data/data/com.insthub.ecmobile/shared_prefs/userInfo.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="email">vip@ecshop.com</string>
<string name="netType">wifi</string>
<string name="uid">2</string>
<string name="sid">d047729f4db0ce64eb321f7e20602390a2ebc491</string>
<boolean name="isFirstRun" value="false" />
</map>
#查找包名,带过滤
D:\apk>aapt d badging ECMobile3.2.apk|find "package"
package: name='com.insthub.ecmobile' versionCode='6' versionName='3.2'
#查找该包所有的信息
D:\apk>aapt d badging ECMobile3.2.apk
其他方法列出第三方应用的包名称
2. 卸载安装包
第三方应用卸载(如:手机管家)
系统进行卸载设置|应用|某APP|卸载
长按,点x进行卸载
卸载完成后,检查卸载是否干净,有无历史缓存数据(需再次安装来验
证测试)
四:功能测试
结合具体情况
五: 性能测试(app客户端的性能)
5.1 时间
通过 Activity 的时间来做估算,可进行多次平均。日志中过滤 Displayed
关键字查看。
5.1.1 首次启动时间(冷启动)(★)
安装好 App 后第一次运行的启动时间
5.1.2 非首次冷启动时间
App 对应进程未运行
可以手机界面操作关闭后台进程,也可以命令行查看进程号后关闭后台进
程
C:\Users\wjh>adb logcat |findstr "Displayed"
12-12 11:42:26.730 550 571 I ActivityManager: Displayed
com.insthub.ecmobile/com.insthub.BeeFramework.activity.StartActivity:
+1s45ms
12-12 11:42:28.933 550 571 I ActivityManager: Displayed
com.insthub.ecmobile/.activity.GalleryImageActivity: +278ms
12-12 11:42:33.207 550 571 I ActivityManager: Displayed
com.insthub.ecmobile/.activity.EcmobileMainActivity: +303ms
C:\Users\wjh>adb logcat |findstr "Displayed"
12-12 11:44:36.262 550 571 I ActivityManager: Displayed
com.insthub.ecmobile/com.insthub.BeeFramework.activty.StartActivity: +263ms
12-12 11:44:38.610 550 571 I ActivityManager: Displayed
com.insthub.ecmobile/.activity.EcmobileMainActivity: +394ms (total +451ms)
5.1.3 非首次热启动时间
App 对应进程处于运行状态
C:\Users\wjh>adb logcat |findstr "Displayed"
12-12 11:45:40.324 550 571 I ActivityManager: Displayed
com.insthub.ecmobile/com.insthub.BeeFramework.activity.StartActivity: +182ms
12-12 11:45:42.465 550 571 I ActivityManager: Displayed
com.insthub.ecmobile/.activity.EcmobileMainActivity: +145ms (total +211ms)
5.1.4 页面切换时间
不同界面切换
有请求发送,响应数据量较大
有缓存的情况先清除缓存
使用系统菜单清除缓存或删除 /data/data/包名/cache 目录下内容
测试方法 查看 Android 系统日志,通过 Activity 的时间来做估算启动
时间
C:\Users\wjh>adb logcat |findstr "Displayed"
12-12 11:45:40.324 550 571 I ActivityManager: Displayed
com.insthub.ecmobile/com.insthub.BeeFramework.activity.StartActivity: +182ms
12-12 11:45:42.465 550 571 I ActivityManager: Displayed
com.insthub.ecmobile/.activity.EcmobileMainActivity: +145ms (total +211ms)
C:\Users\wjh>adb logcat|find "Displayed"
09-22 10:01:50.782 384 418 I ActivityManager: Displayed
com.insthub.ecmobile/.activity.EcmobileMainActivity: +177ms (total
+288ms)
09-22 10:01:56.336 384 418 I ActivityManager: Displayed
com.insthub.ecmobile/.activity.B1_ProductListActivity: +168ms
5.1.5 系统日志(补充知识点)
查看 Android 的日志
adb logcat
C:\Users\wjh>adb logcat
--------- beginning of system
09-22 10:14:00.186 72 72 I vold : Vold 3.0 (the awakening)
firing up
09-22 10:14:00.186 72 72 V vold : Detected support for: ext4
vfat
09-22 10:14:00.193 72 83 D vold : e4crypt_init_user0
先执行 adb shell,再执行 logcat
C:\Users\wjh>adb shell
PCRT00:/ # logcat
logcat
--------- beginning of system
09-22 10:14:00.186 72 72 I vold : Vold 3.0 (the awakening)
firing up
09-22 10:14:00.186 72 72 V vold : Detected support for: ext4
vfat
09-22 10:14:00.193 72 83 D vold : e4crypt_init_user0
安装 catlog.apk 需要 root 权限才能查看其他应用的日志
C:\Users\wjh>adb install d:\apkcatlog.apk
3676 KB/s (319702 bytes in 0.084s)
Success
日志级别
描述
ERROR
红色,表示错误,可能仍然允许应用程序继续运行
WARN
黄色,表示告警,具有潜在危害的情况
INFO
绿色,表示信息,应用程序运行情况的信息
DEBUG
蓝色,表示调试,应用程序调试的信息
VERBOSE
灰色,最详细的信息
帮助命令 adb logcat -help
清空日志缓存信息adb logcat -c
5.2 资源占用
5.2.1 Android 内存
测试场景
正常使用软件一段时间,查看运行内存占用
占用内存较多的操作
当 App 打开某个超大的图片时可能产生内存溢出OOM(Out Of
Memory),App 要使用的内存空间超过堆内存设置
5.2.1.1 运行内存占用(★)
查看某个应用运行内存的使用情况
adb shell dumpsys meminfo 包名
Pss Total : 实际使用的物理内存
private dirty:私有驻留内存
Heap Size: 占用总内存(Heap堆)
Heap Alloc: 分配内存
Heap Free: 空闲内存
Total 的 PSS 信息
这个值就是应用真正占据的内存大小,通过这个信息,可以轻松判别手机中哪些程序占内存比较大了。
VSS - Virtual Set Size 虚拟耗用内存(包含全部共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含全部共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
查看单个应用最大内存限制
adb shell "getprop|grep heapgrowthlimit"
同命令adb shell getprop |find "heapgrowthlimit"
上图所示,输入命令:getprop|grep heapgrowthlimit 得到结果该机型为192M。
当 pss Total(dalvik heap )这一列超过单个程序内存的最大限制时,OOM就很有可能会出现了.
5.2.1.2 存储空间占用(★)
主要关注 /data/data/包名 目录空间大小
使用系统菜单查看
使用 命令查看
数据占用得存储空间 adb shell du -sh /data/data/包名
D:\apk>adb shell du -sh /data/data/com.insthub.ecmobile
5.0M /data/data/com.insthub.ecmobile
应用占用存储空间 adb shell du -sh /data/app/app名
D:\apk>adb shell du -sh /data/app/com.insthub.ecmobile-1
13M /data/app/com.insthub.ecmobile-1
5.2.2 CPU 占用(★)
SoloPi 【推荐使用】
阿里(蚂蚁金服)研发。不需要 root 权限,但需要 ADB 权限 adb tcpip
5555和悬浮窗权限。
SoloPi更新下载地址:https://github.com/alipay/SoloPi/releases
# 安装SoloPi
D:\APK>adb install solopi.apk
4480 KB/s (4722009 bytes in 1.029s)
Success
# 已知问题:中文文件名乱码
D:\APK>adb pull /sdcard/solopi/
5.2.3 GPU 占用
GPU 过度绘制
界面区域重复绘制多次, 造成 GPU 占用过多, 浪费 GPU 资源,
产生无效的电量消耗
测试方法 开发者选项中打开显示 GPU 过度绘制
5.2.4 流量
使用流量前台使用
待机流量后台运行
5.2.5 功耗
安装功耗测量安装前后的电量,然后相减
使用功耗前台使用
待机功耗后台运行
5.3 性能测试指标
性能测试指标需要进行横向和纵向的对比,形成基准
横向:竞争对手
纵向:以前版本
一般app的性能指标参考:https://note.youdao.com/s/cuxO5yRU
六:兼容性测试
6.1 兼容性测试考虑因素
- 操作系统
主流 Android 版本 13/12/11/10
市场占有率网站地址:https://gs.statcounter.com/
- 手机品牌
主流手机品牌 Huawei/OPPO/VIVO/Xiaomi
Android 系统碎片化 Android 开源,各厂家的软硬件不同
- 屏幕
分辨率 长和宽上像素的多少 1280*720, 1920*1080,
2160*1080, 2400*1080
比例长和宽的比例 16:9, 18:9, 19:9
尺寸对角线的物理尺寸,4.7寸屏,5.8寸屏,6.5寸屏等
屏幕分类水滴屏、曲面屏、全面屏、刘海屏、折叠屏、叹号屏
- 权限设置
不同用户对于设备权限的控制不一定相同,如禁止所有非系统应用
使用摄像头等
6.2 兼容性测试方法
- 购买或租用真机测试
- 借助于云测平台
阿里 MQC https://www.aliyun.com/product/mqc
腾讯质量开放平台https://wetest.qq.com/
Testin 云测https://www.testin.cn/
贯众云测试http://cloudtest.komect.com/
百度 MTC http://mtc.baidu.com/
兼容性测试范围
软件的安装,卸载,基本功能,界面的遍历
兼容性测试脚本(了解)
基本的兼容性测试,可以用Windows批处理脚本方式执行
如在某手机中执行安装卸载的兼容性测试,可使用如下脚本,编辑
test.bat,命令行输入test.bat执行
for /L %%i in (1,1,10) do (
adb install d:\apk\ecmobile3.2.apk
adb shell am start -W -S -R 10
com.insthub.ecmobile/com.insthub.BeeFramework.activity.StartActivity
adb uninstall com.insthub.ecmobile)
七:易用性测试
- 操作
按钮点击范围是否合理开发者选项中打开显示布局边界
按钮位置是否合理
单手操作是否方便
- 界面
界面美观
八:可靠性测试
8.1 稳定性测试(★)
测试工具 Monkey 命令
Monkey 是 Android 中一个命令行工具,是 Android 自动化测试的一种
手段
Monkey 通过向系统发送伪随机的用户事件流,实现对 App 的稳定性测
试
命令行 adb shell monkey -p 包名 --throttle 时间间隔 -s 随机种子数 -v -v -
v 次数 > 日志文件名
时间间隔throttle 一般间隔时间300-1000ms
s 意思为seed,随机种子数,可以是任意的数字;当有出现
bug时,一定要使用同样的随机种子数,再复现一次bug 。
-v -v -v 表示查看最详细日志
次数 意思为count 表示事件数
通知栏屏蔽
使用 simiasque 遮住状态栏,避免 Monkey 操作通知栏,导致无效
测试
测试结果分析
正常结果一般情况下会出现 monkey finished,表示执行完成,
无Crash 或者 ANR(应用程序无响应) 或者ERROR或者
Exception
异常结果日志中遇到 Crash 或者 ANR(应用程序无响应) 或者
ERROR或者Exception
测试指标
可以按操作次数或操作时间来规定指标
D:\APK>adb shell monkey -p com.insthub.ecmobile --throttle 1000 -s 12345 -v
-v -v 100
>d:\apk\monkey.log
***
执行结束后,出现Monkey finished,表示无错误
// Monkey finished
如果有错误,直接运行结束,不会出现Monkey finished。
#查看monkey的帮助命令,命令可扩展
C:\Users\wjh>adb shell monkey -help
#忽略crash或超时,可加入--ignore-crashes --ignore-timeouts,当有错误时,monkey命
令仍会继续跑,执行运行结束为止。
C:\Users\wjh>adb shell monkey -p com.insthub.ecmobile --throttle 300 -s
12345 --ignore-crashes --ignore-timeouts -v -v -v 20000>d:\apk\monkey2.log
8.2 异常测试
测试点
断电重启
网络中断
程序异常退出 kill -9 进程号
C:\Users\wjh>adb shell ps |find "com.insthub.ecmobile"
u0_a91 8112 112 1036388 77584 SYSC_epoll c7725a3c S
com.insthub.ecmobile:bdservice_v1
u0_a91 8175 112 1036252 73804 SYSC_epoll c7725a3c S
com.insthub.ecmobile
C:\Users\wjh>adb shell kill -9 8112 8175
安装包文件名包含中文
C:\Users\wjh>adb install d:\apk\副本.apk
3211 KB/s (8427488 bytes in 2.562s)
Error: failed to write; /data/local/tmp/顐?.apk (No such file or
directory)
清除缓存 清除数据
通过系统菜单,和清除数据同一个页面
#命令 清除缓存
D:\APK>adb shell ls /data/data/com.insthub.ecmobile/cache/
ECMobile aquery uil-images
D:\APK>adb shell rm -rf /data/data/com.insthub.ecmobile/cache/
#命令 清除数据
D:\APK>adb shell ls /data/data/com.insthub.ecmobile
app_push_dex app_push_update code_cache lib
app_push_lib cache databases shared_prefs
D:\APK>adb shell rm -rf /data/data/com.insthub.ecmobile/*
或使用下列命令
#清除缓存
C:\Users\wjh>adb shell
HD1910:/ # cd data/data/com.insthub.ecmobile
cd data/data/com.insthub.ecmobile
HD1910:/data/data/com.insthub.ecmobile # ls
ls
app_push_dex app_push_update app_webview code_cache files
shared_prefs
app_push_lib app_textures cache databases lib
HD1910:/data/data/com.insthub.ecmobile # rm -rf cache
rm -rf cache
#清除数据
HD1910:/data/data/com.insthub.ecmobile # ls
ls
app_push_dex app_push_update code_cache lib
app_push_lib cache databases shared_prefs
HD1910:/data/data/com.insthub.ecmobile # rm -rf *
rm -rf *
HD1910:/data/data/com.insthub.ecmobile # ls
ls
九:网络测试
测试点
不同网络下使用 WiFi/3G/4G/5G
网络切换下使用 状态迁移法设计测试用例
弱网/无网测试
关注内容:APP应用的友好性!
测试工具
Fiddler
1. 菜单 Customize Rules
// Delay sends by 300ms per KB uploaded. 每KB上传的数据延迟300ms发送
oSession["request-trickle-delay"] = "300";
// Delay receives by 150ms per KB downloaded. 每KB下载的数据延迟150ms接收
oSession["response-trickle-delay"] = "150";
2. 勾选Simulate Modem Speed
菜单 Rules > Performance > Simulate Modem Speed
Fiddler 不能模拟丢包或误码的网络场景,只能模拟网速的变化,
只支持 HTTP/HTTPS 协议
QNET【推荐使用】
需要QQ登录,能够模拟各种网速下的各种场景
注意事项:关闭手机中的代理设置。