当前位置: 首页 > article >正文

【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开发人员都知道的吧,通过调用Logvdiwe等方法可使日志在Logcat控制台打印。LogLogcat控制台所打印日志String.length超过4061length4062起,将不再打印日志,缺少的日志不会显示在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,通过ADBshell脚本执行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 无线连接设备

为什么要介绍ADBADB不就是一个无线连接设备吗?用数据线连接设备不是更稳定吗?为什么要使用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进行测试。

除了以上的AppiumMonkey以外,还有很多很多的自动化测试工具供大家挑选,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及以上设备在运行时可观察DatabaseNetworkBackground 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源码:Leakcanary
  • Leakcanary工作原理:How LeakCanary works
  • Leakcanary修复内存泄漏:Fixing a memory leak

http://www.kler.cn/a/7756.html

相关文章:

  • HarmonyOS Next 组件或页面之间的所有通信(传参)方法总结
  • 深度学习在边缘检测中的应用及代码分析
  • Android setTheme设置透明主题无效
  • sql在按照当前表查询返回
  • 122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
  • react-rnd的使用(react使用拖拽,缩放组件)
  • 【vue2】近期bug收集与整理01
  • 浏览器是如何工作的(1)
  • Postgre SQL pgsql解决表死锁解锁
  • 【java进阶09:集合】泛型、增强for、Collections集合工具类
  • 百度墨卡托坐标转化笔记
  • pyinstaller打包exe文件
  • 网络编程DAY 1
  • 护网面试题5.0
  • 4.整数类型
  • 五、页面切割技术,实现工作台
  • toArray转换 java.lang.ClassCastException
  • Kafka 3.4.0 kraft 集群搭建
  • 【机器学习】主成分分析(PCA)算法及Matlab实现
  • 数据结构.双链表的各种操作
  • 用“劫富济贫”的思想来进行特征空间的数据增强
  • day002-数组-有序数组的平方、长度最小的子数组、螺旋矩阵II
  • (数字图像处理MATLAB+Python)第四章图像正交变换-第二节:离散余弦变换和K-L变换
  • CTFHub | 双写后缀
  • 使用Python、Contours绘制等高线
  • 软件安全测试有哪些测试手段?软件测试报告收费贵吗?