一、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)

通常是一个原生应用内嵌了浏览器,既利用了原生APP 的开发技术还应用了 HTML5 开发技术,是原生和 HTML5 技术的混合 应用。

五、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【等待启动一直到完成】