App专项测试-常见ADB命令应用实践

一、设备连接操作

1. 获取连接设备

直接启动终端,使用命令 adb devices 命令即可

adb devices
image.png

其中手机连接设备状态有如下三种种情况:

  • offline:设备没有与adb相连接或者无法响应.
  • device:设备正与adb服务器连接
  • unknown:没有连接设备

通常连接过程中可能会出现各种问题,怎么办,推荐按如下顺序尝试解决:

1.重新插拔USB数据线
2.重启adb服务
3.使用助手类软件尝试
4.重启手机
5.换根数据线试试

其中重启ADB服务命令如下:

adb kill-server
adb start-server

如果adb服务启动不起来,查看是不是5037端口被占用

# 1、查看端口占用程序的pid
netstat -ano | find '5037'

# 2、根据PID查询程序信息
tasklist |findstr '5408' 

# 3、杀掉占用端口的程序
taskkill /f /t /in xxx.exe
image.png
image.png
image.png

2. 安装软件

(1) 全新安装

通过本地apk文件,安装一个设备上不存在的应用

语法:adb install ${path_to_apk}

例子:
  adb install esbooks.apk
(2) 升级(覆盖安装)

通过本地apk文件,升级(覆盖安装)一个设备上已存在的应用。使用参数 -r

语法:adb install -r  ${path_to_apk}

例子:
  adb install -r esbooks.apk
(3) 卸载

通过应用的包名卸载一个设备上存在的app

语法:adb uninstall ${package_name}

例子:
adb uninstall esbooks.apk

3. 文件拉取与推送

(1) 从设备端拉取「pull」文件至本地

从模拟器或者设备中复制文件或目录,使用如下命令

语法:adb pull ${remote} ${local}
 即:adb pull ${手机设备} ${PC本地}
(2) 从本地推送「push」文件值设备端

将文件或目录复制到模拟器或者设备,使用如下命令

语法:adb push ${local} ${remote}
 即:adb push ${PC本地} ${手机设备}
(3) 举个栗子:

本地建立个文本文件,并推送至设备sdcard目录下

1、当前目录建立test.txt,并写入“testMI”
echo 'testMI' > test.txt

2、推送test.txt至设备/sdcard/目录下
adb push test.txt /sdcard/test.txt

3、使用命令输出设备/sdcard/目录下的test.txt内容
adb shell 'cat /sdcard/test.txt'

4、拉去设备端/sdcard/目录下的test.txt至当前目录
adb pull /sdcard/test.txt demo.txt

5、输出当前目录下拉取回来的demo.txt内容
type demo.txt

4. 截屏

对模拟器或者设备进行截屏,使用如下命令

语法:adb shell screencap ${path_to_scap_screen.png}

举个栗子:
截取当前屏幕,并传回至当前目录,并浏览

####1、截取当前屏幕,保存至/sdcard/scap.png
adb shell screencap /sdcard/scap.png

2、拉取截屏图片至当前目录
adb pull /sdcard/scap.png

3、打开当前目录,浏览截屏
explorer .

Adb常用命令第一部分至此结束End

二、APP相关操作

1. 获取当前展示APP的页面名称

  • 首先,在设备端打开要获取名称的页面。
  • 然后,运行如下命令:
adb shell "dumpsys window | grep mCurrent"

其中mCurrentFocus行里就包含当前展示app页面的包名与页面名称,格式:

app.pakcage.name/package.activity.name

2. 开启与关闭app

(1)开启app
  • 首先,需要获取可启动的activity名称。即在含有如下配置的activity:
    image.png

如何获取上述信息,本文下面有详细说明

  • 然后,通过am命令启动指定app
命令格式为:adb shell am start -n ${package/launch_activity}

🌰例子:
adb shell am start -n com.esbook.reader
(2)强行关闭app

可以通过如下命令来强制关闭一个app

adb shell "am force-stop com.esbook.reader"

还是没有关闭怎么办,试试这个:

1、先使用ps命令获取app的PID
adb shell "ps | grep com.esbook.reader"

2、根据PID kill掉App的进程
adb shell "kill -9 2878"

提示:学会这两个命令关闭运行中的monkey再也不用重启手机了。

3. 获取app的activity信息

使用如下命令,可以再不反编译的情况下,获取测试关注的清单文件内的信息。如versionName,versionCode,activity配置,权限配置等。命令如下:

adb shell “dumpsys window | grep mCurrent”

文件内容概要说明如下:
一个activity信息片段的截取2


image.png

package相关信息片段的截取


image.png

三、系统信息相关操作

1. 获取系统信息

如果你想获取设备主板的一些信息,可以通过adb shell命令getprop或cat命令读取/system/build.prop文件的方式获取。
getprop的例子如下:

adb shell "getprop | grep product"
image.png

cat /system/build.prop的例子如下:

adb shell "cat /system/build.prop | grep product"
image.png

从上述命令的输出结果,可以出看出我的测试设备是一款samsung的GT-I9500设备。
当然,该命令还可以进一步进行扩展,比如要测试OOM(OutOfMemory)专项的时候,必须获取vm设备数据。则可以通过如下命令:

只是替换了命令管道符后的过滤条件
adb shell "cat /system/build.prop | grep vm"

