一、web测试与app测试的区别
相同点
· 测试流程相同
测试计划与方案的编写【测试组长或者测试主管编写】
测试需求分析
测试用例设计,编写,评审
测试环境的搭建
测试用例执行,缺陷提交与跟踪
测试报告编写【测试组长或者测试主管编写】
测试总结
· 测试类型相同
功能测试
手工测试
自动化测试 web - selenium app - appium
界面测试
兼容性测试
易用性测试
安全测试
性能测试
安装升级卸载测试
文档测试
需求评审
用例评审
操作手册
不同点
· 结构不同
web系统属于 BS 架构
APP 属于 CS 架构
· 兼容性测试不同
web系统的兼容性主要关注操作系统(win7,win10)和浏览器(IE,Edge,Firefox,Chrome,Opera,Safari)
app的兼容性主要考虑不同的手机:操作系统(iOS,Android),同一操作系统的不同版本,屏幕分辨率、屏幕尺寸
· 性能测试不同
web系统只需要关注服务器的性能 - loadrunner、JMeter
app既要关注服务器的性能,同时也要考虑到终端的性能(响应时间、CPU、内存、流量、电量、流畅度) - JMeter
· 测试环境不同
web系统只搭建服务器环境
app要搭建服务器环境,另外还要考虑手机上的安装升级卸载
web系统只考虑服务器上的安装,升级
app系统除了要考虑服务器上的安装升级,还要考虑终端的安装、卸载、升级
· app有专项测试
网络:不同网络的切换,包括2G、3G、4G、5G、WiFi等,弱网情况、断网
权限:app在安装或使用过程中会申请手机的一些功能的权限,比如电话,短信,读取联系人列表、调用相册、读取位置
app在测试过程中还要关注手机屏幕的横竖屏切换
app在前台可以运行,也可以在后台运行(流量)
多点登录,不同手机,登录同一账号时强制下线
中断测试
同一账号在电脑和app同时登录时,信息要同步
应用程序的启动时间测试
二、安卓系统四层架构
应用层- application
应用框架层- application framework
类库层- libraries
系统内核层- linux kernel
三、安卓四大组件
· 活动 - activity 用户可见(页面)
running - 运行:在屏幕前台
paused - 暂停:失去焦点但仍然对用户可见
stopped - 停止:完全被另一个activity(页面)覆盖
destroyed - 销毁:退出,完全销毁
· 广播接收器 - broadcast receiver 用户不可见
· 内容提供者 - content provider 用户不可见
· 服务 - service 用户不可见
apk(Android package)文件介绍
Android安卓程序的安装包(apk)
ios 相关知识
iOS应用程序开发语言:object-C、Swift
iOS应用程序的开发框架:x-code
iOS应用程序扩展名:.ipa
四、app分类介绍
· 应用类型
原生应用(native app)
原生APP 就是利用 Android、iOS 平台官方的开发语言【安卓:java 语言,iOS:object-c】、 开发类库、工具进行开发的 app。
混合应用(hybrid app)
五、adb概念
adb是Android SDK 所提供的一个客户端/服务器架构的命令行客户端工具,在电脑上通过该工具,开发人员可以用来连接安卓模拟器,调试app代码;测试人员借助于该工具可以辅助测试工作,可以管理安卓设备,往手机中安装app,从手机设备中存取文件,以及做压力测试、查看日志等
· adb的组成
adb客户端
Android SDK 在电脑上安装好以后,通过命令行控制台cmd,使用adb命令可以启动adb客户端
adb服务器
一个在电脑上作为后台进程运行的服务器,对用户不可见,该服务器负责管理adb客户端与运行于安卓设备上的adb守护程序之间的通讯
adb daemon 守护进程
一个以后台形式运行于安卓模拟器或者安卓设备上的守护程序,用于负责管理adb的运行及相关通讯。
在电脑上启动一个adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程, 如果没有,它将启动 adb 服务器进程。当服务器进程启动时,它与电脑本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令;接着服务器开始与所有运行中的 android 设备建 立连接。Adb 通过扫描所有在 5555-5585 范围内的奇数端口来定位所有安卓设备;一旦 adb 服务器找到运行于安卓设备的 adb 守护程序(daemon),adb 将建立一个到该端口的 连接,从而连上手机设备
六、常用adb命令介绍
1、进入 adb shell 模式进入成功后显示:root@android:/ #
#:代表手机是root
$:代表手机没有获取root权限
2、adb 命令的两种使用模式
模式一:进入 windows 的 cmd 控制台,输入 adb shell,先进入 shell 模式 ,然后直 接使用 adb 命令; - 类似于 Linux 系统的操作,linux 中的常用命令多数可以使用
模式二:在 windows 的 cmd 控制台,直接用 adb +“linux 命令”的方式来执行 adb 命令;- 使用该模式时,如果已经进入 adb shell 模式,需要先 `exit`出 android 的 shell 模式
· adb 命令与 adb shell 命令的区别
adb 是 google 官方提供的一款用于在电脑上访问手机设备的命令行工具,在 adb 后 面使用的是 PC 端 adb 程序自带的 adb 命令; adb shell 命令,是通过执行 adb shell 命令以后,进入到 android shell 模式,可以使用的 android 系统命令,这些命令放在安卓设备的 System/bin 目录下,是手机端的命令
3、显示当前连接到电脑的 android 设备
adb devices
4、断开电脑和指定安卓设备的连接
adb disconnect
5、启动 adb
adb start-server
6、关闭 adb
adb kill-server
7、往手机或者安卓模拟器中安装 app 应用程序
第一次安装
adb install windows 中文件路径+apk 文件名
非第一次安装
adb install -r windows 中文件路径+apk 文件名
-r 覆盖安装,保留数据,不带-r 参数为全新安装
8、查看当前运行的 app 的包名和 activity 名
adb shell dumpsys window | findstr mCurrentFocus
9、使用 aapt 命令查看指定 apk 文件的包名
需要先进入C:\android-sdk\build-tools\android-4.4W
aapt d badging 盘符:\目录\app 文件名.apk
10、查看指定包名对应 app 是否已经安装
adb shell
ls data/data | grep im.tower.plus.android
在 windows 模式下查看微信包是否存在:
adb ls data/data | findstr mm
data/data 目录下存放所有已经安装的 apk 文件的包
adb shell
pm list package | grep tower
pm:package manager 包管理器
11、查看手机中安装了哪些应用
adb shell pm list package
12、查看手机中安装了哪些第三方应用
adb shell pm list packages -3
13、查看手机中安装了哪些系统应用
adb shell pm list packages -s
14、退出 shell 模式
exit
15、往指定安卓设备中安装 app 应用程序
待安装的 apk 文件在电脑本地
adb -s 127.0.0.1:62001 install c:\xxx.apk
-s 用于指定安卓设备,一般电脑上连接多个安卓设备时才会 用到,当前电脑上只连接一个安卓设备时,会默认安装到该设备。
待安装的 apk 文件在手机上
adb shell pm install xxx.apk
16、拉取安卓设备中的文件到电脑
adb pull 手机目录/文件名 电脑目录\文件名
17、从 windows 电脑推送文件到安卓手机
adb push 电脑目录\文件名 手机目录/文件名
18、卸载安卓设备中指定包名的 app
adb uninstall 包名
步骤一:先查出 tower 的包名为“im.tower.plus.android”
adb shell ls data/data |findstr tower
步骤二:执行卸载命令
adb uninstall im.tower.plus.android
19、获取管理员权限
adb root
20、在 android 的 shell 模式下查找文件
adb shell
find / -name 文件名
find / -name im.tower.plus.android
21、查看指定包名的进程号
Windows中cmd窗口
adb shell ps | findstr im.tower.plus.android
Android shell 模式下
ps | grep tower
22、查看 cpu 占用排名前 10 的进程信息,退出前刷新一次
adb shell top -m 10 -s cpu -n 1
-m 显示最大数量
-s 按指定行排序
-n 在退出前刷新几次
查看结果中显示项说明
PID:进程id
PR:优先级
CPU%:当时瞬时CPU占用率
S:进程状态 ->D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
THR:程序当前所有的线程数
VSS:Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS:Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY:调试策略优先级,SP——BACKGROUND/SP_FORE GROUND
UID 进程所有者的用户id
Name:进程的名称
特殊说明:这里是查看 cpu 的资源占用率,如果要看内存占用大小,关注 RSS 的值即可,这个值显示的是 不同 app 实际占用的内存
23、实时获取指定 app 的 cpu 占用信息
adb shell dumpsys cpuinfo | findstr <packagename | pid>
通过包名查看 tower 的 cpu 资源占用率
adb shell top -m 10 -s cpu -n 1 | findstr im.tower.plus.android
adb shell dumpsys cpuinfo |findstr im.tower.plus.android
持续监控 CPU 占用
adb shell top -n 5 | findstr <package | pid>
· CPU测试点分析
(1) 应用空闲状态运行监测 CPU 占用率
空闲状态:应用按 Home 键退到后台,不再占用系统的状态【通常是灭屏半分钟后】 CPU 占用率=0%
(2) 应用中等规格运行监测 CPU 占用率
中等规格:模拟用户最常见的使用场景 CPU 占用率≤30%
(3) 应用满规格长时间正常运行监测 CPU 占用率
Monkey 测试 CPU 占用率≤30%
(4) 应用正常运行期间监测 CPU 占用率峰值
应用正常运行:打开应用进行基本操作 CPU 占用率≤50%
· CPU 测试其他关注点
和自身 app 的上个版本对比
和竞品对比
自身 app 各个 activity 对比
24、查看指定包名的内存占用情况
adb shell dumpsys meminfo <包名 | 进程号>
查看 tower 的内存占用情况
adb shell dumpsys meminfo im.tower.plus.android
查看结果
Uptime:表示从启动到当前的时长,不包含休眠的时间,单位毫秒(ms)
Realtime:表示从启动到当前的时长,包含休眠的时间,单位毫秒(ms)
说明
(1) 通过查看 PSS Total 的值,可以查看指定 app 实际占用的内存大小
通过将 PSS Total 的值和实际物理内存大小比较,可用来判断是否满足需求
(2) Activities 的值,可以通过这个值来判断是否存在内存泄***r /> 比如刚退出 app,查看 Object 中 Activities 是否为 0,如果不为 0,则有 Activity 没有销毁,很有可能存在泄漏。
(3) 通过查看 Dalvik Heap 和 Native Heap 的值的变化判断是否存在内存泄漏
当 app 运行时,如果 Dalvik Heap 和 Native Heap 的值一直在增加,可能存在内存泄露。
内存泄露:指 app 占用的内存一直没有释放,一直增加,手机内存一直减少。
原因
app 申请使用的内存没有释放,导致 JAVA 虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给其他 app 用。 发生内存泄漏时,后台服务器日志会抛出 java 代码运行异常 java.lang.OutOfMemoryError,简称 OOM 异常;
什么是 OOM? OOM,全称“Out Of Memory”,翻译成中文就是“内存不足,内存泄漏。
25、查看指定包名的内存占用大小
C:\Users\Administrator>adb shell dumpsys meminfo | findstr im.tower.plus.android
· 内存测试点
空闲状态:切换至后台或者启动后不做任何操作,消耗内存最少
中强度状态:时间偏长的操作应用,模拟用户最常见的使用场景
· 内存测试关注点
(1) 退出某个页面后,内存是否有回落
(2) 进行某个操作后,内存是否增长过快
(3) 旧版本和新版本比较
(4) 新版本和竞品比较
26、使用 adb 命令对手机进行截屏保存到 sdcard 目录, 并取到电脑中
adb shell /system/bin/screencap -p /sdcard/screenshot.png
adb pull /sdcard/screenshot.png d:/tmp/screenshot.png
-p 参数用来指定截屏后保存的文件格式为 png
截屏文件存放路 径为 d:/tmp/
27、查看指定 app 的进程 PID
查看 im.tower.plus.android 包对应 app 的进程 pid
adb shell ps | findstr im.tower.plus.android
通过 PID 杀进程
adb shell kill -9 进程 PID
28、查看指定 app 的版本信息 -- build 版本
adb shell dumpsys package <package_name> | findstr version
安卓系统 shell 模式
dumpsys package im.tower.plus.android | grep version
windows 的 cmd 模式下
adb shell dumpsys package im.tower.plus.android |
findstr version
29、日志查看工具 Logcat 命令的使用
Logcat 打印的日志级别优先级
V:详细 verbose(最低优先级)
D:调试 debug
I:信息 information
W:警告 warning
E:错误 error
F:严重错误 fatal
S:静默 silent(最高优先级,没有什么日志内容会被打印出来)
打印出优先级包括 W、E、F、S 级别的所有日志消息到 adb 窗口屏幕
adb logcat *:W
把所有日志重定向到一个文件中
adb logcat > c:\tmp\test.txt
显示结果会带上日期时间,方便分析问题
adb logcat -v time >c:\aaa\test1.log -v 用来指定日志的输出格式为带时间 time
打印 E 级别以上的错误日志到文件
adb logcat -v time *:E >c:\aaa\error.log
清空以前的日志
adb logcat -c
查看当前开始的指定关键字相关日志
adb logcat | findstr tower
· 使用 logcat 命令辅助定位 bug
在操作 app 时通过 logcat 命令查看 app 操作日志,通过操作时间和搜索 error 、fail、fatal、warning、unkown 等关键字,对 bug 进行初步定位
前提条件:app 存在一个 bug,需要抓取后台日志,方便提问题单
· Logcat 命令使用步骤
步骤一:清空 logcat 日志
adb Logcat -c
步骤二:运行带时间的 logcat 日志打印到指定文件命令
adb logcat -v time >路径\日志文件名
步骤三:复现 bug
在手机里对 app 进行发现 bug 时的操作
步骤四:分析日志
在日志文件中搜索 error、fail、fatal、warning 等关键字,初步定位 bug
步骤五:拷贝除错误日志,保存到 txt 文件中
步骤六:提 bug 单时,错误日志 添加项目失败.txt 文件作为附件上传
30、Windows cmd 模式下查看指定 app 对应进程的日志
· 查看 tower 的操作日志
步骤一:查看 tower 的进程号
Adb shell ps | findstr tower
步骤二:通过 Tower 的进程号查看日志
adb logcat -v process | findstr 1434
进程号不固定,需要实时查询
-v 用来指定日志的输出格式为带进程号
31、通过包名查看处于运行状态 app 的 activity 启动耗时
步骤一:查看当前运行 app 的的包名和 activity 名
adb shell dumpsys window | findstr mCurrentFocus
步骤二:查看指定包名的 activity 的启动耗时
adb shell am start -W 包名/activity 路径名
查看 tower 的启动耗时
adb shell am start -W im.tower.plus.android/im.tower.plus.android.ui.login.LoginActivity
am start: 启动一个活动
-W: wait for launch to complete【等待启动一直到完成】