Android 测试之 adb 常用命令

目录

前言:

1、查看设备信息

2、安装/卸载 apk 应用

3、导入/导出文件

4、adb 抓取日志

5、获取当前 activity

6、启动 activity/退出应用

7、获取应用启动时间

8、查看应用的 cpu 和内存占用情况

8.1 查看 cpu

8.2 查看内存

9、获取单个应用的电量信息

10、清除应用的数据和缓存

11、截取屏幕(截屏)和(录制屏幕)录屏

11.1 截屏

11.2 录屏

12、input 模拟事件

12.1 keyevent 事件

12.2 text 发送文本

12.3 tap 点击坐标点

12.4 swipe 滑动 (长按)

13、通过 WiFi 连接设备

14、其它一些常用命令


前言:

在 Android 测试中,adb 命令是一种非常有用的工具,它可以帮助测试人员在模拟器或真实设备上进行各种测试操作。adb 命令的功能非常强大,可以用于启动和停止模拟器或真实设备、安装和卸载应用程序、抓取屏幕截图、获取设备信息等。在设计 Android 测试用例时,需要考虑测试用例的可靠性、可维护性、可扩展性等因素,以确保测试用例能够有效地覆盖系统的所有功能和特性。

1、查看设备信息

  连接手机,终端执行命令adb devices,确保手机能连上电脑。
(1)方法一:通过adb devices -l查看设备信息;

(2)方法二:(推荐)通过adb shell getprop | grep product查看设备信息:

  而更详细的信息可以使用adb shell getprop查看全部信息。

2、安装/卸载 apk 应用

安装:adb install xxx/xx.apk或者adb install -r xxx/xx.apk,其中-r可选,表示保留数据和缓存文件重新安装,相当于强制覆盖安装。

卸载:adb uninstall com.package或者adb uninstall -k com.package,其中com.package是应用包名,可选参数-k表示保留配置和缓存文件。

3、导入/导出文件

导入:adb push xxx/xxx /sdcard/xxx

导出:adb pull /sdcard/xxx /xxx/xxx

4、adb 抓取日志

通过adb logcat可以抓取手机的实时日志,但是这样抓取的内容会非常非常之多,所以我们可以通过adb logcat | grep 'xxx'。前面的两个命令都会把所有结果输出到命令行中,实际使用中,我们往往需要导出保存到 log 文件中,则可以使用
adb logcat -v time > /xxx/xx.log
或者:
adb logcat -v time | grep 'xxx' > /xxx/xx.log
其中-v选项可以设置日志的输出信息。

5、获取当前 activity

(1)方法一 (推荐):adb shell dumpsys activity | grep "Run #"或者adb shell dumpsys activity | grep -i run,其中最大的编号为当前运行的前台 activity,其它为后台 resume 运行的 activity。

adb shell dumpsys activity | grep "Run #"
        Run #8: ActivityRecord{58eafc u0 com.tencent.mm/.ui.LauncherUI t144}
        Run #7: ActivityRecord{77d375b u0 com.android.mms/.ui.ConversationList t143}
        Run #6: ActivityRecord{18e093 u0 com.meizu.connectivitysettings/.Settings$WifiProxySettingsActivity t132}
        Run #5: ActivityRecord{dc8c307 u0 com.meizu.connectivitysettings/.Settings$WifiInfoSettingsActivity t132}
        Run #4: ActivityRecord{f99b13b u0 com.meizu.connectivitysettings/.Settings t132}
        Run #3: ActivityRecord{9d3e0da u0 com.android.settings/.Settings t132}
        Run #2: ActivityRecord{71a02cb u0 com.meizu.mstore/.page.search.SearchActivity t134}
        Run #1: ActivityRecord{c916ac5 u0 com.meizu.mstore/com.meizu.flyme.appcenter.activitys.AppMainActivity t134}
        Run #0: ActivityRecord{b1bf6ad u0 com.android.incallui/.InCallActivity t129}
        Run #0: ActivityRecord{969f985 u0 com.meizu.flyme.launcher/.Launcher t104}

  如上,Run #8 那一行就是当前我打开的微信首页 activity:com.tencent.mm/.ui.LauncherUI,其它为后台运行的应用。

