功能测试点

用户使用习惯

权限问题

硬件问题

比如双卡双待、摄像头、GPU等。

操作习惯

用户常用的有菜单键、Home键、返回键、Home键长按(显示当前进程列表)、调整音量、待机等。相应的作为测试工程师我们需要考虑的项就变成了:

• 应用中的Back键的事件是否重写了?在各个功能界面中点击Back键会有什么反馈?

• 用户在应用各个界面点击Home键之后,再次打开应用的反馈:应用是默认处于后台的状态还是有结束生命周期。

• 应用是否使用到菜单键,切不可遗漏这个按键和应用的交互。

• 应用在任何状态下,系统进入待机或者关机。当系统被重新唤醒后,应用处于什么状态,是否有正确的反馈。

• 应用进程被用户手动关闭之后,是否可以再次正确启动。

APK(全称:Android application package,Android应用程序包)是Android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件。一个Android应用程序的代码想要在Android设备上运行,必须先进行编译,然后被打包成为一个被Android系统所能识别的文件才可以被运行,而这种能被Android系统识别并运行的文件格式便是“APK”。

数据移动

用户会在软件没有响应或者出现重大缺陷时,点击强制停止按钮。或者在手机变卡后选择清空数据来是否自己机器的空间。

安装&卸载测试

用户安装方式主要有:

<package name>进行安装;

• 使用第三方软件(比如豌豆荚、91助手等)安装;

• 将应用先下载到SD卡中再进行安装;

• 一部分数据量大的Android应用(一般是游戏)会采用小体积的应用安装,之后通过在线下载数据的方式使用。

应用安装之后,还要重点查看以下几点:

• 不联网的情况下是否能正常运行,会不会崩溃?

• 在线下载数据不完整,能否再次启动?

• 是否支持断点续传(在程序正在下载或者上传文件的过程中,突然杀掉进程,检查文件上传的情况)?

• 下载完整之后,再次启动。

• 安装成功后,检查版本号以及相关数据。

升级测试

增量升级

增量升级也叫做差分升级(Smart APP update)。

优点:用户不必再下载一个完整的Apk进行安装。

缺点:不需对发布的所有旧版本和最新版本做差分,很麻烦;如果一部分系统没有拿到内置应用的权限,那么就没有办法进行增量升级。

内置应用升级

注意每次升级之后的应用是否与内置在系统中的.os文件匹配,如不匹配则会直接导致应用崩溃。升级测试场景还有很多,以后再做补充。应用升级并非仅仅检查新功能或做冒烟测试,更多的是去了解升级的原理,升级到底更改了哪些文件,而这些文件又影响力哪些功能和数据库,找到这些问题的答案才能有针对性的进行全面的测试。

发布

发布 android:开发打包(.apk)的文件,上传到应用商店(主流的应用商店)

发布IOS:

1、把自己手机的唯一序列号告诉开发;

2、在自己的手机上安装testflight;

3、开发把被测试的APP发布后,然后测试就可以在testflight中下载开发发布的被测试的app。

稳定性测试

在保证基本功能正确基础之上,APP的稳定性就显得非常重要,如果一个APP经常出现闪退或者卡死,那么用户体验就会受到很大伤害,在有其他竞争产品的情况下很容易造成用户的流失。 稳定性测试的概念有2种:

1、稳定性测试,对应于异常性测试,即发生异常情况时,系统如何反应的测试。包含:

a、交互性测试,被打扰的情况,如来电,短信,低电量等。

b、异常性测试,断网,断电,服务器异常等情况。

2、稳定性测试指的是性能测试,压力测试

a、基准性能测试,通过服务器端及客户端口在不同网络环境下响应速度。

b、大数据测试,在特定环境下,客户端一次性更新大量数据及人员列表。

性能测试

普遍的apk性能测试,主要有以下几个:

a、响应

b、内存

c、cpu

d、FPS (app使用的流畅度)

e、GPU过度渲染 (手机加载资源的整个过程)

f、耗电

g、耗流

adb

adb简介

