用户端App 测试方法与技术

目录: 

  1. app测试体系
  2. app项目测试流程
  3. app结构讲解
  4. app测试设计思路
  5. app常见bug解析
  6. 常用模拟器使用
  7. android开发者选项
  8. 安装mumu模拟器
  9. adb命令介绍
  10. adb环境搭建与配置
  11. adb与设备交互
  12. adb安装卸载应用
  13. adb命令启动页面
  14. adb命令清缓存
  15. adb文件传输
  16. adb日志操作
  17. adb命令操作Android设备
  18. 安装配置adb
  19. adb模拟按键操作
  20. adb性能分析
  21. app压力测试
  22. app压力测试示例

1.app测试体系

App 测试概念:

  • App 测试是软件测试的一部分
  • 是针对 App 应用的一类测试

App 测试的价值:

  • 避免漏洞
  • 保障性能
  • 保障用户体验

App 产品架构:

App 测试的学习路线:

@startmindmap
skin rose
* App 测试方法与技术
** App 项目测试流程
** App 结构讲解
** App 测试设计思路
** App 常见 Bug 解析
** 常用模拟器使用
** Android 开发者选项
** adb 常用命令
*** adb 命令介绍
*** adb 环境搭建与配置
*** adb 与设备交互
*** adb 安装卸载应用
*** adb 文件传输
*** adb 日志操作
*** adb 模拟按键操作
*** adb 性能分析
** app 压力测试
@endmindmap

2.app项目测试流程

需求分析:这一步涉及对项目需求进行仔细的分析和理解。这包括了解项目的目标、功能需求、非功能需求以及项目背景等。这个阶段的目标是确定测试范围、测试环境、测试策略以及测试数据。

测试计划编写:在这个阶段,测试团队将制定一个详细的测试计划。测试计划应该包括测试的目标、范围、进度、预算、风险和测试策略。

测试用例设计:在这个阶段,测试人员将根据需求文档和产品代码设计测试用例。测试用例包括测试步骤、预期结果和回归标准。通常使用测试用例管理工具(如Jira、TestRail等)来管理测试用例。

测试用例评审:对测试用例进行审查和评估的过程。测试用例评审通常由测试团队进行,也可以邀请开发团队、产品经理等相关人员参与。通过测试用例评审,可以确保测试用例的质量和可靠性,从而提高测试效率和准确性。

用例执行:测试人员根据测试计划和测试用例执行测试。这通常包括功能测试、性能测试、安全测试、兼容性测试等。

回归测试:回归测试是确保新的代码没有破坏已有的功能。在每个代码提交或代码变更之后,测试团队都会执行回归测试,以确保新的代码没有影响到已有的功能。

非功能测试:除了功能测试,还可以进行性能测试、安全测试、可用性测试、可靠性测试等。这些测试可以帮助确保应用程序在各个方面都符合要求。

走查验收(UI、产品):在所有测试都通过后,测试团队会对应用程序进行走查,以确保没有遗漏的测试,并且应用程序符合需求。

测试总结报告:在测试结束后,测试团队会编写一个详细的测试总结报告,其中包括测试结果、测试总结、问题和建议。

灰度发布:灰度发布是指将新版本的应用程序部署到部分用户环境中,进行真实的用户测试,以便收集反馈和改进应用程序。

上线:当所有测试都通过后,应用程序可以上线到公共环境中,让更多的用户使用它。

3.app结构讲解

apk 包结构:

什么是 apk?

  • 全称:Android application package(Android应用程序包)
  • 安装在安卓设备上的软件
  • APK 文件基于ZIP文件格式. 后缀名被修改为apk