(2)方法二:adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'

(3)方法三 (不推荐):adb shell dumpsys activity | grep "mFoc"

不推荐方法三的原因有两个:其一,只能获取得到当前前台的 activity,而获取不到 resume 后台运行的 activity;其二,在高版本的安卓系统中,运行此命令将无法获取到想要的结果。

6、启动 activity/退出应用

启动:adb shell am start -n com.package/com.activity,执行命令,将会启动应用,并跳转到指定的 activity 页面。

退出:adb shell am force-stop com.package,直接退出应用 (非后台)。

注意:如果想要后台应用,可以通过模拟按键事件,执行点击 Home 键adb shell input keyevent KEYCODE_HOMEadb shell input keyevent 3

7、获取应用启动时间

执行adb shell am start -W com.package/com.activity,会返回三个时间:ThisTime、TotalTime、WaitTime。每个时间含义都不同,一般以 TotalTime 为准。

  • ThisTime:一般和 TotalTime 时间一样,除非在应用启动时开了一个透明的 Activity 预先处理一些事再显示出主 Activity,这样将比 TotalTime 小。
  • TotalTime:应用的启动时间,包括创建进程 +Application 初始化 +Activity 初始化到界面显示,但不包括前一个应用 Activity pause 的时间。
  • WaitTime:一般比 TotalTime 大点,包括前一个应用 Activity pause 的时间和新应用启动的时间,以及系统影响的耗时。

8、查看应用的 cpu 和内存占用情况

8.1 查看 cpu

(1)方法一:

低版本 Android(Android N 及之前):adb shell top -n 1 | sed -n '4,17p'

高版本 ANdroid(Android O 及之后):adb shell top -n 1 | sed -n '5,15p'

(2)方法二:adb shell dumpsys cpuinfo

(3)方法三 (不推荐):adb shell top -m 10 -s cpu -n 2,其中,-m 10选项表示获取前 10 行数据,-s cpu表示根据 cpu 排序 (其它值为:vss,rss,thr),-n 2表示执行 2 次。

 参数含义:

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  进程的名称

注意:之所以不推荐方法三,是因为在高版本 Android 中,top 命令的选项已经不同于低版本 Android 的了,执行方法三的命令会直接报错:top: not integer: cpu。具体情况在实际使用中,可以先使用adb shell top --help查看 top 命令支持哪些选项参数。

注意:不同方法可能获取到的 cpu 数据将会差别很大。瞬时数据以 top 为准;而 cpuinfo 取的是一段时间的平均 cpu 值,而且受其他命令影响大,尤其是 dumpsys meminfo,所以一般优先执行 dumpsys cpuinfo。建议用 busybox top -b -n 1,单次抓取,比系统带的快,计算精度高一位。

8.2 查看内存

输入:adb shell dumpsys meminfo com.package

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

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

PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

如果需要查看设备系统总内存及占用情况,可以使用adb shell cat /proc/meminfo查看。

9、获取单个应用的电量信息

从 android 5.0 开始,可以通过adb shell dumpsys batterystats com.package获取电量的相关信息。

10、清除应用的数据和缓存

执行:adb shell pm clear com.package

11、截取屏幕(截屏)和(录制屏幕)录屏

11.1 截屏

(1)方法一 (推荐):

执行:adb shell screencap -p /sdcard/1.png 保存图片到设备 sdcard

然后再执行adb pull /sdcard/1.png ~/xxx/ 把截图 pull 到电脑上。

(2)方法二:

Android 7.0 及以上:adb shell screencap -p > screen.png

Android 6.0:adb exec-out screencap -p > screen.png 或者 adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png

注意:低版本 Android 可能用此方法保存的图片是损坏的,因此推荐使用方法一。

11.2 录屏

对于 Android4.4 以上的手机,系统自带了一个命令 screenrecord,我们可以很方便的使用。

