1.app测试和web测试有什么区别?
从测试流程上来说没有区别,都需要进行测试计划设计,用例设计,用例执行,缺陷管理;测试类型基本相似,都需要进行功能测试,性能测试,安全测试,GUI测试等。
主要区别在于具体的测试的细节和方法不同:
兼容性测试:web端兼容的是不同种类浏览器,比如chrome,firefox,safari,ie等;手机端兼容的是不同品牌,不同分辨率的手机;web兼容性测试的工具用IETester,app兼容性测试的工具用 Testin。
app测试需要进行专项测试:网络测试,流量测试,耗电量测试,安装卸载及升级测试,交叉时间和push消息测试,操作类型测试等
1.1交叉时间和push消息测试需要考虑那些方面:
参考:App测试点之交叉时间测试、push消息测试 - 木子~* - 博客园
1.2安装卸载和升级测试:
手动安装,卸载app测试;
如果服务端做了修改,客户端app的核心版本需要进行回归测试;升级测试的提醒机制,升级取消是否影响原有功能的使用,升级成功后用户数据是否被保留。
1.3操作类型测试:
横屏测试,手势测试
1.4网络测试:
移动网络与wifi切换测试;测试弱网所造成 的用例体验,重点考虑回退和刷新是否造成二次提交
1.5流量测试:
1.6耗电量测试:
2.对于 Android 和 iOS 两个系统来说,测试同一款 APP,又有哪些区别呢?
App测试中Android和IOS测试区别-从系统和内核角度分析(转载+总结)_瓜瓜的测试日志-CSDN博客_app测试android和ios的区别
6.app出现ANR,是什么原因导致的?
Android App开发之ANR异常的原因分析及处理总结_白色枫车-CSDN博客_app出现anr的原因
Application Not Responding,也就是应用程序无响应。如果App在特定时间无法相应屏幕触摸或键盘输入事件,或者特定事件没有处理完毕,就会出现ANR。
- Service Timeout:比如前台服务在20s内未执行完成,后台服务在200秒内没有执行完毕。
- BroadcastQueue Timeout:比如前台广播在10s内未执行完成,后台广播在60秒内没有执行完
- ContentProvider Timeout:ContentProvider的publish在10s内没进行完
- InputDispatching Timeout: 屏幕触摸或输入事件响应超过5秒
ANR产生的原因:
主线程执行耗时操作,比如访问网络,访问数据库,执行大量的读写操作等
service binder数量达到上限;system server发生了watchDog ANR;service忙导致超时无响应
其他线程持有锁,导致主线程等待超时;其他线程终止或崩溃,导致主线程等待超时。
其他进程占用CPU,导致本进程得不到时间片,比如其他进程频繁进行读写操作。
12.列举常见的 adb 命令
1.查看当前连接的设备:adb devices
登录终端设备 shell:adb shell
2.启动adb服务: adb start-server
关闭adb服务: adb kill-server
3.安装软件:adb install 路径\xx.apk
卸载软件:adb uninstall 路径\xx.apk
4.从电脑上发送文件到设备:adb push <本地路径> <远程路径>
从设备上下载文件到电脑:adb pull <远程路径> <本地路径>
5.启动 APP 启动;adb shell am start -n 包名/activity;
关闭 app 语法:adb shell am force-stop 包名;
6.实时获取日志:adb logcat > D:\mylog.log;
清除缓存日志:adb logcat -c
7.监控 APP 启动时间 adb shell am start -W packageName/activity;
13.Monkey基础知识
Monkey是Android系统自带的命令行工具,使用Monkey对应用程序进行压力测试,检查和评估被测应用程序的稳定性。
Monkey向系统发送伪随机的用户事件,模拟用户的按键输入,触摸屏输入,手势输入等,从而对正在运行的应用程序进行压力测试,看设备多长时间会产生异常,并观察系统的稳定性和容错性能。
1)如果应用程序崩溃或接收到任何失控异常,Monkey将记录对应的错误日志,根据输入的命令判断继续运行还是停止运行
2)如果应用程序出现ANR的错误,Monkey将记录对应的错误日志,根据输入的命令判断继续运行还是停止运行
monkey的启动命令: monkey [参数配置项] <执行的事件数>
mokey停止方法:杀掉monkey进程,具体方法:
adb shell ps |grep monkey获取monkey进程ID;
adb shell kill pid杀死monkey进程
1)日志级别配置参数:
-v除启动提示,测试完成和最终结果之外,提供较少信息
-v -v提供较信息的测试信息
-v -v -v提供更加详细的测试信息
2)事件类型和频率配置参数
-s <伪随机数生成器种子值> 相同的种子值再次运行monkey,将产生相同的事件序列
--throttle <毫秒数> 事件之间的延迟事件
--pct touch <百分百> 触摸事件百分比,屏幕某个单一位置的down-up事件
--pct montion<百分百>动作事件百分比,屏幕某处一个down事件,一系列伪随机事件和一个up事件
--pct rotation<百分百>屏幕旋转事件百分比
--pct flip<百分百>键盘事件百分比,点击输入框,键盘弹起,点击输入框以外区域,键盘收起
--pct syskeys<百分百>系统按键百分比,home键,回退键,音量键
3)约束限制类参数
-p 包名
-c 类别名,如果不指定,将选择下列类别中的Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY
4)调试类参数
--hprof 将monkey执行前后的内存快照存放在data/misc目录,通过对比monkey执行前后的内存快照文件,协助定位内存泄漏问题
获取monkey执行过程中是否有内存泄漏
adb shell dumpsys meminfo <进程名>
获取monkey执行过程中cpu消耗信息
adb shell top -n 1 |find "进程名"
获取monkey执行过程中电量信息
adb shell dumpsys battery
获取monkey执行过程中流量信息
adb shell cat /proc/uid_stat/<被测应用uid>/tcp_rcv
获取应用uid方法:
adb shell ps |grep <被测应用包名>
adb shell cat /proc/$pid/status
获取当前应用包名:
adb shell dumpsys window | findstr mCurrentFocus
获取monkey执行过程中GPU信息
adb shell dumpsys gfxinfo <进程名>
Monkey运行日志分析
将monkey运行日志保存在monkey.txt,将异常日志保存在error.txt
adb shell monkey [option] <count> 1>/sdcard/monkey.txt 2>/sdcard/error.txt
Monkey运行输出日志包含4类信息:测试命令信息,伪随机事件信息,异常信息,执行结果信息
Monkey执行过程中常见错误类型:应用程序无响应ANR,闪退Crash,通过搜索日志中ANR和crash关键字,定位错误原因。
常见的Crash错误有:NullPointerException,ArrayIndexOutOfBoundsException,ClassNotFoundException,ArithmeticException,IllegalArgumentException,FileNotFoundException,NumberFormatException,StackOverflowError,OutOfMemoryError
13.app测试的工具