3.2 APP测试实战:功能、性能与ADB全解析 目录前情提要1 项目概述2 APP测试范围3 APP测试实施3.1 APP功能测试单模块3.2 APP专项测试3.3 APP性能测试3.3.1 内存测试3.3.2 CPU测试3.3.3 流量测试3.3.4 电量测试3.3.5 流畅度测试3.3.6 启动速度测试3.3.7 稳定性测试3.4 ADB命令3.4.1 显示系统中全部接入设备3.4.2 开启/关闭ADB3.4.3 手动连接设备3.4.4 手动断开设备3.4.5 安装软件3.4.6 卸载软件3.4.7 获取软件包名3.4.8 清除应用数据与缓存3.4.9 启动、停止应用3.4.10 获取手机日志3.4.11 文件的上传、下载文件3.4.12 查看系统信息3.4.13 流量查看3.5 adb命令总结前情提要1、jdk安装环境变量1作用可以快速找到并运行电脑安装的软件一般针对无法建立桌面快捷方式的软件有些软件工具没有桌面快捷方式比如一些开发语言环境的工具就没有快捷方式2分类用户环境变量一旦换登录账号添加的环境变量就不能使用对应软件就不能启动系统环境变量每个用户都可以启动软件eg①Java工具的主目录叫JAVA_HOME②给path里添加内容%表示引用引用JAVA_HOME这个变量指定到bin目录表示只要在bin目录下启动任何一个程序不用打开它的路径直接就能启动运行③验证添加环境变量后的结果打开终端命令行控制台winr后输入cmd因为Java这个程序没有可视化界面所以要在终端命令行通过命令运行相当于找到Java的快捷方式了2、安装Android SDK①配置环境变量②在path环境变量中添加③验证修改环境变量是否成功3、安装模拟器mumu模拟器MuMu模拟器下载_支持Windows/macOS系统1 项目概述1、项目介绍1项目类型:电商项目2主要功能:买家:注册登录、商品搜索、购物车、下单、支付、售后供应商管理卖家:会员管理2、项目技术栈客户端:APP服务端:NginxMySQLPHP架构:C/S架构2 APP测试范围1、APP测试内容1APP功能测试业务测试业务模块测试2APP性能测试CPU、内存占用启动速度流量、电量消耗流畅度稳定性3APP专项测试安装卸载升级push消息推送交叉事件测试用户体验测试兼容性测试2、APP测试和Web测试对比1相同点服务器同一项目APP和web使用的后端服务器是相同的交互协议前后端默认都使用HTTP协议进行交互(也有部分APP用socket来交互)功能范围APP和web都需要测试功能2不同点架构不同APP是C/S架构web浏览器是B/S架构响应数据格式不同APP前后端交互的数据格式以Json为主web前后端交互的数据格式为Json/HTML等都有非功能的测试范围APP测试还有APP专项、APP性能web还有兼容测试、易用测试等3 APP测试实施APP功能业务单模块APP专项APP性能ADB命令3.1 APP功能测试单模块熟悉需求→提取测试点功能非功能编写测试用例→测试用例评审→执行测试用例→记录执行过程等级跟踪缺陷3.2 APP专项测试1、在不同的移动设备上能持久2、APP应用运行所依赖的软硬件真机/模拟器推荐MuMu模拟器APP安装包安卓、iOS3、APP专项测试范围安装卸载升级push消息推送消息弹窗交叉事件测试干扰性测试eg正在游戏中有人给我打电话用户体验测试应用型兼容性测试品牌机型、操作系统3.3 APP性能测试1、APP性能测试APP试用期间占用硬件资源情况CPU、内存、流量、电量使用情况2、分类APP程序运行时占用手机硬件资源情况性能指标APP稳定性长时间运行是否出现异常3、APP性能测试关注点内存CPU流量电量启动速度流畅度稳定性APP使用时对CPU、内存的占用情况APP使用时是否流畅等APP使用时电量、流量的消耗情况APP的启动时间是否过长APP是否能长时间稳定运行4、如何测试APP性能使用工具或命令进行测试3.3.1 内存测试①内存监控指标②内存问题的现象3.3.2 CPU测试①CPU监控指标②关注长时间90%以上③CPU问题现象手机发热耗电量反应变慢无响应3.3.3 流量测试流量操作APP会与服务器交换数据流量就是指这些交互数据的总大小上行从APP上传下行从服务器下载①流量指标测试②流量优化策略3.3.4 电量测试模拟器电量模拟器没有电池测不了电量可以通过功率来测①耗电量大场景②分析结果与基准数据对比竞品3.3.5 流畅度测试流畅度动画播放或图片切换的流畅性①流畅度的性能指标帧率FPS3.3.6 启动速度测试启动速度从启动APP到主页面加载完成的速度APP启动分类冷启动启动APP进程这种方式叫做冷启动一般测这个热启动将APP从后台置于前台APP先打开然后放于后台运行要用APP的时候再从后台调于前台即第二次使用APP的时候不用软件图标那里点开使用3.3.7 稳定性测试1、稳定性测试在APP中随意操作挖掘有可能出现的异常崩溃、闪退、无响应、卡顿等2、随机测试工具1Android系统使用自带的monkey工具adb命令行下的monkey工具Monkey乱点、乱抓作用模拟用户随机触摸屏幕、滑动、按键等操作来对程序进行稳定性测试检测程序异常情况测试次数50w-80w次①solopi通过adb获取数据②pefdog性能狗收费腾讯内部可能使用2iOS自带性能测试插件苹果官方开发者工具xcode3、Monkey工具应用Monkey命令1语法adb shell monkey -p 包名 -v 次数 tpshop.logegadb shell monkey -p com.tpshop.malls -v 2000 tpshop.log2参数-p指定包名每个APP的唯一标记通过它来区分APP-vlog详细程度【最高支持 -v-v-v 最详细】次数要执行随机操作的次数重定向保存日志到.log文件中将测试的执行结果保存到一个文件当中3包名查找adb shell pm list package -3eg:找到名为 com.taptap 的包名4多设备情况下adb-s设备的uid shell monkey -p 包名 -v 次数 tpshop.logegadb -s 127.0.0.1:16416 shell monkey -p com.taptap -v 100016416为该模拟器的ADB调试端口5保存日志到.log文件中egadb -s 127.0.0.1:16416 shell monkey -p com.taptap -v 1000 e:\aa.log4、稳定性测试步骤持续时间很长一般8小时以上1执行命令执行结果写入日志adb shell monkey -p 包名 -v 次数 tpshop.log2检查日志异常①检查日志中是否有异常关键字提取相关日志发给开发②常见关键字无响应在日志中搜索 “ ANR ”、timeout崩溃在日志中搜索 “ NullPointerException ” 或Exception闪退memory out 、memory Leak错误error、Err5稳定性测试扩展monkey扩展命令的使用如果APP提前闪退在次数没测完时就出现在回归测试时如何模仿第一次测试出现bug的流程即如何在修改bug后用monkey复现最开始时出现bug的操作monkey的测试是随机的①指定一个作为序列的随机数种子下次回归时用它指定操作间隔时间500ms-1000ms注意此时的-s在monkey的后边表示是monkey的操作egadb -s 127.0.0.1:16416 shell monkey -s 666 -p com.taptap -v --throttle 500 1000 e:\ab.log②APP如果闪退、卡死则忽略这个错继续进行下一个操作闪退--ignore--crashes卡死--ignore--timeouts③点的次数多滑动少点击--pct-touch 60表示点击的次数占总操作的60%6关于Monkey的一些扩展命令使用细则-字母--单词3.4 ADB命令1、ADB工具ADB(Android Debug Bridge)一种允许计算机与Android设备通信的命令行工具(Android应用的测试和开发者常用)电脑连接并操控安卓设备的工具2、ABD作用功能含自动化测试模拟用户的各种操作点击、滑动、输入等专项测试安装、卸载、文件传输等操作性能测试采集性能指标数据、记录日志、monkey稳定性测试等安卓官网 https://www.androiddevtools.cn/3、ADB工作原理三部分构成常见ADB命令如下3.4.1 显示系统中全部接入设备命令adb devices注意如果是真机手机需要开启USB的调试模式手机点击7次安卓版本号后进入开发者模式才能开启直接使用数据线连接即可如果是真机通过WiFi连接电脑和手机时需要知道手机连接的WiFi对应的IP地址之际adb connect 手机IP显示接入设备设备名uid设备状态devices①offline表示失败需要试一下手动连接②显示devices表示连接成功3.4.2 开启/关闭ADB接入设备异常无法正常通信时使用开启ADB服务adb start-server关闭ADB服务adb kill-server3.4.3 手动连接设备确保移动端设备是否已经接入命令adb connect 设备IP真机只写设备名字不写设备号egadb connect 127.0.0.1:1641616416是模拟器设备的ADB端口号3.4.4 手动断开设备命令adb disconnect 设备IPegadb disconnect 127.0.0.1:7555eg总流程3.4.5 安装软件命令adb install APK文件.apk文件名可以改包名不能改卸载时需要知道包名选项[-r] 覆盖安装时保留的数据和缓存文件egadb install tpshop.apk注意安装软件时将电脑文件夹的apk文件直接拖入终端命令行3.4.6 卸载软件命令adb uninstall APK包名包名一般是域名的倒序开发人员命名包时的一个行为习惯选项[-k] 卸载时保留数据和缓存文件egadb uninstall com.tpshop.malls3.4.7 获取软件包名包名(package)决定程序的唯一性(不是应用的名字)界面名(activity)目前可以理解一个界面名对应着软件打开的一个页面完整的界面名前面会带着包名1、列出手机装的所有APP的包名adb shell pm list packages2、列出系统应用的所有包名adb shell pm list packages -s3、列出除了系统应用的第三方的应用包名adb shell pm list packages -3不加shell相当于电脑直接和安卓设备进行交互加了shell就是电脑直接通过命令行的形式进入到安卓系统里相当于执行Linux命令Android系统底层可以使用Linux命令4、显示当前打开的软件包名注意需要先打开软件进入其中某一个界面再运行以下命令才能获取界面名①Windows命令adb shell dumpsys window|findstr mCurrentFocusfindstr是过滤查找的意思相当于Linux学的grep筛选、过滤的意思②Mac/Linux命令adb shell dumpsys window|grep mCurrentFocus5、|竖线 | 起一个连接的作用相当于把前面Linux命令执行的结果通过这个管道传给后面去用获取界面名软件包名 / 界面名3.4.8 清除应用数据与缓存命令adb shell pm clear apk包名注意pm是PackageManger包管理器-3表示第三方egadb shell pm clear com.tpshop.malls3.4.9 启动、停止应用打开APP后的第一个页面叫启动页首页 ≠ 启动页要启动一个APP就要打开启动那个页面的包名不管什么页面都要经过启动页才能打开想要打开的页面所以就要先找启动页的界面名1、启动adb shell am start 包名/页面名2、停止adb shell am force-stop 包名注意am是ActivityManager页面管理器start是启动eg3、模拟APP启动测试注意冷启动和热启动命令上无区别只跟APP的运行状态有关冷启动测得多1、命令adb shell am start-W -S -R次数 包名/页面名-W显示启动时间主要看TotalTime-S启动前先关闭程序进程-R后面跟重复测试的次数eg2、测试结果分析①-W的示例eg冷启动eg热启动②-S -R的示例eg3.4.10 获取手机日志1、日志快速定位到APP的非功能性问题2、当测试过程中发现问题后想获取错误的日志信息步骤①打开被测应用程序进入到触发缺陷的位置②使用查看日志命令adb logcat③触发缺陷④获取日志信息可以将日志重定向到.log文件中egadb -s 127.0.0.1:16416 logcat e:app.log3、日志级别从上到下严重级别依次升高4、获取APP日志adb logcat 指定路径eg获取APP日志adb logcat 指定路径3.4.11 文件的上传、下载文件1、命令将文件从电脑上传到手机adb push 电脑路径 手机路径将文件从手机下载到电脑adb pull 手机路径 电脑路径注意需要先进入设备的Android系统找到adcard文件adb shell2、文件上传过程eg电脑文件上传到手机成功3、文件下载过程不能直接下载到Windows的根目录eg文件从手机下载到电脑里成功3.4.12 查看系统信息Solopi的底层本质还是执行adb的命令注意查看APP占用的内存情况前要先运行起来软件1、查看APP的内存占用信息1查看总系统内存信息adb shell dumpsys meminfoegadb -s 127.0.0.1:16416 shell dumpsys meminfo结果2命令adb shell dumpsys meminfo 包名dumpsys输出系统信息meminfo是内存信息egadb -s 127.0.0.1:16416 shell dumpsys meminfo com.netease.yanxuan①上面是系统内存测试中只看APP内存②计算内存占比数据APP运行时所占内存总内存2、查看CPU相关信息1动态查看CPU信息命令adb shell toptop能显示系统资源使用情况2查看当前CPU信息只查看某一个程序占用的CPU的百分比命令adb shell dumpsys cpuinfo | findstr 进程IDdumpsys输出系统信息cpuinfo是CPU信息3、查看APP进程ID命令adb shell ps | findstr 进程IDps列出进程找出对应包名进程|进程太多通过 | 过滤出想找的进程eg3.4.13 流量查看进程运行才有流量所以先查进程再查该进程的流量1、命令adb shell ps | findstr 包名2、命令adb shell cat /proc/进程ID/net/dev注意先找进程再看进程流量文件3.5 adb命令总结思维导图