apk 包结构:

  • lib/ :这个目录包含了应用程序的共享库文件,也称为动态链接库(Dynamic Link Library,DLL)。这些库是应用程序的核心组件,可以与其他应用程序共享,以提高性能和资源利用率。
  • res/:这个目录包含了应用程序的资源文件,包括图像、音频、布局文件等。应用程序可以使用这些资源来展示内容、响应用户事件等。
  • assets/:这个目录包含了应用程序的静态资源文件,通常是一些二进制文件(如图片、音频、视频等)。这些资源文件可以在应用程序运行时被读取,但不会在应用程序安装时被复制到应用程序的包中。
  • classes(n).dex:这个文件是应用程序的字节码文件,通常是一个.dex文件,它是Android虚拟机(Dalvik或ART)可以执行的二进制文件。应用程序的Java源代码会被编译成.dex文件,以便在运行时被虚拟机执行。
  • resources.arsc:这个文件包含了应用程序的资源文件,包括字符串、颜色、布局等。这些资源文件可以被读取和修改,以便应用程序可以根据需要进行定制和个性化。
  • AndroidManifest.xml:这个文件是应用程序的清单文件,包含了应用程序的元数据信息,如应用程序的名称、版本号、权限等。此外,它还描述了应用程序的组件(如活动、服务、广播接收器等)及其之间的关系,以便应用程序可以正确地启动和运行。

 app 分类:

  • Native App:原生 app 手机应用程序:Native App是指使用本机开发语言(如Java或C++)开发的手机应用程序,直接运行在操作系统层面,具有完整的系统级功能和性能。原生应用程序通常具有完整的用户界面,与操作系统紧密集成,并可以使用系统提供的各种API和功能。
  • Hybrid App:混合型 app 手机应用程序:Hybrid App是指使用Web技术(如HTML5、CSS3和JavaScript)开发的手机应用程序,通过浏览器引擎来渲染页面,并使用JavaScript框架(如React Native、Flutter等)来控制应用程序的逻辑和交互。混合型应用程序可以在一定程度上利用浏览器的性能和功能,同时提供类似于原生应用程序的用户界面和体验。
  • Web App:基于 Web 的 app 手机应用程序:Web App是指使用Web技术开发的手机应用程序,通常是通过在移动浏览器中运行网页来实现功能。Web应用程序可以通过JavaScript框架(如React Native、Flutter等)来增强性能和交互性,同时可以利用Web技术的成熟和易用性。

app 页面结构:

Native App

  • Activity
  • Window
  • View
  • ViewGroup

查看界面元素:

  • 工具
    • uiautomatorviewer
    • weditor
    • appium

 元素属性:

4.app测试设计思路

5.app常见bug解析

略~

6.常用模拟器使用

略~

7.android开发者选项

  • 开启开发者选项
  • 不锁定屏幕
  • USB 调试
  • 选择模拟位置信息应用
  • 显示触摸操作
  • 指针位置
  • 调试 GPU 过渡绘制
  • 显示所有“应用程序无响应”

8.安装mumu模拟器

略~

9.adb命令介绍

ADB(Android Debug Bridge)是Android平台上的调试工具,它是一个命令行工具,用于与运行Android操作系统的设备进行通信和交互。通过ADB,开发人员可以在计算机上与Android设备进行调试、安装、更新应用程序、执行命令等操作。

adb 简介:

  • Android Debug Bridge(Android 调试桥)简称 adb
  • Android sdk 中提供的用于管理模拟器或真机状态的工具
  • 命令行工具

adb 操作手机设备:

  • 打开应用
    • adb shell am start -n com.tencent.wework/.launch.LaunchSplashActivity
  • 传输文件
  • 点击,输入,滑动等
  • 硬件操作 返回,回到首页
  • 性能指标

adb 工作原理:

  • 采用了客户端-服务器(C/S)模型,包括三个部分:
    • 客户端 client
    • 服务端 server
    • 守护进程 daemon

10.adb环境搭建与配置

略~

11.adb与设备交互

连接模拟器(mumu 为例):

  • windows:
    • adb connect 127.0.0.1:7555
    • adb devices
  • mac:
    • adb kill-server
    • adb devices

连接真机(android 手机)设备

  1. 手机端:让手机处于一个调试模式
  2. 电脑端安装手机驱动(安装豌豆荚)

查看手机状态

  • adb devices
  • adb get-state

设备状态种类

  • device 正常
  • offline 连接出现异常,设备无响应
  • unauthorized 未授权

12.adb安装卸载应用

adb 命令格式:

  • 格式 :
    • adb [-d|-e|-s <serialNumber>]<command>
  • -d 指定当前唯一通过 Usb 连接的 android 设备为命令目标
  • -e 指定当前唯一运行的模拟器为命令目标
  • -s 指定相应的设备为命令目标

安装:

  • 普通安装 adb install <apk路径>
  • 覆盖安装/替代安装 adb install -r <apk路径>

卸载:

  • 卸载应用
    • adb uninstall 包名
  • 卸载应用(不删除配置文件,保存数据缓存信息)
    • adb uninstall -k 包名

13.adb命令启动页面

包和 Activity(活动页)的概念:

  • package 包:是 Android 应用的唯一标志
  • Activity 活动页: Android 应用页面,一个页面就是一个 Activity

获取当前的页面名:

  • 1、打开手机 app 应用的某个页面
  • 2、打开命令行工具
    • 执行命令:adb shell "dumpsys window | grep mCurrentFocus"

获取启动页面的 activity:

  • 命令:
    • mac:adb logcat ActivityManager:I | grep "cmp"
    • win:adb logcat ActivityManager:I | findstr "cmp"

