测试工具:adb+perfdog+charles+tidevice+Monkey

这篇博客介绍了Android测试中常用的工具,包括adb的安装与使用,PerfDog在性能测试上的应用,Charles的网络抓包功能,tidevice的安装与命令,以及Monkey自动化测试的介绍。通过实例展示了如何利用这些工具进行APP测试与性能分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、adb

1.adb是什么?

adb是什么?Android 调试桥 (adb)  |  Android 开发者  |  Android Developers

2.adb的安装方法

Mac下安装adb - 江湖萤火虫 - 博客园

3. P0必会

本文中所采用的测试app是从山智首页(http://www.anzhi.com/)下载的抖音apk,被个人命名为douyintest.apk。该apk被安装到测试手机后的包名为:com.ss.android.ugc.aweme。

1

apk的安装命令

adb install /Users/lsy/Downloads/douyintest.apk

2

app的卸载命令

adb uninstall com.ss.android.ugc.aweme

3

借助adb将电脑上的douyintest.apk推送到手机的/sdcard/目录下

adb push /Users/lsy/Downloads/douyintest.apk /sdcard/

4

将手机里的/sdcard/atx-agent.log文件拉取到电脑的~/downloads目录下

adb pull /sdcard/atx-agent.log ~/downloads

5

adb的截图命令

adb shell screencap -p > sc.png

adb shell screencap -p /sdcard/test.png && adb pull /sdcard/test.png ~/Desktop/

6

adb的录屏命令:录制手机屏幕以 mp4 格式保存到 /sdcard:

adb shell screenrecord /sdcard/filename.mp4, 需要停止时按 Ctrl-C

将手机中的.mp4导出到电脑:adb pull /sdcard/filename.mp4

7

adb命令查看某个app包名和对应的activity

adb shell dumpsys activity activities | grep mResumedActivity | awk '{print $4}'  (注释:取第四列)

11

adb清除某个应用的缓存的命令

1.获取该应用包名;2. adb shell pm clear com.kwai.video

12

adb抓log命令

adb logcat "*:W"  | grep "test"

注: Mac需要加双引号,否则报错

Android 的日志分为如下几个优先级(priority):

  • V —— Verbose(最低,输出得最多)

  • D —— Debug

  • I —— Info

  • W —— Warning

  • E —— Error

  • F —— Fatal

  • S —— Silent(最高,啥也不输出)

按某级别过滤日志则会将该级别及以上的日志输出。

13

adb进入设备目录sdcard内并且浏览设备目录命令

(1)adb shell (2)cd sdcard (3)ls -a

14

adb查看设备型号和位数

adb shell getprop ro.product.model

和adb shell getprop ro.product.cpu.abi

armeabi-v7a(32位ARM设备)

arm64-v8a(64位ARM设备)

15

adb执行monkey命令。Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。

adb shell monkey -p com.ss.android.ugc.aweme -v 500

Monkey 的详细用法参考 官方文档

16找到包含某字符串的包

(1)adb shell pm list packages kuaishou

  (2)  adb shell pm list packages | grep kuaishou

17logcat的adb命令使用adb logcat命令显示Android设备上的Log日志_峥嵘life的博客-CSDN博客_adb logcat
19trim memory信号问题,这部分疑似手机需要hook,否则的话建议对app进行接口自动化的application或者activity的发送trim memory信号。

后台:

(1)adb shell am send-trim-memory com.yxcorp.image.demo  BACKGROUND

(2)adb shell am send-trim-memory com.yxcorp.image.demo  MODERATE

(3)adb shell am send-trim-memory com.yxcorp.image.demo  COMPLETE

(4)adb shell am send-trim-memory com.yxcorp.image.demo  HIDDEN

前台:

(5)adb shell am send-trim-memory com.yxcorp.image.demo  RUNNING_CRITICAL

(6)adb shell am send-trim-memory com.yxcorp.image.demo  RUNNING_LOW

(7)adb shell am send-trim-memory com.yxcorp.image.demo  RUNNING_MODERATE

4. P1常用

1

利用adb命令启动app

1.重点参照1.1获取包名和活动activity,/前面包名,后面activity。

2.(1)adb shell am start -n com.android.settings/com.android.settings.Settings

  (2)adb shell am start -n com.ss.android.ugc.aweme/.splash.SplashActivity

2

利用adb命令杀死app

adb shell am force-stop com.ss.android.ugc.aweme(注:杀不死,后台应用仍然存在,假退出)

4

adb查看设备电池信息

adb shell dumpsys battery

5

adb查看指定app的内存信息

adb shell dumpsys meminfo com.ss.android.ugc.aweme

6

adb查看每个应用的内存上限

adb shell cat /system/build.prop | grep dalvik.vm.heapsize(需要提权) 512<

7

adb查看系统最大内存

adb shell cat /proc/meminfo

MemTotal 就是设备的总内存,MemFree 是当前空闲内存。

8

adb查看cpu实时使用情况

adb shell top -m 10(-m显示最大数量,-s 按指定行排序)

PID  : progress identification,应用程序ID
S    : 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数
#THR : 程序当前所用的线程数
VSS  : Virtual Set Size虚拟耗用内存(包含共享库占用的内存)
RSS  : Resident Set Size实际使用物理内存(包含共享库占用的内存)
PCY  : 前台(fg)和后台(bg)进程
UID  : User Identification,用户身份ID
Name : 应用程序名称

使用pid值可以查看当前程序的内存使用情况。

9

利用pid通过adb查看指定程序内存使用情况

查看手机安装的360安全卫士:(1) adb shell (2) dumpsys meminfo 3253

dalvik : dalvik使用的内存
native : native堆上的内存,指C\C++堆的内存(android 3.0以后bitmap就是放在这儿)
other  : 除了dalvik和native的内存,包含C\C++非堆内存······
Pss    : 该内存指将共享内存按比例分配到使用了共享内存的进程
heap alloc    : 已使用的内存
heap free     : 空闲的内存
share dirty   : 共享,但有不能被换页出去的内存
private dirty : 非共享,又不能被换页出去的内存(比如linux系统中为了提高分配内存速度而缓冲的小对象,即使你的进程已经退出,该内存也不会被释放)

10

adb查询手机型号

adb shell getprop ro.product.model

11

adb查询手机系统

adb shell "cat /system/build.prop | grep "product""(需要提权)

12

adb查询已安装app的版本号

adb shell getprop ro.build.version.release

13

adb查询手机系统分辨率

adb shell wm size

14

adb查询手机设备的ip地址

adb shell ifconfig | grep Mask

adb shell ip route | awk '{print $9}'

15

利用adb命令重启手机设备

adb reboot

5. P2提高

1

设备与电脑之间建立Wi-Fi连接

adb shell svc wifi enable

2

设备与电脑直接断开Wi-Fi连接

adb shell svc wifi disable

3

利用adb命令进行schema跳转(微信为例

adb shell am start -a android.intent.action.VIEW -d <schema>

4

利用adb查看app在设备上的安装路径

adb shell pm list packages -f |grep com.ss.android.ugc.aweme

package:/data/app/com.ss.android.ugc.aweme-L3DnOYgMcBTfwSp5U5dbsQ==/base.apk=com.ss.android.ugc.aweme

:到apk是路径

5

adb模拟锁屏操作

adb shell input keyevent 26

6

adb模拟回到设备桌面操作,即模拟按home键

adb shell input keyevent 3

keyevent指的是android对应的keycode,比如home键的keycode=3,back键的keycode=4.

具体请查阅 <android keycode详解> http://blog.csdn.net/huiguixian/article/details/8550170

adb shell input keyevent 控制按键输入的数值。很全!!!!_shawn xie123的博客-CSDN博客_adb 输入数字

7

adb模拟文本输入

adb shell input text  " <String>"

8

adb模拟屏幕滑动操作

adb shell input swipe 300 1000 300 500(参数 300 1000 300 500 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标。)

9

adb模拟点击事件

adb shell input keyevent 3

adb shell input tap 250 250

10

adb命令授权app相机、相册访问读写权限

adb -d shell pm grant com.ss.android.ugc.aweme android.permission.CAMERA

11

adb移除app相机、相册访问读写权限命令

adb -d shell pm revoke com.ss.android.ugc.aweme android.permission.CAMERA

12

adb的mount命令

mount后修改camera的对外读写权限为可读写

adb shell "mount -o rw,dcim/camera"

adb shell chmod 644 /storage/emulated/0/DCIM/Camera/20210629_174312.mp4

13

修改后试图删除camera目录下的一个视频文件

adb shell rm -r /storage/emulated/0/DCIM/Camera/20210629_174312.mp4

14

adb命令授权app通讯录访问权限

adb -d shell pm grant com.ss.android.ugc.aweme android.permission.CALL_PHONE

15

adb命令授权app地理位置访问权限

adb -d shell pm grant com.ss.android.ugc.aweme android.permission.ACCESS_FINE_LOCATION

6. P3补充

补充链接:

1

查看内核日志

adb shell dmesg (前提:需要提权到root权限)

adb查询已安装app的版本号:adb shell getprop ro.build.version.release

ro.build.version.sdk

SDK 版本

ro.build.version.release

Android 系统版本

ro.build.version.security_patch

Android 安全补丁程序级别

ro.product.model

型号

ro.product.brand

品牌

ro.product

.name

设备名

ro.product.board

处理器型号

ro.product.cpu.abilist

CPU 支持的 abi 列表[节注一]

persist.sys.isUsbOtgEnabled

是否支持 OTG

dalvik.vm.heapsize

每个应用程序的内存上限

ro.sf.lcd_density

屏幕密度

授权字段

adb使用-详细教程(Awesome Adb)_Deryou的博客-CSDN博客_adb使用

Android中常用的adb shell命令_龙爷linux的博客-CSDN博客_adb shell

二、PerfDog

从应用商店分别下载「快手」和「抖音」app,针对同一动作(1s上滑1次,连续滑90s)用PerfDog测试二者的性能对比。

PerfDog说明书:PerfDog Community

补充链接:PerfDog性能狗(神器) - 何卫 - 博客园

1. 举例

  • 测试「快手」视频切换播放的FPS、CPU、Memory指标。

         快手出现过Jank(每秒卡顿数)=1的几次小卡顿,规范化的进程CPU占用率不是很稳定,但是内存使用情况整体比较稳定。

  • 测试「抖音」视频切换播放的FPS、CPU、Memory指标。

  

        从上面三个图可以发现,在1分05s的位置,抖音软件出现了一次每秒卡顿次数=2的卡顿,并且是严重卡顿,同时导致了抖音CPU占用率提升了将近10%。内存变化比较稳定。Memory(统计FootPrint)最高为581MB,FootPrint超过650MB,引发OOM。整机可用剩余内存逐渐减少。

  • 进入PerfDog云后台,对比二者曲线,生成曲线图,得出性能对比结果。

         CPU几乎平分秋色,内存状况快手好一些,卡顿状况快手都是小卡顿比较多,抖音小卡顿较少大卡顿存在,整体来说从帧率和卡顿状况来说抖音好一些。

  • 分析性能对比结果,理解各指标含义。是否存在内存泄露? 是否存在卡顿情况?是否存在CPU过高情况?

三、Charles

charles:网络抓包工具,用来分析和调试移动端和服务端的网络通讯协议

1. Charles的安装

charles官方下载渠道  get

2. Charles的配置

如何使用Charles抓包get

比较简单,不在赘述

四、tidevice

1.tidevice是什么

2.tidevice安装

        pip3 install -U tidevice

3.tidevice的常用命令

功能对应命令
将某些文件从iphone中拖取到当前目录tidevice -u {设备序列号} fsync pull -B com.kwai.gifshow.beta1  /Documents/AppearVC ./

推资源到沙盒目录

cmd = "tidevice -u {} fsync -B {} push '{}' '{}'".format(udid, package_name, file_src, file_dir)

删除沙盒目录文件

cmd = "tidevice -u {} fsync -B {} rmtree {} 2>&1".format(udid, package_name, file_dir)
查询连接的设备tidevice list
查询设备中的安装好的应用tidevice -u {设备序列号} applist
截图tidevice screenshot screenshot.jpg
启动苹果设置tidevice launch com.apple.Preferences

获取设备的的UDID

idevice_id --list            # 等同于idevice_id -l         
ios-deploy -c               # 返回信息最为详细
tidevice list                  # 会包含手机设备名称
tidevice list --json        # 以json格式返回udid和设备名

获取设备系统信息

tidevice info                 # 返回的是设备信息
tidevice sysinfo              # 返回的是设备系统信息
ideviceinfo -k ProductVersion # 返回手机的设备版本
ideviceinfo -k ProductType    # 获取手机的设备名
idevicename                   # 获取设备名
tidevice info --domain com.apple.mobile.battery --json # 查看设备电源信息

应用管理

tidevice install example.ipa      # 安装应用,可直接跟url地址
ideviceinstaller -i example.ipa   # 安装应用
ios-deploy --bundle example.ipa   # 安装应用
tidevice uninstall 包名            # 卸载应用
ideviceinstaller -U 包名           # 卸载应用
ios-deploy --uninstall_only --bundle_id 包名      # 卸载应用
ideviceinstaller -l               # 查看设备安装的第三方应用
tidevice applist                  # 查看设备安装的第三方应用
ios-deploy --exists --bundle_id  包名   # 查看应用是否安装
tidevice launch 包名              # 启动应用,返回进程PID
tidevice kill 包名                # 杀掉应用,返回进程PID

手机重启/关机

tidevice reboot                   # 重启手机
idevicediagnostics restart        # 重启手机
idevicediagnostics shutdown       # 手机关机
tidevice shutdown                 # 手机关机

获取设备日志

idevicesyslog | grep 'test'              # 获取设备日志
idevicecrashreport -e test # 获取设备 crashlog
tidevice syslog            # 获取设备日志

idevicesyslog | grep 'test'    >> iphone.log &      # 获取设备日志,并后台重定向到文件中

前提条件:

brew install (-v) --HEAD (--fresh  --build-from-source) libimobiledevice 
sudo chmod 777 /var/db/lockdown

获取指定应用的性能(CPU、MEM、FPS)

tidevice perf -B 包名 # 阻塞式打印

模拟Xcode运行XCTest,启动WebDriverAgent测试(不依赖xcodebuild)

tidevice -u $UDID xctest -B $BUNDLE_ID

$UDID为ios手机设备ID(可用tidevice list获取)

$BUNDLE_ID为WebDriverAgentRunne的bundleid(可用tidevice applist获取)

举例tidevice -u udid xctest -B com.facebook.WebDriverAgentRunner.xctrunner -e USB_PORT:8100


转发请求到手机:

tidevice -u udid 8100 8100       

tidevice -u {udid} relay {local_port} 8100

iproxy {local_port} 8100 -u {udid}

注意uiautomator需要用这个, http://localhost:{local_port}

更多内容iOS自动化常用命令 - python我学的很菜 - 博客园

五、Monkey

FASTBOT安卓:

​​​​​​https://github.com/bytedance/Fastbot_Android/blob/main/handbook-cn.mdhttps://github.com/bytedance/Fastbot_Android/blob/main/handbook-cn.md

https://github.com/zhangzhao4444/Maximhttps://github.com/zhangzhao4444/Maxim

FASTBOT iOS

https://github.com/bytedance/Fastbot_iOShttps://github.com/bytedance/Fastbot_iOS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值