录屏命令:adb shell screenrecord /sdcard/test.mp4

命令执行后会一直录制 180s,按下 ctrl+c 可以提前结束录制。

通过adb shell screenrecord --help命令我们可以查看到--size--bit-rate--bugreport--time-limit--verbose--help

参数--size设定视频分辨率 (默认是手机设备的分辨率):

adb shell screenrecord --size 1280*720 /sdcard/test.mp4 # 录屏,保存视频的分辨率为 1280*720

参数--bit-rate设定视频比特率 (默认 4M/s,对应数字:4000000):

adb shell screenrecord --bit-rate 2000000 /sdcard/test.mp4 # 录屏,保存视频的比特率为 2M/s

参数–time-limit N设定录制时间:

adb shell screenrecord /sdcard/test.mp4 --time-limit 10 # 录屏 10s

注意:仅支持 mp4 视频格式。

12、input 模拟事件

通过adb shell input --help我们可以看到,input 相关的命令有以下几种:

text <string> (Default: touchscreen)  
keyevent [--longpress] <key code number or name> ... (Default: keyboard)  
tap <x> <y> (Default: touchscreen)  
swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)  
draganddrop <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)  
press (Default: trackball)  
roll <dx> <dy> (Default: trackball)  
tmode <tmode>  

text:输入文本

keyevent:功能键

tap:点击

swipe:滑动 (长按)

draganddrop:拖拽

press:发送点击按压命令

roll:发送滚动命令

12.1 keyevent 事件

发送事件:adb shell input keyevent key_code

发送文本信息:adb shell input text "xxx"

例如:

adb shell input keyevnet 3 # 点击 home 键操作

adb shell input keyevent 4 # 点击返回键操作

adb shell input keyevent 8 # for key '1'

adb shell input keyevent 29 # for key 'A'

adb shell input text “hello” # 发送文本 “hello”
常用的 key_code 主要有:
0 --> "KEYCODE_UNKNOWN"
1 --> "KEYCODE_MENU"
2 --> "KEYCODE_SOFT_RIGHT"
3 --> "KEYCODE_HOME"
4 --> "KEYCODE_BACK"
5 --> "KEYCODE_CALL"
6 --> "KEYCODE_ENDCALL"
7 --> "KEYCODE_0"
8 --> "KEYCODE_1"
9 --> "KEYCODE_2"
10 --> "KEYCODE_3“
11 --> "KEYCODE_4"
12 --> "KEYCODE_5"
13 --> "KEYCODE_6"
14 --> "KEYCODE_7"
15 --> "KEYCODE_8"
16 --> "KEYCODE_9"
17 --> "KEYCODE_STAR"
18 --> "KEYCODE_POUND"
19 --> "KEYCODE_DPAD_UP"
20 --> "KEYCODE_DPAD_DOWN"
21 --> "KEYCODE_DPAD_LEFT"
22 --> "KEYCODE_DPAD_RIGHT"
23 --> "KEYCODE_DPAD_CENTER"
24 --> "KEYCODE_VOLUME_UP"
25 --> "KEYCODE_VOLUME_DOWN"
26 --> "KEYCODE_POWER"
27 --> "KEYCODE_CAMERA"
28 --> "KEYCODE_CLEAR"
29 --> "KEYCODE_A"
30 --> "KEYCODE_B"
31 --> "KEYCODE_C"
32 --> "KEYCODE_D"
33 --> "KEYCODE_E"
34 --> "KEYCODE_F"
35 --> "KEYCODE_G"
36 --> "KEYCODE_H"
37 --> "KEYCODE_I"
38 --> "KEYCODE_J"
39 --> "KEYCODE_K"
40 --> "KEYCODE_L"
41 --> "KEYCODE_M"
42 --> "KEYCODE_N"
43 --> "KEYCODE_O"
44 --> "KEYCODE_P"
45 --> "KEYCODE_Q"
46 --> "KEYCODE_R"
47 --> "KEYCODE_S"
48 --> "KEYCODE_T"
49 --> "KEYCODE_U"
50 --> "KEYCODE_V"
51 --> "KEYCODE_W"
52 --> "KEYCODE_X"
53 --> "KEYCODE_Y"
54 --> "KEYCODE_Z"
55 --> "KEYCODE_COMMA"
56 --> "KEYCODE_PERIOD"
57 --> "KEYCODE_ALT_LEFT"
58 --> "KEYCODE_ALT_RIGHT"
59 --> "KEYCODE_SHIFT_LEFT"
60 --> "KEYCODE_SHIFT_RIGHT"
61 --> "KEYCODE_TAB"
62 --> "KEYCODE_SPACE"
63 --> "KEYCODE_SYM"
64 --> "KEYCODE_EXPLORER"
65 --> "KEYCODE_ENVELOPE"
66 --> "KEYCODE_ENTER"
67 --> "KEYCODE_DEL"
68 --> "KEYCODE_GRAVE"
69 --> "KEYCODE_MINUS"
70 --> "KEYCODE_EQUALS"
71 --> "KEYCODE_LEFT_BRACKET"
72 --> "KEYCODE_RIGHT_BRACKET"
73 --> "KEYCODE_BACKSLASH"
74 --> "KEYCODE_SEMICOLON"
75 --> "KEYCODE_APOSTROPHE"
76 --> "KEYCODE_SLASH"
77 --> "KEYCODE_AT"
78 --> "KEYCODE_NUM"
79 --> "KEYCODE_HEADSETHOOK"
80 --> "KEYCODE_FOCUS"
81 --> "KEYCODE_PLUS"
82 --> "KEYCODE_MENU"
83 --> "KEYCODE_NOTIFICATION"
84 --> "KEYCODE_SEARCH"
85 --> "TAG_LAST_KEYCODE"

