【Android】测试方法汇总,助力打造完美应用
目录
- Log 打印日志
- Junit 单元测试
- Debug 断点调试
- Monkey 压力测试
- Profiler 性能分析器
- ADB 无线连接设备
- Appium 自动化测试
- BlockCanary 界面卡顿检测
- App Inspection 应用程序检查
- Database Inspector
- Network Inspector
- Background Task Inspector
- Leakcanary 内存泄漏(ML)、内存溢出(OOM)检测
Log 打印日志
使用android.util
包的Log
打印日志,应该是个Android
开发人员都知道的吧,通过调用Log
的v
、d
、i
、w
、e
等方法可使日志在Logcat
控制台打印。Log
在Logcat
控制台所打印日志String.length
超过4061
,length
从4062
起,将不再打印日志,缺少的日志不会显示在Logcat
控制台。
针对这个问题,推荐使用logger组件
1、导入项目
implementation 'com.orhanobut:logger:2.2.0'
2、初始化
Logger.addLogAdapter(AndroidLogAdapter())
3、使用
Logger.d("hello")
通过logger
打印的日志length
大于4061
,会自动换行在4062
继续打印。
Junit 单元测试
单元测试是应用程序测试策略中的基本测试,通过对代码进行单元测试,可以轻松地验证单个单元的逻辑是否正确,在每次构建之后运行单元测试,可以帮助您快速捕获和修复因代码更改(重构、优化等)带来的回归问题。
系列文章:
Android 单元测试只看这一篇就够了
Android单元测试(一):前言
Android单元测试(二):什么是单元测试
Android单元测试(三):测试难点及方案选择
Android单元测试(四):JUnit介绍
Android单元测试(五):JUnit进阶
Android单元测试(六):Mockito学习
Android单元测试(七):Robolectric介绍
Android单元测试(八):怎样测试异步代码
Debug 断点调试
Debug
断点调试,在需要测试代码所在行左侧打好断点,连接设备后只需要点击Android Studio右上角菜单栏的Debug app
或启动应用后点击Attach Debugger to Android Process
即可开启断点调试。
Debug
不仅仅可以进行断点测试,还可以在for
循环指定断点的变量值,在if
修改指定判断的值。
具体使用详情可参考以下文章
1、Debug your app
2、Android 调试实战与原理详解
其它文章参考
1、Debug web apps
2、Debug WorkManager
Monkey 压力测试
Monkey
是一个在模拟器或设备上运行的程序,可生成伪随机用户事件(例如点击、轻触或手势)流以及很多系统级事件。可以使用Monkey
以随机且可重复的方式对正在开发的应用进行压力测试。
Monkey
的使用基于ADB
,通过ADB
的shell
脚本执行Android系统命令。你可以使用计算机上的命令行启动Monkey
,也可以通过脚本启动。由于Monkey
在模拟器/设备环境中运行,因此必须从该环境中通过shell
启动它。为此,可以在每个命令前面加上 adb shell
,或者直接进入shell
并输入Monkey
命令。
Monkey
在运行时会生成事件并将其发送到系统。它还会监视被测系统并查找三种特殊情况:
- 如果您已将
Monkey
限制为在一个或多个特定软件包中运行,它会监视并阻止转到任何其他软件包的尝试。 - 如果应用崩溃或收到任何未处理的异常,
Monkey
会停止并报告错误。 - 如果应用生成“应用无响应”错误,
Monkey
会停止并报告错误。
基本使用:
adb shell monkey -p your.package.name -v number.of.events
Monkey
不仅仅可以使用生成伪随机用户事件,还可以指定用户事件触发位置,详情请看:
1、UI/Application Exerciser Monkey
2、Android自动化测试入门(一)Monkey和MonkeyRunner
3、【极客学院】 Android 测试
4、Android 查看apk包名、当前Activity名等
Profiler 性能分析器
Android Studio 3.0 及更高版本中的 Android Profiler 取代了 Android Monitor 工具。Android Profiler 工具可提供实时数据,帮助您了解应用的 CPU、内存、电池资源使用情况。
Profiler
使用教程:Android Profiler
Android Studio 3.0 利用 Android Profiler 测量应用性能
ADB 无线连接设备
为什么要介绍ADB
?ADB
不就是一个无线连接设备吗?用数据线连接设备不是更稳定吗?为什么要使用ADB
?
ADB
的全称为Android Debug Bridge
,就是可以起到调试桥的作用。
ADB
可以在局域网内通过IP地址连接到设备,使得Android Studio可以通过它对设备的应用进行安装调试等一系列设备操作,但网络不稳定可能会出现时不时连接中断的情况。
手机使用数据线连接设备相对于ADB
来说更便捷,Android 11+ 的设备还可以通过扫码进行无线连接。但这种情况是相对于小型设备和有相机扫码且系统版本Android 11+的设备来说的。一些厂家魔改的Android设备是没有Type-c接口,部分设备可能会有相机,但Android版本大于10的设备少之又少,而TV设备呢,既没有Type-c接口,也没有相机,这时候要想安装设备并调试应该只剩下ADB
这一条路可以走了。
关于ADB
连接设备调试,可以看我的文章:ADB无线连接Android设备
另外,华为的HDB
也是可以通过使用ADB
进行连接的。
Appium 自动化测试
Appium
是一个开源测试自动化框架,用于原生、 混合和移动 Web 应用程序的自动化测试。
关于Appium
连接设备调试,可以看我的文章:App自动化测试 —— Appium的使用
对我个人而言,Appium
的局限性还是蛮大的,与Monkey
相比,执行效率较慢,操作较为繁琐,且小型项目不适合使用Appium
进行测试。
除了以上的Appium
、Monkey
以外,还有很多很多的自动化测试工具供大家挑选,Google
力推的Espresso
也是个不错的自动化测试框架,缺点就是要写代码…感兴趣的可以了解一下:Android自动化测试入门(三)Espresso
BlockCanary 界面卡顿检测
BlockCanary
是Android平台的一个非侵入式的性能监控组件,应用只需要实现一个抽象类,提供一些该组件需要的上下文环境,就可以在使用应用之时检测主线程上的各种卡慢问题,并通过组件提供的各种信息分析出卡顿原因。
BlockCanary
的使用极其简单,仅需在build.gradle
导入依赖,接着初始化即可。
dependencies {
implementation 'com.github.markzhai:blockcanary-android:1.5.0'
// 仅在debug包启用BlockCanary进行卡顿监控和提示的话,可以这么用
// debugImplementation 'com.github.markzhai:blockcanary-android:1.5.0'
// releaseImplementation 'com.github.markzhai:blockcanary-no-op:1.5.0'
}
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
BlockCanary.install(this, BlockCanaryContext()).start()
}
}
如果有需要上传卡顿日志、调整卡顿阈值等一系列需求,可以通过继承BlockCanaryContext
类重写相关method
实现。
将代码运行至设备上,发生主线程阻塞之时,顶部通知栏会显示一条阻塞通知,点击即可观看阻塞详情。如下图MainActivity 16行代码主线程出现了阻塞1008ms的问题。
注意:部分Android版本安装
BlockCanary.install(this, BlockCanaryContext()).start()
安装程序会出错,出错建议换个设备测试。
详情请看:AndroidPerformanceMonitor
App Inspection 应用程序检查
App Inspection
位于Android Studio底部的菜单栏,通过App Inspection
,Android API 26及以上设备在运行时可观察Database
、Network
、Background Task
的相关数据。
Database Inspector
Database Inspector
用于观察本地数据库数据。
具体详情可参考:使用 Database Inspector 调试数据库
Network Inspector
Network Inspector
用于观察网络请求相关数据,该功能类似抓包。目前,Network Inspector
仅支持 HttpsURLConnection
和OkHttp
网络连接库。如果您的应用使用的是其他网络连接库,您可能无法在Network Inspector
中查看网络活动。
具体详情可参考:使用 Network Inspector 检查网络流量
Background Task Inspector
Background Task Inspector
可以让你直观呈现、监控和调试应用的后台worker
。
具体详情可参考:
WorkManager 代码示例
使用后台任务检查器调试 WorkManager worker
Leakcanary 内存泄漏(ML)、内存溢出(OOM)检测
内存泄漏(Memory Leak),简称ML,指程序在申请内存后,无法释放已申请的内存空间,导致系统无法及时回收内存、分配内存给其他进程使用。通常少次数的内存无法及时回收并不会到程序造成什么影响,但是如果在内存本身就比较少,内存多次无法正常回收时,会导致内存不够分配,最终导致内存溢出。
内存溢出(Out Of Memory),简称OOM,指程序申请内存时,没有足够的内存供申请者使用,导致数据无法正常存储到内存中。
Leakcanary
是一个Android系统的内存泄漏检测库。
Leakcanary
添加依赖即可使用,当你你的应用程序安装上设备的同时会附带安装Leaks
App,运行应用程序的过程中若是检测到内存泄漏,通知栏与Leaks
都可以看到内存泄漏通知。
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'
}
具体详情可参考:
- Android 常见内存泄露 & 解决方案
Leakcanary
源码:LeakcanaryLeakcanary
工作原理:How LeakCanary worksLeakcanary
修复内存泄漏:Fixing a memory leak