如下问题:
Crash
设备兼容
流量使用过多
APP 导致用户手机电量消耗过快
在不同网络情况下不稳定,比如 卡死 和 白屏的问题
针对某个特殊方面或者问题的,称之为 专项测试
如 兼容性测试,流量测试, 电量测试, 弱网络测试, 稳定性测试, 安全性测试 和 环境相关的测试
一 兼容性测试
也是功能性测试,只不过侧重在不同的软硬件环境
1 环境准备
针对APP通常会考虑:
OS version , 屏幕分辨率 , 不同厂家的ROM,网络类型
2 基于 UI 自动化脚本的云测试方案
如 Testin
二 流量测试
流量的消耗: 用户的操作, 后台【即 用户没有直接使用情况下的流量消耗】
1 Android App 特有的流量测试方法
a) 基于 系统自带的 统计功能
proc/uid_stat/[UID] /tcp_snd
proc/uid_stat/[UID]/tcp_rcv
2 IOS APP 特有的流量测试方法
a) 通过 Instruments 自带的 Network 来查看网络流量
3 通用的流量测试方法
手机上抓包
windows 【 Wireshark】 , Linux 【 tcpdump 】 , Android 【tcpdump 】
tcpdump -s 0 -w t1.pcap -v
基于 WiFi 代理的方式,获取流量数据
自动化流量统计方案:
通常会使用 Fidder 工具 进行HTTP 抓包,并进行手动分析
4 常见的流量节省的办法
数据的压缩, 不同数据格式的采用, 控制访问的频次, 只获取必要的数据
缓存 【需要,控制缓存的有效期和更新策略】,针对不同的网络类型设计不同的访问策略
三 电量测试
1 Android 电量测试方法
1) 基于 硬件的测试方案, 可以较为 精确的测试手机的电量消耗情况
GSam Battery Monitor Pro 查看 电量消耗
2) 借助一个第3方APP 来 评估手机上 各个APP的电量消耗
2 IOS 电量测试方法
四 弱网络测试
当 网络环境复杂的时候,App 才暴露的一些 问题
1 借助手机自带的网络状况模拟工具
主要针对 ios , 对 android 的 支持不好
2 基于代理的弱网络的模拟
Windows 下的 Network Delay Simulator
Mac 下的 Network Link Conditioner
五 稳定性测试
1 基于 Monkey 的稳定性测试
Monkey 是 Android 系统自带的 , 由 Java 编写的,在 Android 中的 路径 /system/framework.monkey.har
shell 程序的位置 /system/bin/monkey
monkey -p APP_NAME -v 显示 执行时的信息 COUNT 发送的 事件数目
monkey 可以 模拟: APP click , 滑动,key-input, 还模拟了各种手机系统的操作, 调整音量,打开通知栏,改变网络状态,锁屏
monkey 测试停止条件,主要有
1) 执行次数到了
2) 如果限定了 Monkey 运动在一个 或者几个 特定的包上,当监测到试图转到 其他的包的操作, 会对其进行终止
3) Application 崩溃或者接收到任何失控的异常, Monkey 将 停止并且报错
4) Application 发生了 ANR 【 应用程序不响应】的错误, Monkey 将停止 并且报错
【NOTE】 MonkeyRunner 和 Monkey 并无任何关联
MonkeyRunner 是一个 工具包,提供了 一些API,可以在 Android 代码之外,控制 Android 设备和模拟器,相比 Monkey 不可控的模拟事件, MonkeyRunner 可以通过自己的代码,来启动APP,控制发送模拟的击键操作
Android ANR 是一个比较容易 遇到的 稳定性问题, 当 APP 遇到以下两种情况之一时,会发生 Application Not Responding
a) 输入事件 5 秒内未响应完成, 如 点击屏幕,按键等操作
b) BroadcastReceiver 10 秒内 未 执行完毕
常见的造成 ANR 的原因之一,就是 在 主线程执行了 耗时过长的操作
Android ANR 的日志 存放在 /data/anr/traces.txt
包括了 App 每个线程的 堆栈信息, developers 可以通过 这个文件,进行排查
3 基于 模糊测试 思路的 稳定性测试方法的探索
借鉴了 模糊测试 Fuzzing Test 的 思想,模糊测试 常常用户 做 安全性测试,发掘安全漏洞
六 安全测试
1 安装包测试
1) 能否反编译代码 ,
使用 dex2jar 工具 结合 jd-gui 工具查看 源代码
2) 安装包是否签名
ios 无需考虑
Android 没有此类检查, 需要在发布前 校验一下 签名使用的 key 是否正确, 以防被恶意的第三方应用覆盖安装等问题
check : jarsigner -verify -verbose -certs apk包路径
3) 完整性校验
check 安装包的 md5 值,可以自动化
4) 权限设置检查
Android 平台上,我们可以 直接检查manifest 文件来 读取 应用所需的全部权限
IOS 则是在 APP 使用到其他权限的时候,才会提示
2 敏感信息测试
1) 数据库是否存储 敏感信息
比如 cookie 保存到 数据库中, 别人 捡到手机,信息将会丢失
一般, 敏感信息 需要在 用户注销操作后 删除,如 , cookie 类数据,建议设置合理的 过期时间
2) 日志中是否存在 敏感信息
3) 配置文件是否存在敏感信息
3 软键盘劫持
比如金融 APP, 不能使用 第三方软键盘, 而应该使用,应用中 自带的 软键盘
4 账户安全
对于账户的安全性,我们一般需要 关注一下几点
1) password
2) policy
3) session
4) logout
5 数据通信安全
6 组件安全测试
Android 平台的各个组件 是否能被 外部应用 恶意 调用,从而带来一些安全问题 , 包括 Activity , Service , ContentProvider , Broadcase 等等, 采用的测试方法,是通过 使用 drozer 工具 + code
1) 服务端接口测试
SQL, XSS , CSRF , 越权
7 环境相关的测试
比如 有些APP 会用到 摄像头,加速感应等硬件
1) 干扰测试
收到 电话,短信,通知栏信息,无电提示框弹出,第三方软件告警框弹出
2) 权限测试
用户禁止了某些 权限,会导致 UI不友好 ,程序 崩溃
3) 边界情况
手机 本身的环境
可用 存储空间减少, 没有SD卡/双 SD卡,飞行模式,系统时间有误,第三方依赖
4) Android 定位测试
白盒方式 由于定位代码 最终获取的是一个位置对象,我们只需要在 获取到位置对象后,手动设置 经度纬度进行测试
模拟器 模拟