APP测试白皮书
<h2>app测试检查点</h2>
<p>APP测试主要采用真机、模拟器、云测试平台三种,现在市场主流采用的是真机测试,APP测试的基本流程:</p>
<p>1.<strong>接收版本测试</strong></p>
<pre><code>接收到开发送测的apk包,并检查apk的版本是否准确,防止误测,然后开始在测试环境开展APP的相关测试工作</code></pre>
<p>2.<strong>UI测试</strong></p>
<pre><code>页面是否美观;
文字是否正确;
文字图片组合是否完美,操作是否友好;
菜单,对话框,窗口,控件布局是否满足客户要求;
手机横屏竖屏旋转是否展示正常等;</code></pre>
<p>3.<strong>功能测试</strong></p>
<pre><code>核对需求文档、进行基本功能测试
边界分析测试
重点考量异常点的发散、数据的验证(APP端提交,后台的查询是否一致)</code></pre>
<p>4.<strong>兼容性测试</strong></p>
<pre><code>取市场主流的手机进行测试
不同的操作系统
不同的分辨率
不同的尺寸
不同厂家的品牌机型</code></pre>
<p>5.<strong>稳定性测试</strong></p>
<pre><code>在APP测试中crash和ANR出现的情况时有发生,我们可以采用工具monkey,使用ADB命令进行相关测试,检查是否有crash和ANR的出现,通过查看日志文件来定位相关bug,下面是几个ADB常用的命令:
adb shell monkey -p im.tower.plus.android -v --throttle 3000 30 为每一次执行一次有效的事件后休眠3000毫秒
adb shell monkey -p 软件包名 -s 种子值–忽略项–运行日志的详细度( -v -v–v最详细的 )-运行间隔(毫秒)-运行次数 > 运行日志导出的路径;
adb devices #查看电脑上的有多少台手机设备(包括模拟器),获取设备列表及设备状态;
adb install <apk格式的包名> #安装
adb uninstall <apk格式的包名> #卸载
adb shell进入Linux系统 #查看系统中安装的所有软件的包名
adb shell ps/top #查看当前终端中的进程信息,如PID进程等;
adb shell monkey # 跑monkey是android自动化测试的一种手段,所谓monkey测试就是模拟用户的按键输入,触摸屏输入,手势输入等压力测试,来测试android app的稳定性。
monkey -p com.yourpackage -v 500 简单的输出测试的信息
monkey -p com.yourpackage -v -v -v 500 以深度为三级输出测试信息
monkey -p com.yourpackage --port 端口号 -v 为测试分配一个专用的端口号,不过这个命令只能输出跳转的信息及有错误时输出信息。
monkey -p com.yourpackage -s 数字 -v 500 为随机数的事件序列定一个值,若出现问题下次可以重复同样的系列进行排错;
adb shell kill [PID] #关闭该PID进程:进行进程列表查看时,每个运行的内容都有一个PID值;
adb shell dumpsys meminfo<package_name> #查看该包名应用当前的内存使用状态</code></pre>
<p>6.<strong>性能测试</strong></p>
<pre><code>测试APP在不同网络速度下操作的流畅程度(FPS)
测试APP操作数据库的性能
压力测试
资源消耗(CPU 测试 内存 流量 )</code></pre>
<p>7.<strong>弱网测试</strong></p>
<pre><code>通过工具fiddler或360WiFi模拟各个网络的情况下,APP的数据交互、功能使用、用户体验等情况是否满足需求
也可以通过在楼梯口或地铁上或空旷,网络信号不好的地方,更加真实模拟场景来达到弱网测试</code></pre>
<p>8.<strong>异常中断测试</strong>
如来电,短信,低电量测试等
还要注意硬件设备,如:待机,插拔数据线,耳机等操作会不会影响到操作
异常性测试:断网,断电测试</p>
<p>9.<strong>安全测试</strong></p>
<pre><code>权限问题:是否允许访问相册,拍照,录音,定位,接收推送消息
数据库隐私,加密查看数据传输是否加密(fiddler)
隐藏泄露风险:包括访问手机信息,访问联系人信息等
一般对于大多数非支付类App来说,安全性不是一个特别大的问题,只需保证登录鉴权的安全性即可
是否可以暴力破解密码---解决办法:密码输入错误次数受限或者需要手机验证码登录(自动化)
是否可以撞库--解决方式:定期修改密码 + 密码输入错误次数受限或者需要手机验证码登录</code></pre>
<p>10.<strong>推送测试</strong></p>
<pre><code>默认开关应该是打开的状态
未锁屏时,后台运行,消息推送是否可以正常接收
未锁屏时,app客户端使用的过程中,可以看到消息提醒并可查看
手机消息栏是否可以显示消息并且提醒,且点击查看,点击后消息在消息栏后不显示
检查Push消息是否按照指定的业务规则发送
检查不接收推送消息时,用户不会再接收到Push消息
如果用户设置了免打扰的时间段,检查在免打扰时间段内,用户接收不到Push,在非免打扰时间段内,用户能正常收到Push
当Push消息是针对登录用户的时候,需要检查收到的Push与用户身份是否相符,没有错误的将其他人的消息推送过来。一般情况下,只对手机上最后一个登录用户进行消息推送
退出登录后,是否还接收消息(根据需求来)</code></pre>
<p>11.<strong>安装与卸载测试</strong></p>
<pre><code>应用是否在andriod不同系统版本上能够进行安装,运行
在安装过程是否可以取消
取消安装,再次安装是否正常
安装空间不足是否提示
安装过程中网络断开的情况下是否提示
安装过程中 来电 短信 闹铃 完成后是否提示
安装后是否正常运行,安装后的文件是否写入到指定的的目录里
重复安装,是否提示
安装完成后自动删除包装包
从不同的应用市场下载进行安装
卸载取消,是否能能够取消成功</code></pre>
<p>12.<strong>升级测试</strong></p>
<pre><code>当客户端有新版本时,有更新提示。
当版本为非强制升级版时,用户可以取消更新,老版本能正常使用。用户在下次启动App时,仍出现更新提示
当版本为强制升级版时,但给出强制更新后用户没有做更新时,退出客户端。下次启动App时,仍出现强制升级提示
当客户端有新版本时,在本地不删除客户端的情况下,直接更新检查是否能正常更新
当客户端有新版本时,在本地不删除客户端的情况下,检查更新后的客户端功能是否是新版本
当客户端有新版本时,在本地不删除客户端的情况下,检查资源同名文件如图片是否能正常更新成最新版本
在线跨版本升级后是否能够正常使用</code></pre>
<p>13.<strong>离线测试</strong></p>
<pre><code>很多应用会支持离线浏览,即在本地客户端会缓存一部分数据供用户查看
在无线网络情况可以浏览本地数据
对于离线(无网络)时,刷新获取数据时,不能获取数据时是否能够给出友好提示
对于界面数据不提供离线查看,需要给出相应的提示
退出App再开启App时能正常浏览
切换到后台再回到前台可以正常浏览
锁屏后再解锁回到应用前台可以正常浏览
在对服务器段的数据有更新时回给予离线的相应提示
离线后连接到网络,是否需要从服务端获新数据</code></pre>
<p>14.<strong>前后台切换测试</strong></p>
<pre><code>App切换到后台,再回到App,检查是否停留在上一次操作界面
App切换到后台,再回到App,检查功能及应用状态是否正常
App切换到后台,再回到前台时,注意程序是否崩溃,功能状态是否正常,尤其是对于从后台切换回前台数据有自动更新的时候
手机锁屏解锁后进入App注意是否会崩溃,功能状态是否正常,尤其是对于从后台切换回前台数据有自动更新的时候
当App使用过程中有电话进来中断后再切换到App,功能状态是否正常
当关掉App进程后,再开启App,App能否正常启动
出现必须处理的提示框后,切换到后台,再切换回来,检查提示框是否还存在,有时候会出现应用自动跳过提示框的缺陷
对于有数据交换的页面,每个页面都必须要进行前后台切换、锁屏的测试,这种页面最容易出现崩溃
对于有数据的交换的页面,每个页面都必须进行前后台切换,锁屏,网络切换,app切换,电话切换,断电切换等中端的测试</code></pre>
<p>15.<strong>输入法测试</strong></p>
<pre><code>点击输入框弹出输入法
输入框弹出高度等于输入法弹出高度
输入框不能移动
点击输入法其他区域隐藏输入法
点击输入法的隐藏键隐藏输入法
切换到其他页面自动隐藏输入法
发送字符后自动隐藏输入法
弹出输入法后切换到横屏,输入法没有隐藏
弹出输入法后切换到竖屏,输入法没有隐藏</code></pre>
<p>16.<strong>夜间模式测试</strong></p>
<pre><code>打开app,调整系统为夜间模式,观察手机是否变暗
关闭夜间模式,手机是否恢复明亮
横竖屏切换夜间模式
白天、黑夜及横竖屏组合切换夜间模式</code></pre>
<p>17.<strong>横竖屏切换测试</strong></p>
<pre><code>关闭自动旋转功能,打开app,改变手机重心,观察屏幕变化
打开自动旋转功能,打开app,改变手机重心,观察屏幕变化
横竖屏切换时,观察手机界面ui有无特殊变形
横竖屏切换后,其他功能是否正常</code></pre>
<p>18.<strong>自定义字体测试</strong></p>
<pre><code>手机系统设置为自定义字体,观察app弹出输入法时字体是否为自定义字体。(有的app自带输入法)
手机系统切换输入法字体,观察app弹出输入法时是否正确。
安装新的输入法,手机系统设置为新的输入法,观察app弹出输入法
卸载已定义的输入法,观察app输入法是否为系统默认输入法
输入法升级后,有无兼容性问题</code></pre>
<p>19.<strong>上报测试</strong></p>
<pre><code>crash上报,通过查看后台,crash数是否对应增加
埋点上报,通过在埋点处点击一次或者多次,查看后台,观察埋点数是否对应增加</code></pre>
<p>20.<strong>离线测试</strong></p>
<pre><code>很多应用会支持离线浏览,即在本地客户端会缓存一部分数据供用户查看
在无线网络情况可以浏览本地数据
退出App再开启App时能正常浏览
切换到后台再回到前台可以正常浏览
锁屏后再解锁回到应用前台可以正常浏览
在对服务器段的数据有更新时回给予离线的相应提示</code></pre>
<p>21.<strong>免登录测试</strong></p>
<pre><code>很多应用提供免登陆功能,当应用开启时自动以上一次登录的用户身份来使用App
考虑无网络情况时能否正常进入免登录状态
切换用户登陆后,要校验用户登录信息以及数据内容是否相应更新,确保原用户退出
根据Mtop的现有规则,一个账户只允许登陆一台机器。所以,需要检查一个账户登录多台手机的情况。原手机里的用户需要被退出,给出友好提示
密码更换后,检查有数据交换时是否进行了有效身份的校验
支持自动登录的应用在进行数据校验时,检查系统是否能自动登录成功并且数据操作无误
检查用户主动退出登录后,下次启动App,应停留在登录界面</code></pre>
<p><strong>备注</strong></p>
<pre><code>测试若有问题及时反馈开发并进行跟踪bug,直至bug修复及相关模块不受影响
再进行正式环境进行测试,输出测试报告等测试文档
当然测试过程中可以适当根据项目的时间需求进行改善测试的流程,分别可以考虑敏捷测试和常规测试或TDD测试模式,一切以保障产品质量为导向</code></pre>
<p><strong>Android和iOS的区别</strong></p>
<pre><code>两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。
Android长按home键呼出应用列表和切换应用,然后右滑则终止应用;
多分辨率测试,Android端20多种,ios较少;
手机操作系统,Android较多,ios较少且不能降级,只能单向升级;新的ios系统中的资源库不能完全兼容低版本中的ios系统中的应用,低版本ios系统中的应用调用了新的资源库,会直接导致闪退(Crash);ANR
操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;
push测试:Android:点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正确跳转;ios,点击home键关闭程序和屏幕锁屏的情况(红点的显示);
安装卸载测试:Android的下载和安装的平台和工具和渠道比较多,ios主要有app store,iTunes和testflight下载;
升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号),对于Android若有内置的应用需检查升级之后内置文件是否匹配(如内置的输入法)
并发(中断)测试:闹铃弹出框提示,另一个应用的启动、视频音频的播放,来电、用户正在输入等,语音、录音等的播放时强制其他正在播放的要暂停;
数据来源的测试:输入,选择、复制、语音输入,安装不同输入法输入等;
push(推送)测试:在开关机、待机状态下执行推送,消息先死及其推送跳转的正确性;应用在开发、未打开状态、应用启动且在后台运行的情况下是push显示和跳转否正确;推送消息阅读前后数字的变化是否正确;多条推送的合集的显示和跳转是否正确;
分享跳转:分享后的文案是否正确;分享后跳转是否正确,显示的消息来源是否正确
触屏测试:同时触摸不同的位置或者同时进行不同操作,查看客户端的处理情况,是否会crash等</code></pre>