启动页面:

  • 命令:adb shell am start -n <包名>/<avticity名> 

14.adb命令清缓存

adb shell 应用 1

  • 查看目录结构:adb shell ls
  • 查看系统当前日期:adb shell date
  • 查看系统 CPU 使用情况:adb shell cat /proc/cpuinfo
  • 查看系统内存使用情况:adb shell cat /proc/meminfo

adb shell 应用 2 - 查看应用列表

  • 显示所有应用:adb shell pm list packages
  • 显示系统自带应用:adb shell pm list packages -s
  • 显示第 3 方应用:adb shell pm list packages -3

adb shell 应用 3 - 查看当前的页面名

  • adb shell "dumpsys window |grep mCurrentFocus"

清除应用数据及缓存

  • adb shell pm clear <包名>

15.adb文件传输:

  • adb push 电脑路径 设备路径
  • adb pull 设备路径 电脑路径

16.adb日志操作:

日志的级别:

  • V — 明细 verbose(最低优先级)
  • D — 调试 debug
  • I — 信息 info
  • W — 警告 warn
  • E — 错误 error
  • F — 严重错误 fatal
  • S — 无记载 silent(最高优先级,绝不会输出任何内容)

adb 命令查看日志:

  • adb logcat

查看日志常用的参数:

  • adb logcat --help
  • adb logcat [TAG:LEVEL ] [TAG:LEVEL ] ...
  • adb logcat 打印默认日志数据
  • adb logcat -v time 打印时间
  • adb logcat -v color 使用不同的颜色来显示每个优先级
  • adb logcat -f <filename> 将日志输出到文件
  • adb logcat > log.log 保存日志到PC上
  • adb logcat -c 清理已存在的日志 

根据条件过滤日志:

  • adb logcat -v time "*:W" 打印 Warning 及以上级别的日志
  • adb logcat ActivityManager:D '*:S' 过滤tag 为ActivityManager,level为Debug及以上级别的日志 

17.adb命令操作Android设备:

略~

18.安装配置adb

略~

19.adb模拟按键操作

adb 模拟手机按键:

  • 1、打开【指针位置】设置(看坐标)
  • 2、执行 adb shell input 命令

模拟点击事件

adb shell input tap x坐标 y坐标

模拟输入事件

adb shell input text <输入内容>

模拟滑动事件

adb shell swipe <起点x> <起点y> <终点x> <终点y> <滑动时长>

模拟手机按键

  • 返回键:adb shell input keyevent 4
  • Home 键:adb shell input keyevent 3(置应用于后台运行)
  • 音量放大:adb shell input keyevent 24
  • 音量缩小:adb shell input keyevent 25

https://developer.android.com/reference/android/view/KeyEvent

20.adb性能分析

专项测试:(用户维度)

  • 崩溃(Crash,弱网)
  • 卡顿(掉帧、gc、cpu)
  • 响应慢(启动时间、交互响应、H5加载)
  • 发热(cpu,mem、ioi network、gps等硬件使用)
  • 掉电快(硬件占用)
  • 兼容性问题(机型覆盖、回归)

 专项测试:(技术维度):

  • 崩溃:自动遍历、monkey测试、横竖屏切换、快速进退。
  • 卡顿(掉帧、gc、cpu):卡顿测试、内存泄漏测试、method profile。
  • 响应慢(启动时间、交互响应、H5加载):冷热启动、界面切换、h5性能测试
  • 发热(cpu,mem、io、network、gps等硬件使用): method profile、gc统计、io统计、流量统计、硬件使用统计、耗电量分析。
  • 兼容性问题(机型覆盖、回归):兼容性测试、自动化测试、自动遍历、monkey测试

app启动性能指标:

  • 冷启动:是指app在首次安装后,需要重新加载所有数据和功能。
  • 暖启动:是指app在首次启动后,需要等待一段时间,加载部分数据和功能,以减少初始加载时间。
  • 热启动:是指app在启动后,能够快速响应用户的操作,如点击按钮或加载数据等。
  • 首屏启动:是指app在冷启动或暖启动后,能够快速响应用户的操作,并在第一时间内显示完整的内容和功能。

建议时间(没啥意义,看你的软件具体情况具体分析):

  • 冷启动需要5秒或更长时间。
  • 热启动需要2秒或更长时间。
  • 热启动需要1.5秒或更长时间。 

主要方法思路:

  • adb logcat(不咋准确)
  • 录屏+视频拆帧(常用)
  • uiautomator等自动化工具200ms巡检界面变化
  • traceview
  • 硬埋点 (开发人员配合)