adb,即 Android Debug Bridge,它是 Android 开发/测试人员的强大工具。它是一种可以用来操作手机设备或模拟器的命令行工具。它存在于 sdk/platform-tools 目录下。虽然现在 Android Studio 已经将大部分 adb 命令以图形化的形式实现了。

开发者权限打开

step1:在连接手机设备之前,先在高级系统管理设置中,看下SDK环境变量,点击确定即可。

step2:打开手机设置,点击我的设备,搜索关于⼿机,在关于⼿机中点击7次,系统管理⾥⾯看到开发者选项,开启开发者选项和USB调试。

step3:手机数据线连接电脑端。

step4:打开cmd控制台,输入adb devices,看我们的手机是否与电脑连接成功,如下图所示:

android 判断手机是否是按钮屏_java

apk的卸载与安装

针对android:给一个apk文件,通过电脑在手机端可以熟练的安装和卸载eg1:开发给一个 weibo.apk文件,测试人员通过cmd命令,进入到apk的路径,输入adb install [APK路径]命令来进行安装,如下图所示

android 判断手机是否是按钮屏_android 判断手机是否是按钮屏_02

 

android 判断手机是否是按钮屏_Android_03

此时安装成功!

针对IOS手机

步骤:

A、首先把苹果的测试手机序列号告诉开发

B、在测试手机下载testflight的App

C、开发会把测试的app发布到testflight,然后我们通过testflight来安装被测试的app

如何通过电脑命令卸载app

卸载逻辑:a.打开app,再使用adb shell am monitor等命令获取被卸载的程序包名

android 判断手机是否是按钮屏_Android_04

b.使用cmd命令,输入adb uninstall [应⽤包名],来进行卸载。如下图所示

android 判断手机是否是按钮屏_android 判断手机是否是按钮屏_05

adb devices 显示当前连接的 adb 设备

android 判断手机是否是按钮屏_包名_06

adb shell 进⼊ Android 系统的 shell 模式

搭建完环境后,打开控制台,输入命令:adb shell,就可以进入手机的环境,然后就可以通过linux命令进行相关查询,由于手机也是linux环境下的,所以linux命令也同样适用。最后输入exit就可以退出。如输入pm list packages查询所有的包名

android 判断手机是否是按钮屏_android 判断手机是否是按钮屏_07

adb logcat 打印机器 log ⽇志

android 判断手机是否是按钮屏_Android_08

adb logcat | findstr package 查看指定的包名日志

android 判断手机是否是按钮屏_Android_09

adb install [APK路径]

android 判断手机是否是按钮屏_Android_10

adb uninstall [应⽤包名]

android 判断手机是否是按钮屏_java_11

adb shell am monitor 获取程序包名

android 判断手机是否是按钮屏_包名_12

adb shell dumpsys window | findstr mCurrentFocus 查看当前运行的APP的包名和Activity

android 判断手机是否是按钮屏_Android_13

adb shell service list 显示当前运行的系统服务

android 判断手机是否是按钮屏_android 判断手机是否是按钮屏_14

adb shell dumpsys activity top 显示当前最前端的Activity

adb shell cat /proc/cpuinfo 显示设备的CPU信息

android 判断手机是否是按钮屏_java_15

adb shell cat /proc/meminfo 显示设备的内存使用情况

android 判断手机是否是按钮屏_java_16

adb shell wm size 查看屏幕分辨率

android 判断手机是否是按钮屏_包名_17

获取程序pid

1、adb shell
logcat ps | grep 包名

android 判断手机是否是按钮屏_Android_18

2、adb shell ps | findstr 包名

android 判断手机是否是按钮屏_android 判断手机是否是按钮屏_19

3、adb shell top

android 判断手机是否是按钮屏_Android_20

adb shell dumpsys meminfo 进程ID 获取被测试APP的内存信息

android 判断手机是否是按钮屏_android 判断手机是否是按钮屏_21

adb shell top -n 1 | findstr 进程ID 获取被测APP的CPU信息

android 判断手机是否是按钮屏_android 判断手机是否是按钮屏_22

adb shell dumpsys battery 获取电量信息

adb shell cat /proc/进程ID/status 获取被测APP的UID

