功能测试点
用户使用习惯
权限问题
硬件问题
比如双卡双待、摄像头、GPU等。
操作习惯
用户常用的有菜单键、Home键、返回键、Home键长按(显示当前进程列表)、调整音量、待机等。相应的作为测试工程师我们需要考虑的项就变成了:
• 应用中的Back键的事件是否重写了?在各个功能界面中点击Back键会有什么反馈?
• 用户在应用各个界面点击Home键之后,再次打开应用的反馈:应用是默认处于后台的状态还是有结束生命周期。
• 应用是否使用到菜单键,切不可遗漏这个按键和应用的交互。
• 应用在任何状态下,系统进入待机或者关机。当系统被重新唤醒后,应用处于什么状态,是否有正确的反馈。
• 应用进程被用户手动关闭之后,是否可以再次正确启动。
APK(全称:Android application package,
数据移动
用户会在软件没有响应或者出现重大缺陷时,点击强制停止按钮。或者在手机变卡后选择清空数据来是否自己机器的空间。
安装&卸载测试
用户安装方式主要有:
• 使用adb install <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环境变量,点击确定即可。
apk的卸载与安装
针对android:给一个apk文件,通过电脑在手机端可以熟练的安装和卸载 eg1:开发给一个 weibo.apk文件,测试人员通过cmd命令,进入到apk的路径,输入adb install [APK路径]命令来进行安装,如下图所示
1、adb shell
logcat ps | grep 包名
⽇志
常用错误日志信息
空指针: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
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)把错误的日志写到一个记事本里面,然后在记事本里面通过关键字的搜索来查询错误信息。把日志信息写到其他的文件,这个过程叫重定向。
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(崩溃,卡死,闪退)