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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值