12.2 text 发送文本

在设备光标处于编辑框时,通过adb shell text input "hello"可以将内容填写到编辑框,模拟键盘输入。

12.3 tap 点击坐标点

点击 x,y 坐标点位置:adb shell input tap 50 100 # 点击坐标点 (50, 100)

12.4 swipe 滑动 (长按)

滑动坐标点 (x1,y1) 到 (x2,y2):adb shell input swipe 10 20 100 200 # 从 (10,20) 滑动到 (100,200)

也可以添加滑动时间 (单位:ms):adb shell input swipe 10 20 100 200 500 # 从 (10,20) 滑动到 (100,200),滑动时间 500ms

长按操作:
adb shell input swipe 100 200 100 200 1200 # 从 (100,200) 滑动到 (100,200),滑动时间 1200ms,相当于长按一个坐标点 1200ms

13、通过 WiFi 连接设备

1.手机通过 USB 连接上电脑,然后输入:adb devices,确保设备已经连接上电脑。

2.确保设备和 PC 连接同一个 WiFi 网络环境,并查看 Android 设备的 IP 地址,然后输入:adb connect xx.xx.xx.xx

(1)如果现实连接成功,则断开 USB,即可通过 adb 继续操作设备;

(2)如果提示 connect 拒绝,输入adb tcpip 5555重启 adb,然后再次执行adb connect xx.xx.xx.xx

3.断开连接:adb disconnect

14、其它一些常用命令

查看屏幕分辨率:adb shell wm size 或者 adb shell dumpsys window displays

查看系统版本:adb shell getprop ro.build.version.release

查看系统 api 版本:adb shell getprop ro.build.version.sdk

查看手机 IP 地址:adb shell ifconfig | grep 'inet addr:' | sed -n '2p' | awk '{print $2}' | cut -d ':' -f 2

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N6B9http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=3NlHFQxIZRVoBSZKIxa9W_8_Rhrta0ns&authKey=a1QTVIziwxv9udpt4q2eFC%2FkOajzLo1h2PdW1EXRYxe9trPfZ6hPwrZvrKj8v%2Fz%2B&noverify=0&group_code=574737577 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值