android 判断手机是否是按钮屏_android 判断手机是否是按钮屏_23

adb shell cat /proc/PID/net/dev 获取被测APP的流量

android 判断手机是否是按钮屏_包名_24

adb shell logcat -v time >log.txt 把日志信息重定向到log.txt中

android 判断手机是否是按钮屏_android 判断手机是否是按钮屏_25

android 判断手机是否是按钮屏_包名_26

⽇志

常用错误日志信息

空指针:nullpointException
数组越界:ArrayIndexoutof boundsException
多次启动线程:illegalThreadstateException
数字格式化问题 :java.lang.NumberFormatException
内存溢出:java.lang.OutOfMemoryError
文件找不到:java.io.FileNotFoundException
未发现此类:java.lang.ClassNotFoundException: Didn't find class
初始化错误:java.lang.InstantiationException:java.lang.Class<androidx.core.app.
Crash > AndroidRuntime > Exception>Error 的顺序逐个搜索。
注:crash,即崩溃,anr是crash的一种。在程序中可能会出现你未捕获到的异常,这就造成了崩溃。

日志应用

针对android:给一个apk文件,通过电脑在手机端可以熟练的操作log信息到一个具体文件。步骤如下:

a.在XX的目录下创建log.txt的记事本

b.adb logcat > log.txt,然后按下回车键

c.启动app,进行操作

d.操作完成,打开log.txt,里面会有很多日志信息直接过滤掉的日志信息:adb logcat | findstr 包名 > log.txt如图所示

android 判断手机是否是按钮屏_包名_26

Monkey

常见monkey命令

adb shell monkey 启动的命令
adb shell ps | grep monkey 查询monkey的pid,grep是针对苹果系统
adb shell ps | findstr monkey 查询monkey的pid,findstr是针对window系统
adb shell kill pid 停止monkey进程
adb shell monkey -v 10 10条随机事件
adb shell ps | findstr 被测试程序包名 获取进程ID
adb shell dumpsys meminfo 进程ID 获取内存信息
adb shell top -n 1 | findstr 进程ID 获取cpu消耗信息
adb shell dumpsys battery 获取电量信息
adb shell dumpsys gfixinfo 进程ID 获取GPU信息
adb shell cat /proc/pid/net/dev 获取流量信息
注:pid是在手机以及电脑上,任何运行的一个程序都是一个进程,每个进程都是有独立的pid。

1、测试app的过程中,出现了闪退,此时你会怎么办?

a.截屏/录频记录下闪退的交互

b.同样的操作操作的时候,使用adb logcat | findstr 包名 > log.txt,把错误日志信息重定向到日志文件里面

c.把录频的交互操作以及错误的日志信息,反馈给开发。

衍生知识:

1)adb logcat | findstr "packname"

只过滤查看某个具体package的错误信息

2)把错误的日志写到一个记事本里面,然后在记事本里面通过关键字的搜索来查询错误信息。把日志信息写到其他的文件,这个过程叫重定向

3)重定向的操作步骤:

a、在XX的目录下创建log.txt的记事本

b、adb logcat > log.txt,然后按下回车键

c、启动app,进行操作

d、操作完成,打开log.txt,里面会有很多的日志信息。

2、web测试与app测试的区别?

web与app测试的区别:

1)APP兼容性测试(不同平台,不同分辨率,不同厂商)

2)弱网络以及不同网络情况下APP的资源加载和异常处理

3)安装以及卸载,和增量更新这部分

4)APP专项方面的测试,比如:占用电量,流量,CPU和内存的资源

5、需要测试APP的CRASH与ANR(崩溃,卡死,闪退)

3、APP的稳定性测试你是怎么测试的?

APP的稳定性从两个维度考虑:

1)它作为客户端,能够很快速的从服务端获取数据,那么前提是服务端是稳定性的。

2)客户端本身的稳定性,比如不会出现崩溃,卡死,闪退,以及其他异常的信息,还有它的流畅度。那么使用monkey的测试工具来针对APP做各种随机性的操作,来验证是否会出现CRASH和ANR的情况。