1. APP测试基础
1-1. 灰度测试:先给一部分用户使用,通过用户反馈修复一些不足,再逐步放开客户群体
1-2. APP测试点:功能测试、安全测试、用户体验测试、交叉事件测试、兼容性测试、性能测试、
安装/卸载/升级测试、UI测试
1-3. App测试与web测试的区别
1. 系统架构:web端系统更新服务器,不需要更新客户端;APP更新了服务端,客户端也要更新并测试;
2. 兼容性:Web端要考虑不同的浏览器内核进行测试(IE、chrome、Firefox),
APP的兼容性要考虑选择主流的机型,不同的分辨率、尺寸, 以及不同的操作系统;
3. App要考虑交叉事件测试,安装,卸载,前后台切换测试;
4. App还要考虑界面操作,如:横竖屏切换,多点触控,事件触发区域。
1-4. 为什么要限速/模拟弱网?
主要是模拟app端(也包括pc端)在网速较低的情况下,是否有bug,对用户体验是否有影响。
2. ADB的使用
SDK 软件开发工具包
ADT Android Debug Tools
ADB Android Debug Bridge
ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备.
DOS窗口打开ADB
指定盘符位置按住shift键,右键打开命令窗口,切换到以下路径,输入adb验证是否可用
Andriod_SDK\platform-tools
或通过环境变量添加path路径,即...\Andriod_SDK\platform-tools,打开cmd,输入adb验证是否可用
2-1. 连接Android设备 adb connect 设备名 例如:adb connect 127.0.0.1:62001
常用模拟器(了解)
网易mumu模拟器:adb connect 127.0.0.1:7555
夜神模拟器:adb connect 127.0.0.1:62001/62025
蓝叠模拟器:adb connect 127.0.0.1:5555
雷电模拟器:adb connect 127.0.0.1:5555
逍遥模拟器:adb connect 127.0.0.1:21503
断开连接: adb disconnect 设备名
2-2. 查看设备 adb devices 查看当前连接到计算机的android设备
2-3. 安装软件 adb install 包名 将指定的apk文件安装到设备上(包名不要有中文)
adb install 路径\-release.apk 或先输入adb install,再将apk包拖到DOS窗口
若显示success,说明安装apk包成功,若显示Failure,则安装失败。
检查错误,排错后,再执行命令:abd install -r 包名.apk
2-4. 获取app的包名和activity名称
输入下面的命令后打开软件,查看cmp后面的值
adb logcat -v time | findstr START 脚本中,cmp= 后面的值就是 包名
Ctrl + C 退出
查看当前运行的APP的包名和打开的Activity
adb shell "dumpsys window | grep mCurrentFocus"
2-5. 卸载软件 adb uninstall 包名
获取包名(单个设备)
adb shell pm list packages -3 (3指的第三方)
获取包名(多个设备)
adb -s 设备名 shell pm list packages -3
2-6. 把本地文件上传到Android设备 adb push 本地文件路径 Android设备路径
例:把E:\android\test.txt 上传到安卓服务器的/storage/sdcard0/目录
adb push E:\android\test.txt /storage/sdcard0/
PS:文件管理器,依次进入storage/sdcard0,就能查看到刚才上传的文件
也可以使用命令adb shell,进入shell模式下,使用Linux命令查看,使用exit命令退出
注:只能上传文件,无法上传文件夹
2-7. 把Android设备的文件下载到本地 adb pull Android设备上的文件路径 本地路径
例:把安卓服务器的/storage/sdcard0/test.txt下载到本地磁盘中的E:\android\目录
adb pull /storage/sdcard0/test.txt E:\android
2-8. monkey的使用
启动软件并且触发500个事件 adb shell monkey -p your.package.name -v 500
如果正常跑完500次,会看到 Events injected: 500
如果后面的数字小于500,表示monkey中途失败了
延迟500毫秒,触发200个事件 adb shell monkey -p your.package.name --throttle 500 -v 200
( cls清屏 )
2-9. 使用monkey做回归测试
monkey命令还可以带-s参数,-s后面加上monkey上一次运行时候的产生seed值,
就可以让monkey重复上一次运行时的操作路径,从而实现回归测试。
例如跑30次,每次延时0.5秒:
adb shell monkey -p app-weichi-release.apk --throttle 500 -s 45544215878 -v 30
稳定性测试一般跑十万次就可以了
2-10. 测试期间收集logcat日志(logcat日志,记录了用户的在系统上的所有操作)
a. 先清空系统上原有的logcat日志:adb logcat -c
b. 把logcat日志重定向导入指定位置:adb logcat -v time > E:\share\logcat.log
如果monkey停止后,不需要收集日志了,则需要终止 Ctrl + C
2-11. 收集monkey日志
把monkey日志导入到E盘的share目录下的monkey.log文件中:
adb shell monkey -p your.package.name -v 500 > E:\share\monkey.log
2-12. ANR或crash异常
monkey运行过程中,可能会出现异常,一般有以下两方面原因:
1. 应用程序不响应(当系统5秒内无法响应用户输入事件,报application not responding,ANR);
系统出现类似这样的提示:APP提示无法响应,是结束进行还是继续等待
导致ANR的原因有:
a、线程堵塞; logcat日志搜索关键字anr或anr in
b、CPU不足;
c、内存不足。
2. 应用程序崩溃(crash)或接收到任何失控异常;
系统出现类似这样的提示:很抱歉,“xxx”已停止运行
导致crash的原因有:
a、程序存在空指针; (logcat日志搜索java.lang.NullPointerException)
b、数组越界; 比如list1=['a','b','c'], list1[6]是没有值的
c、CPU不足;
d、内存不足。(运行初期报Native crash,可能内存不足,monkey日志搜索Out of memory)
monkey在运行过程中出现异常停止的问题分析思路,参考:
《APP稳定性测试问题定位思路_monkey篇.docx》
补:ANR的跟踪日志在/data/anr/traces.txt文件里,把此文件下载下来给开发定位即可。
2-13. app问题定位:
a)当monkey日志运行次数小于设定次数,说明monkey运行中途挂了,打开logcat日志定位问题:
①如果能搜索到anr in,说明ANR无响应,把/data/anr/traces.txt文件取下来,
连同anr in旁边的进程号一起发给开发
②如果能搜索到nullpoint,说明crash崩溃,把日志截给开发定位
b)程序在运行初期报 Native crash ,可能是内存不足导致,日志关键词Out Of memory(简称OOM)
******************************************************************************************
3. 连接真机 安卓驱动下载:https://adbdriver.com/downloads/
步骤:手机连接电脑 → 安装驱动 → 连点7次版本号打开开发者选项 → 勾选USB调试 → 手机端允许授权
C:\Users\Administrator>adb devices
List of devices attached
727f22be device (有线,插线即连接)
C:\Users\Administrator>adb tcpip 5555
restarting in TCP mode port: 5555
C:\Users\Administrator>adb connect 192.168.0.9:5555
* daemon not running. starting it now at tcp:5037 *
* daemon started successfully *
connected to 192.168.0.9:5555
C:\Users\Administrator>adb devices
List of devices attached
192.168.0.9:5555 device (无线)
4.真机投屏
可使用scrcpy软件进行投屏,多设备时cmd进入scrcpy目录(或加环境变量),输入以下指令:
scrcpy -s 设备号1
scrcpy -s 设备号2
*********************************************************************************************************
5. APP测试常见问题
1. 当monkey异常终止,如何协助开发定位问题?
运行monkey做稳定性测试的同时,需要把应用的logcat日志取下来,monkey在运行中出现异常,一般是两种原因导致的,一个是crash,程序崩溃,一个是ANR,程序没有响应;
当monkey异常终止,就进入logcat日志,搜索关键字“anr in”,如果搜到了,说明出现了ANR异常,接下来把/data/anr/目录下的trace.txt文件取下来,将出现问题的进程号对应的日志发给开发定位;
如果没搜索到“anr in”关键字,就搜索“nullpointer”,存在该关键字,说明出现了CRASH异常,就把nullpointer异常关键字上下的日志发给开发定位。
2. App的性能测试怎么做的?
App的性能分为服务器端的性能和手机端的性能。
服务器端的性能,用Jmeter工具进行测试,和web的端性能测试方法一样的。
手机端App的稳定性测试,使用monkey跑10万次,如果出了问题,再定位原因,具体步骤是:
1、在跑monkey前,先清空手机的logcat日志:adb logcat -c
2、接下来,获取logcat日志:adb logcat -v time > E:\share\logcat.log
3、使用monkey运行被测应用:adb shell monkey -p 包名 -v 100000 > E:\share\monkey.log
4、测试完成后查看monkey日志,如果说它跑的次数跟我设的次数不一样.就说明monkey中途跑失败了。
查看logcat日志有没有nullpoint或anr in的关键字,
如果有nullpoint,表示app在测试过程中crash了,把nullpoint前后的日志截取下来,发给开发定位;
如果有anr in,表示app在测试过程中出现了ANR(程序无响应),
要把/data/anr/traces.txt文件取下来,再把ANR进程号对应的日志发给开发定位问题。
3. 如何判断前端还是后端的问题
一、客户端问题
1、文字,图片有误;
2、无法输入,按钮不可用;
3、抓包信息显示客户端发送的信息有误。
二、服务器端问题
1、通过抓包检查服务器返回的信息,如果信息有误,就可以断定是服务器的问题;
2、客户端向服务器发送信息后,服务器无响应。
4. 开发修复了问题,你怎么验证?(即monkey怎样做回归测试)
按照之前的轨迹(seed)去跑monkey,命令:adb shell monkey -p 包名 -s seed值 -v 次数
5. Android APP内存不足时,系统如何结束进程获得内存?
系统会自动杀掉长时间没被使用的进程来获得内存。
6. Android的四大组件是什么? Activity、Service、Broadcast Receiver、Content Provider
7. 你怎么做app测试的?
测试前,先熟悉app的原型图和业务需求,确定测试点,开发做完接口之后,先做接口测试,
App开发好后,先做一个冒烟测试,看看软件的基本功能是否可用,
如果正常,再做功能测试,UI测试,兼容性测试,交叉事件测试,安装卸载测试等。
8. 跑monkey时,app点了第三方链接跳转到其他应用时怎么办?
测试版的app,会让开发将跳转到其他应用的功能屏蔽了再测。
9. IOS的稳定性是怎么测试的,也是用monkey测试的吗?
monkey只能测试安卓系统的稳定性,苹果手机可以在testin云测试平台上租手机来测试。
10. APP的环境架构
一般情况下,APP的web应用服务器会采用Nginx,数据库采用MySQL。
但这要看情况,也有用tomcat等其他容器做web服务器的,数据库也有用oracle或其他类型的数据库。
一般访问量不大的app,一台web服务器,一个数据库服务器就够了,
访问量大,安全性要求高的,服务器会多些。
11. App测试前的准备工作?
测试任务开始前,检查各项测试资源、产品功能需求文档、产品原型图、测试设备(手机)
12. 一个购物系统,弱网环境下,点击下单按钮,没有响应,再次点击,下了两次单?
原因:第一次的请求返回较慢,但服务已经处理成功。
解决方法:在数据加载过程中,设置加载进度提示,把页面对外暴露的控件置为“不可操作”状态,当数据加载完再释放。
或者做防抖,就是指触发事件后在单位时间内只能执行一次动作,如果在单位时间内又触发了事件,则会重新计算动作执行时间。
类似的还有节流,就是指连续触发事件,但是在单位时间内只执行一次动作。
(https://www.jianshu.com/p/c8b86b09daf0)
13. H5怎么测试?(用html5开发的APP)
H5开发的app就是web app,用手机浏览器就能打开,不管是什么类型的app,
都根据app的八大测试点来测试就对了,某些具体的测试点和原生app会不一样,
比如,兼容性测试,就要考虑在不同手机系统的浏览器下进行测试。
14. 云测试平台介绍
现在在企业中做APP的兼容性测试,安全测试,自动化测试,越来越倾向于使用商用的云测试平台,平台有大量的真实机器供有偿使用,且价格相对低廉。比较好的云测试平台有testin云测平台
15. 怎么知道应用崩溃是不是内存不足导致的?
程序在运行初期报 Native crash ,可能是内存不足导致的。logcat日志关键词Out Of memory