1、设备给app的初始分配内存
dalvik.vm.heapstartsize=8m
2、无特殊配置下APP在该设备上的最大可用内存
dalvik.vm.heapgrowthlimit=128m
3、APP在该设备上可以用的极限内存
dalvik.vm.heapsize=512m
···
image.png

我在这里推荐大家使用cat读取文件的方式,因其输出简洁规整,方便做进一步处理。

2. 获取屏幕相关信息

(1)获取屏幕分辨率与dpi

记住这条命令,再也不用去百度手机型号查分辨率了。

adb shell "dumpsys window displays | grep init"

分辨率,dpi信息都已经显示出来了
init=1080*1920 480dpi cur=1080*1920 app=1080*1920 rng=1080*1005-1920*1845
(2)获取屏幕亮度相关设置

如果你的app提供了系统亮度设置相关的交互功能,这个时候你就需要用到如下方式解决。

  • 1)屏幕超时时间设置获取
    设置完超时时间后,不用去等真的超时锁屏,调用如下命令看下设置就好了:
adb shell "dumpsys power | grep mScreenOffTimeoutSetting"

通过显示可以看到超时时间。

  • 2)屏幕亮度相关设置
    屏幕亮度设置也是一样的,可以使用如下命令查看设置:
adb shell "dumpsys power | grep mScreenBrightnessSetting"
  • 3)屏幕自动亮度开关设置
    如果你设置的屏幕为自动亮度,那你需要用到这条命令查看:
adb shell "dumpsys power | grep mScreenBrightnessModeSetting"

0 为关闭状态
1 为打开状态

APP性能测试

如果你要进行移动应用(APP)的性能测试,那么你就需要先了解并选取相应的性能测试指标,对于评估一个app的性能指标来说,通常会采用如下四个维度:

  • 内存占用
  • CPU占用
  • 流量消耗(上传、接收)
  • 电量的消耗

本文将通过ADB命令对上述指标的获取方式进行简单操作说明。至于为什么用、怎么用、用来干什么,后续会发布相应文章进行说明。
下面就通过4个Adb的组合命令来获取:

1. 获取应用占用的内存信息

adb shell "dumpsys meminfo com.esbook.reader"

其中,我们可以用Pss Total列、TOTAL行的数据作为当前APP内存占用的衡量数值。至于为什么用这个,后续会有专门的OOM(OutOfMemory)专项测试文章,里面会进行说明。

2. 获取应用占用的CPU信息

adb shell "dumpsys cpuinfo | grep esbook"

其中,第一项数值可以用来作为衡量app对于设备CPU占用的衡量数值。

3.获取网络流量信息

1、获取APP的包名
adb shell "dumpsys window | grep mCurrent"

2、通过APP的包名,获取APP的userID(安装后唯一且固定)
adb shell "dumpsys package com.esbook.reader | grep userid"

3、根据读取tcp_rcv tcp_snd获取应用流量信息(设备重启后清零)
adb shell "cat /proc/uid_stat/10421/tcp_rcv"

adb shell "cat /proc/uid_stat/10421/tcp_snd"

4. 获取系统电池电量信息

adb shell "dumpsys battery"
image.png

五、Android设备日志相关操作

1. 清除设备端日志:

为什么要先写清除日志,因为大部分人不是不会获取log,而是获取了太多、太多的log。

adb logcat -c

如果你想不听到研发人员的咆哮,测试之前请运行如下命令进行历史日志清除。

2. 查看日志:

1)查看全部日志

最简单的一条查看日志的命令,如下:

adb logcat
2)查看指定级别以上的日志

如果只想关注Error级别的log,可以试试如下命令:

仅查看ERROR级别的错误
adb logcat *:E

优先级由第到高的顺序如下:


image.png
3)仅查看某个标记的日志

如果你只想关心默认标记的log,如只想看看Activity相关活动的日志,你可以试试如下命令:

仅查看ActivityManager的Info级别以上的log
adb logcat ActivityManager:I *:S

注:必须先设定所有的为silent,在此基础上设置的tag过滤才成功。

3. dump日志:

对于测试人员日志看看也就看看了,最重要的是存到本地随bug一起提交。如果获取当前设备端的日志,你可以试试如下命令:

adb logcat -d > local_file.log

4. 界面化日志查看DDMS

DDMS全称:Dalvik Debug Monitor Service,它提供截屏,查看线程和堆的信息,logcat,进程,广播状态信息,模拟来电呼叫和短信,虚拟地理坐标等等。

命令行终端里面直接输入DDMS启动
ddms

启动后界面如下:


image.png

模拟用户操作

如果有一天,你需要实现一个超级简单的用户场景自动化,如在连续翻页1000次等,这个时候,你又不想引入复杂的框架与工具,那应该怎么办呢?我相信当你看完下面的两个adb操作命令说明,你已经知道该如何实现了。

1. 获取用户操作事件日志

如果你想要捕捉用户操作,例如获取一次点击操作的屏幕坐标点,那么你需要使用下面的getevent命令:

adb shell getevent -lt

2. 模拟获取用户操作

如果你想回放一些操作,那么你需要如下基础命令:
1)模拟点击操作:

adb shell input top 500 500
  1. 模拟物理按键操作:
#"KEYCODE_BACK":4
adb shell input keyevent 4
  1. 模拟滑动操作:
adb shell input swipe 200 500 400 500
  1. 模拟输入文本信息:
adb shell input text HelloJerry
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容