当前位置: 首页 > news >正文

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 开启/关闭ADB

3.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目录下启动任何一个程序,不用打开它的路径,直接就能启动运行

③验证添加环境变量后的结果:打开终端命令行(控制台)(win+r后输入cmd)

因为Java这个程序没有可视化界面,所以要在终端命令行通过命令运行(相当于找到Java的快捷方式了)

2、安装Android SDK

①配置环境变量

②在path环境变量中添加

③验证修改环境变量是否成功

3、安装模拟器

mumu模拟器:MuMu模拟器下载_支持Windows/macOS系统

1 项目概述

1、项目介绍:

(1)项目类型:电商项目
(2)主要功能:
买家:注册登录、商品搜索、购物车、下单、支付、售后
供应商管理
卖家:会员管理

2、项目技术栈
客户端:APP
服务端:Nginx+MySQL+PHP
架构:C/S架构

2 APP测试范围

1、APP测试内容

(1)APP功能测试:

  • 业务测试
  • 业务模块测试

(2)APP性能测试:

  • CPU、内存占用
  • 启动速度
  • 流量、电量消耗
  • 流畅度
  • 稳定性

(3)APP专项测试

  • 安装卸载升级
  • 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安装包:安卓、iOS

3、APP专项测试范围

  • 安装卸载升级
  • push消息推送:消息弹窗
  • 交叉事件测试:干扰性测试,eg:正在游戏中有人给我打电话
  • 用户体验测试:应用型
  • 兼容性测试:品牌机型、操作系统

3.3 APP性能测试

1、APP性能:测试APP试用期间占用硬件资源情况(CPU、内存、流量、电量)使用情况

2、分类:

APP程序运行时占用手机硬件资源情况(性能指标)

APP稳定性(长时间运行是否出现异常)

3、APP性能测试关注点:内存+CPU+流量+电量+启动速度+流畅度+稳定性

  1. APP使用时对CPU、内存的占用情况
  2. APP使用时是否流畅等
  3. APP使用时电量、流量的消耗情况
  4. APP的启动时间是否过长
  5. APP是否能长时间稳定运行

4、如何测试APP性能:使用工具或命令进行测试

3.3.1 内存测试

①内存监控指标

②内存问题的现象

3.3.2 CPU测试

①CPU监控指标

②关注:长时间90%以上

③CPU问题现象:手机发热+耗电量+反应变慢+无响应

3.3.3 流量测试

流量:操作APP会与服务器交换数据,流量就是指这些交互数据的总大小

  • 上行:从APP上传
  • 下行:从服务器下载

①流量指标测试

②流量优化策略

3.3.4 电量测试

模拟器电量:模拟器没有电池,测不了电量,可以通过功率来测

①耗电量大场景

②分析结果:与基准数据对比+竞品

3.3.5 流畅度测试

流畅度:动画播放或图片切换的流畅性

①流畅度的性能指标:帧率FPS

3.3.6 启动速度测试

启动速度:从启动APP到主页面加载完成的速度

APP启动分类:

  • 冷启动:启动APP进程,这种方式叫做冷启动(一般测这个)
  • 热启动:将APP从后台置于前台(APP先打开,然后放于后台运行,要用APP的时候再从后台调于前台,即第二次使用APP的时候不用软件图标那里点开使用)

3.3.7 稳定性测试

1、稳定性测试:在APP中随意操作,挖掘有可能出现的异常(崩溃、闪退、无响应、卡顿等)

2、随机测试工具:

(1)Android系统:使用自带的monkey工具(adb命令行下的monkey工具)

  • Monkey(乱点、乱抓)作用:模拟用户随机(触摸屏幕、滑动、按键)等操作来对程序进行稳定性测试,检测程序异常情况
  • 测试次数50w-80w次

①solopi:通过adb获取数据

②pefdog:性能狗(收费)(腾讯内部可能使用)

(2)iOS自带性能测试插件:苹果官方开发者工具xcode

3、Monkey工具应用

Monkey命令:

(1)语法:adb shell monkey -p 包名 -v 次数 >tpshop.log

eg:adb shell monkey -p com.tpshop.malls -v 2000 > tpshop.log

(2)参数:

  • -p:指定包名(每个APP的唯一标记,通过它来区分APP)
  • -v:log详细程度【最高支持 ' -v-v-v' 最详细】
  • 次数:要执行随机操作的次数
  • >:重定向(保存)日志到.log文件中(将测试的执行结果保存到一个文件当中)

(3)包名查找:adb shell pm list package -3

eg:找到名为 com.taptap 的包名

(4)多设备情况下:adb-s设备的uid shell monkey -p 包名 -v 次数 > tpshop.log

eg:adb -s 127.0.0.1:16416 shell monkey -p com.taptap -v 1000

(16416为该模拟器的ADB调试端口)

(5)保存日志到.log文件中