使用adb logcat 

package=com.xueqiu.android(定义临时变量),清理缓存数据: adb shell pm clear $package

停止进程: adb shell am force-stop $package

启动app: adb shell am start -S-W $package/.view.WelcomeActivityAlias

获取数据: adb logcat l grep -i displayed

adb logcat结果

  • startTime:记录刚准备调用startActivityAndWait()的时间点
  • endTime:记录startA无识别结果IndWait()函数调用返回的时间点
  • WaitTime: startActivityAndWait()调用耗时 (WaitTime = endTime - startTime。)

使用ffmpeg拆针:

  • adb shell am force-stop $package
  • adb shell screenrecord --bugreport --time-limit 30 /data/local/tmp/xueqiu.mp4 &
  • adb shell am start -S-W $package/.view.WelcomeActivityAliaswait
  • adb pull /data/local/tmp/xueqiu.mp4 .ffmpeg -i xueqiu.mp4 xueqiu.gif
  • ffmpeg -i xueqiu.mp4 -r 10 frames_%03d.jpg

CPU 使用情况:

  • 查看当前系统 CPU 使用情况:adb shell dumpsys cpuinfo

内存使用情况:

  • 查看当前系统的内存:adb shell dumpsys meminfo
  • 查看某个应用的内存:adb shell dumpsys meminfo <应用名>

top 命令:

  • adb shell top
  • adb shell top |grep "包名" 查看某个包的一些性能指标
  • adb shell top -d 1 |grep "包名"

电池电量:

  • 命令:adb shell dumpsys battery

性能相关的具体用法:

  • 官网: https://developer.android.com/docs

21.app压力测试

  • Monkey 是 Google 提供的一个用于稳定性与压力测试的命令行工具
  • 可以运行在模拟器或者实际设备中
  • 它向系统发送伪随机的用户事件对软件进行稳定性与压力测试

为什么要用 Monkey

  • Monkey 就是像猴子一样上蹿下跳地乱点
  • 为了测试软件的稳定性,健壮性
  • 随机点击比顺序点击更容易发现问题

Monkey 基本用法

  1. 在命令提示符中输入 adb devices 查看有无连接的设备
  2. 确认有设备连接
  3. 获取 app 的包名
  4. adb shell monkey [参数] {随机发送事件数}
  5. 最简单的 monkey 命令:adb shell monkey 100

Monkey 常用选项

  • -v :用于指定反馈信息级别,总共分 3 个级别
    • adb shell monkey -v -v -v 10
  • -s <seednumber>:用于指定伪随机数生成器的 seed(种子)值
    • adb shell monkey -s 123 10
  • --throttle <milliseconds>:每个事件结束后的间隔时间
    • adb shell monkey --throttle 300 10
  • -p: 用于约束限制,用此参数指定一个或多个包
    • adb shell monkey -p com.android.browser 10
  • --ignore-crashes:忽略崩溃
  • --ignore-timeouts:忽略超时
  • --ignore-security-exceptions:忽略安全异常
  • --ignore-native-crashes:忽略本地代码导致的崩溃异常
  • --monitor-native-crashes:跟踪本地方法的崩溃问题

 Monkey 事件选项

  • --pct-touch:触摸事件
  • --pct-motion:滑动事件
  • --pct-appswitch:activity 之间的切换
  • --pct-pinchzoom:缩放事件
  • --pct-rotation:屏幕旋转事件
  • --pct-flip:键盘事件
  • --pct-anyevent:任意事件
  • 注意:所有类型属性比例加起来不能超过 100

雪球 app 压力测试实战

  • 确定测试 app 的包名:
  • adb shell dumpsys activity | findstr mFocusedActivity
  • 执行 8 小时:
  • 需要跑的时间/命令之间的时间间隔=要执行的次数 8*60*60*1000/300 = 96000
  • 日志级别:3 个 v
  • 确定雪球中常用的操作类型和比例:滑动、触摸、键盘、系统按键、activity切换
  • 确定 seed 值:-s 12345
  • 确定调试选项:
  • --ignore-crashes --ignore-timeouts --ignore-security-exceptions
  • 重定向日志到文件中 >

adb shell monkey -p com.xueqiu.android --pct-touch 30 --pct-motion 30 
--pct-syskeys 10 --pct-appswitch 20 --pct-flip 5 --pct-anyevent 5 
-s 12345 --throttle 300 --ignore-crashes --ignore-timeouts 
--ignore-security-exceptions -v -v -v 200 > monkey_log.txt 

22.app压力测试示例

略~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿瞒有我良计15

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

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

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

打赏作者

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

抵扣说明:

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

余额充值