eg:adb -s 127.0.0.1:16416 shell monkey -p com.taptap -v 1000> e:\aa.log

4、稳定性测试步骤(持续时间很长,一般8小时以上)

(1)执行命令,执行结果写入日志

adb shell monkey -p 包名 -v 次数 >tpshop.log

(2)检查日志异常

①检查日志中是否有异常关键字,提取相关日志发给开发

②常见关键字:

  • 无响应:在日志中搜索 “ ANR ”、timeout
  • 崩溃:在日志中搜索 “ NullPointerException ” 或Exception
  • 闪退:memory out 、memory Leak
  • 错误:error、Err

(5)稳定性测试扩展:monkey扩展命令的使用

如果APP提前闪退,在次数没测完时就出现:

在回归测试时,如何模仿第一次测试出现bug的流程,即如何在修改bug后用monkey复现最开始时出现bug的操作?(monkey的测试是随机的)

①指定一个作为序列的随机数种子(下次回归时用它),指定操作间隔时间(500ms-1000ms)

注意:此时的-s在monkey的后边表示是monkey的操作

eg:adb -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作用:

  1. 功能(含自动化)测试:模拟用户的各种操作(点击、滑动、输入等)
  2. 专项测试:安装、卸载、文件传输等操作
  3. 性能测试:采集性能指标数据、记录日志、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-server

3.4.3 手动连接设备

确保移动端设备是否已经接入

  • 命令:adb connect 设备IP(真机只写设备名字,不写设备号)
  • eg:adb connect 127.0.0.1:16416(16416是模拟器设备的ADB端口号)

3.4.4 手动断开设备

  • 命令:adb disconnect 设备IP
  • eg:adb disconnect 127.0.0.1:7555

eg:总流程

3.4.5 安装软件

命令:adb install APK文件.apk

(文件名可以改,包名不能改,卸载时需要知道包名)

选项:[-r] 覆盖安装时保留的数据和缓存文件

eg:adb install tpshop.apk

注意:安装软件时将电脑文件夹的apk文件直接拖入终端命令行

3.4.6 卸载软件

命令:adb uninstall APK包名

(包名一般是域名的倒序,开发人员命名包时的一个行为习惯)

选项:[-k] 卸载时保留数据和缓存文件

eg:adb uninstall com.tpshop.malls

3.4.7 获取软件包名

  • 包名(package):决定程序的唯一性(不是应用的名字)
  • 界面名(activity):目前可以理解,一个界面名,对应着软件打开的一个页面(完整的界面名前面会带着包名)

1、列出手机装的所有APP的包名:adb shell pm list packages

2、列出系统应用的所有包名:adb shell pm list packages -s

3、列出除了系统应用的第三方的应用包名:adb shell pm list packages -3

  • 不加shell:相当于电脑直接和安卓设备进行交互
  • 加了shell:就是电脑直接通过命令行的形式进入到安卓系统里,相当于执行Linux命令(Android系统底层可以使用Linux命令)

4、显示当前打开的软件包名:

注意:需要先打开软件进入其中某一个界面,再运行以下命令才能获取界面名

①Windows命令:adb shell dumpsys window|findstr mCurrentFocus

(findstr是过滤查找的意思,相当于Linux学的grep:筛选、过滤的意思)

②Mac/Linux命令:adb shell dumpsys window|grep mCurrentFocus

5、|:竖线 | 起一个连接的作用,相当于把前面Linux命令执行的结果通过这个管道传给后面去用

获取界面名:软件包名 / 界面名

3.4.8 清除应用数据与缓存

命令:adb shell pm clear apk包名

注意:pm是(PackageManger)包管理器,-3表示第三方

eg:adb shell pm clear com.tpshop.malls

3.4.9 启动、停止应用

打开APP后的第一个页面叫启动页,首页 ≠ 启动页

要启动一个APP就要打开启动那个页面的包名(不管什么页面都要经过启动页才能打开想要打开的页面,所以就要先找启动页的界面名)

1、启动:adb shell am start 包名/页面名

2、停止:adb shell am force-stop 包名

注意:am是(ActivityManager)页面管理器,start是启动

eg:

3、模拟APP启动测试

注意:冷启动和热启动命令上无区别,只跟APP的运行状态有关(冷启动测得多)

1、命令:adb shell am start-W -S -R次数 包名/页面名

  • -W:显示启动时间,主要看TotalTime
  • -S:启动前先关闭程序进程
  • -R:后面跟重复测试的次数

eg:

2、测试结果分析

①-W的示例

eg:冷启动

eg:热启动

②-S -R的示例

eg:

3.4.10 获取手机日志

1、日志:快速定位到APP的非功能性问题

2、当测试过程中发现问题后想获取错误的日志信息步骤:

①打开被测应用程序,进入到触发缺陷的位置

②使用查看日志命令:adb logcat

③触发缺陷

④获取日志信息(可以将日志重定向到.log文件中)

eg:adb -s 127.0.0.1:16416 logcat > e:app.log

3、日志级别:从上到下,严重级别依次升高

4、获取APP日志:adb logcat > 指定路径

eg:

获取APP日志:adb logcat > 指定路径

3.4.11 文件的上传、下载文件

1、命令

  • 将文件从电脑上传到手机:adb push 电脑路径 手机路径
  • 将文件从手机下载到电脑:adb pull 手机路径 电脑路径

注意:需要先进入设备的Android系统找到adcard文件:adb shell

2、文件上传过程

eg:电脑文件上传到手机成功

3、文件下载过程

不能直接下载到Windows的根目录

eg:文件从手机下载到电脑里成功

3.4.12 查看系统信息

Solopi的底层本质还是执行adb的命令

注意:查看APP占用的内存情况前,要先运行起来软件

1、查看APP的内存占用信息

(1)查看总系统内存信息:adb shell dumpsys meminfo

eg:adb -s 127.0.0.1:16416 shell dumpsys meminfo

结果:

(2)命令:adb shell dumpsys meminfo 包名

  • dumpsys:输出系统信息
  • meminfo:是内存信息

eg:adb -s 127.0.0.1:16416 shell dumpsys meminfo com.netease.yanxuan

①上面是系统内存,测试中只看APP内存

②计算内存占比数据

APP运行时所占内存:

总内存:

2、查看CPU相关信息

(1)动态查看CPU信息

命令:adb shell top

  • top:能显示系统资源使用情况

(2)查看当前CPU信息(只查看某一个程序占用的CPU的百分比)

命令:adb shell dumpsys cpuinfo | findstr 进程ID

  • dumpsys:输出系统信息
  • cpuinfo:是CPU信息

3、查看APP进程ID

命令:adb shell ps | findstr 进程ID

  • ps:列出进程,找出对应包名进程
  • |:进程太多,通过 | 过滤出想找的进程

eg:

3.4.13 流量查看

进程运行才有流量,所以先查进程,再查该进程的流量

1、命令:adb shell ps | findstr 包名

2、命令:adb shell cat /proc/进程ID/net/dev

注意:先找进程,再看进程流量文件

3.5 adb命令总结

思维导图:

http://www.gsyq.cn/news/1610866.html

相关文章:

  • 卡在 FDE 入门的哪一步了?先判断该扛还是该换
  • AUTOSAR E2E Profile规范介绍
  • 战略升级!从传统定位到数字定位
  • 终极Windows窗口强制调整工具:轻松解决顽固窗口大小问题
  • Python之yandex-annlib包语法、参数和实际应用案例
  • 数字校园SQL注入防御:从原理到实战的纵深检测与动态响应体系
  • Windows系统文件hidserv.dll丢失找不到问题解决
  • 数据分析师成长路径:从思维到工具,构建解决实际问题的核心能力
  • ai-image-gen-mcp MCP 服务说明文档
  • DART:采样两份草稿估计思考预算,节省 67% token 效果还更好
  • 机器学习与模式识别 第一章 机器学习导论 考点压缩
  • 数据安全检查,这3个API盲区最容易被问穿
  • 基于改进YOLOv8与无人机航拍的电动自行车违规行为智能检测系统实战
  • 别再傻傻手写了!Python一行代码判断是不是数字,爽到飞起
  • 如何免费使用Outfit字体:9种字重打造专业品牌设计的完整指南
  • File和IO
  • 与你的 Elasticsearch 数据对话:使用 Google ADK 和 MCP 构建一个实时语音 agent ,分为 3 个组件
  • C#工业视觉实战:集成工业相机与YOLOv8实现缺陷检测系统
  • Dify平台大模型接入实战:从云端API到本地部署全流程指南
  • 探索兴趣爱好的内涵
  • Postman便携版终极指南:Windows用户的免安装API开发解决方案
  • 48.可直接落地!IEC61131-3 ST 完整源码|PLC 物料分拣 + PID 调速 + Modbus 通信
  • SH9递归对抗驱动的活系统:九层架构理论体系深度研究报告(世毫九实验室原创研究)
  • 零基础入门MySQL数据分析:从SQL语法到电商实战项目
  • 洛谷 P2024:[NOI2001] 食物链 ← 扩展域并查集
  • 35款自动脱壳工具合集:逆向工程中的“开罐器”与“手术刀”
  • 只会写业务 UI 走不远!吃透这套 Framework 体系,跳槽大厂拉开薪资差距
  • 什么!翻译论文还要消耗token? 关于如何提升marker转英文文档速度,并使用skill批量翻译论文
  • openEuler-portal-mcp智能推荐系统:如何实现100%工具推荐覆盖率
  • Apache Commons Text RCE漏洞CVE-2022-42889:原理、复现与安全修复