【Android】测试方法汇总,助力打造完美应用

2023-05-16

目录

  • 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Android】测试方法汇总,助力打造完美应用 的相关文章

  • 在Jetson Nano安装测试YOLO v5目标识别示例

    参考链接 https blog csdn net carrymingteng article details 120978053 https blog csdn net weixin 43947712 article details 115
  • 问题解决:ImportError: The _imagingft C module is not installed

    在测试YOLO v5时出现错误提示 xff1a ImportError The imagingft C module is not installed 经查是pillow库的问题 解决方法 重新安装pillow xff0c 先卸载已有的pi
  • Jetson Nano设置风扇自启动

    Jetson Nano跑一些如目标识别等需要较大计算量的程序 xff0c 散热板会非常的热 xff0c 为避免主板过热 xff0c 通常在散热板上加装一个风扇增强散热 风扇需要软件指令进行驱动 xff0c 驱动风扇的指令为 sudo sh
  • Ubuntu 18.04安装gazebo9

    首先 xff0c 把gazebo的源添加到apt的source list中 sudo sh c echo deb http packages osrfoundation org gazebo ubuntu stable 96 lsb rel
  • 问题解决:/usr/bin/ld: cannot find -lbz2

    在项目编译过程中 xff0c 出现类似如下的错误 usr bin ld cannot find lbz2 经查询 xff0c 是找不到bz2的库文件 xff0c 用whereis命令查询 whereis libbz2 找不到对应的库文件 x
  • 常用Git命令

    通过git命令可以对项目代码库执行克隆 拉取 提交等操作 常用的git命令有如下 git clone 克隆代码库 xff0c 把远程代码库克隆到本机当前目录 xff0c 如 git clone https github com PX4 PX
  • 【Android】原来Toolbar还能这么用?Toolbar使用最全解析。网友:终于不用老是自定义标题栏啦

    一个Toolbar的UI可以做成什么样 xff1f 做出什么效果 xff1f 这是我最近在研究的问题 目录 带导航图标的Toolbar带标题的Toolbar带小标题的Toolbar带Logo的Toolbar带进度条的Toolbar带菜单的T
  • Linux安装Beyond Compare

    Beyond Compare是一款很好用的代码比对软件 xff0c 提供了在Windows xff0c Linux等平台的安装包 在Linux下安装Beyond Compare的方法如下 参考链接 xff1a https www scoot
  • Linux下压缩解压文件和目录的方法(zip, tar)

    Linux下可以用zip命令方便的压缩文件或文件夹 压缩文件 zip data zip data xls zip data zip data1 xls data2 xls 上述命令把一个文件或者多个文件压缩到一个zip文件 压缩目录 zip
  • Jupyter Notebook安装

    Jupyter Notebook是一个非常好用的交互式Python运行的软件 安装方法如下 在命令行输入 pip3 install jupyter 安装后根据提示 xff0c Jupyter相关软件安装在 local bin目录下 xff0
  • Ubuntu添加截屏快捷键的方法

    在Ubuntu下面具有截屏的命令 xff08 gnome screenshot xff09 xff0c 可以通过简单的设置方便的添加截屏快捷键 通过 Settings gt Devices gt Keyboard选项 xff0c 添加快捷键
  • Windows下修改Jupyter Notebook默认字体的方法(custom.css)

    在Windows下Jupyter Notebook代码显示的默认字体为宋体 xff0c 视觉效果不是很好 xff0c 可以通过设置修改默认的显示字体 通过用户目录 C User Administrator jupyter custom 下的
  • Jupyter Notebook添加代码自动补全功能的方法

    Jupyter Notebook成为一款非常受欢迎的交互式Python运行环境的软件 通过如下的方法可以添加代码自动补全的功能 输入命令安装插件 pip3 install jupyter contrib nbextensions 然后运行
  • 修改grub默认启动选项的方法

    在Windows系统基础上 xff0c 再安装Linux xff0c 形成双系统 这样在grub启动菜单中会包含Linux Windows等多个选项 xff0c 默认为第一个选项 xff0c 常规的Linux启动 通过修改配置文件 etc
  • 在云服务器上搭建Jupyter Notebook服务

    Jupyter Notebook提供了远程登录的功能 xff0c 可以在云服务器上配置Jupyter Notebook xff0c 用户可以远程登录和运行Python代码 这里使用的是腾讯云的Ubuntu服务器 xff0c 配置方法如下 1
  • 常用Linux命令

    记录一些常用的Linux命令 1 用户管理 增加用户 useradd lt user name gt useradd g lt group name gt lt user name gt g选项指定新用户所属的用户组 修改用户的组别 use
  • 在云服务器上安装VNC远程桌面服务

    云服务器操作系统通常不包含图形界面 xff0c 通过在服务器上安装VNC服务 xff0c 可以让用户以图形化界面远程登录到云服务器 这里服务器使用的是Ubuntu Server 18 04系统 1 安装图形界面 首先在服务器端安装图形化桌面
  • 【Android】ADB无线连接Android设备

    目录 简介无线连接的条件adb连接设备方法一方法二 修改端口号方法一方法二 辅助工具android toolscrcpy gui 问题集合 简介 Android Debug Bridge xff0c 简称adb xff0c 是一种功能多样的
  • 人工智能学习:载入MNIST数据集(1)

    MNIST数据集是人工智能学习入门的数据集 xff0c 包含了一系列的手写的数字图片 载入MNIST数据集的方法很简单 xff0c Tensorflow集成了载入数据集的方法 首先导入tensorflow模块和matplotlib pypl
  • 人工智能学习:MNIST数据分类识别神经网络(2)

    在MNIST数据集上构建一个神经网络 xff0c 进行训练 xff0c 以达到良好的识别效果 1 导入模块 首先 xff0c 导入必要的模块 span class token keyword import span numpy span c

随机推荐

  • 人工智能学习:NMIST数据分类识别-CNN网络(3)

    这里采用CNN模型 xff08 卷积神经网络 xff09 来进行MNIST数据集的分类识别 1 导入模块 首先 xff0c 导入需要的模块 span class token keyword import span numpy span cl
  • 人工智能学习:CIFAR-10数据分类识别(4)

    与MNIST类似 xff0c CIFAR 10同样是人工智能学习入门的数据集之一 xff0c 它包含飞机 汽车 小鸟等10个类别的图片 xff0c 一共60000张图片 xff0c 其中训练集占50000张 xff0c 测试集占10000张
  • 人工智能学习:CIFAR-10数据分类识别-VGG网络(5)

    这里尝试采用VGG网络对CIFAR 10数据集进行分类识别 1 导入需要的模块 span class token keyword import span numpy span class token keyword as span np s
  • 人工智能学习:PASCAL VOC数据集读取(6)

    PASCAL VOC是一个国际的计算机视觉挑战赛 xff0c 数据集包含了20个分类的3万多张图片 挑战赛及其数据集基础上涌现不少知名的目标检测模型如R CNN xff0c YOLO xff0c SSD等 可以通过下载和读取的方法载入PAS
  • 人工智能学习:Microsoft COCO数据集读取(7)

    Microsoft COCO xff08 Common Objects in Context xff09 是微软研发维护的一个大型的数据集 包含了30多万张图片和91个目标分类 可用于目标识别 xff08 Object Detection
  • 人工智能学习:ResNet神经网络(8)

    ResNet是一种非常有效的图像分类识别的模型 xff0c 可以参考如下的链接 https blog csdn net qq 45649076 article details 120494328 ResNet网络由残差 xff08 Resi
  • 人工智能学习:倒立摆(CartPole)(9)

    倒立摆是强化学习的一个经典模拟对象 xff0c 通过对倒立摆对象的持续的动作输入 xff0c 使倒立摆保持在竖立的状态或者倒下 Python提供了一个模拟库 xff08 gym xff09 来模拟倒立摆等一些典型的难度控制对象 首先载入gy
  • 理解卡尔曼滤波

    卡尔曼滤波被广泛的应用于运动估计中 xff0c 在飞行器中多有应用 xff0c 区别于普通滤波如低通滤波 xff0c 卡尔曼滤波具有不延时的优点 xff0c 即普通的低通滤波在过滤噪声的同时也会引入信号滞后 xff0c 而卡尔曼滤波则可以实
  • 【Kotlin】Kotlin函数那么多,你会几个?

    目录 标准函数letrunwithapplyalsotakeIftakeUnlessrepeat小结作用域函数的区别作用域函数使用场景 简化函数尾递归函数 xff08 tailrec xff09 扩展函数高阶函数内联函数 xff08 inl
  • 2021-02-13

    昨天学习了关于位运算的一些常识 xff0c 自己也跟着视频敲了一些位运算代码如下 xff1a package com raisecom tiap ems basic mgt domain acl import java util Array
  • 字符串匹配中KMP算法的next数组构造与思考

    对于KMP算法的next算法 xff0c 匹配规则i不动 xff0c j而是根据 next j 61 k 如果在j位置失配 xff0c 则退到k位置 构造next数组的 是根据前缀与后缀的最长匹配 如ababaa 的next数组是 1001
  • 字符串匹配的后缀数组的直接比较和利用rank[i]=k的倍增法

    public static Suff getSa String s Suff SuffArrays 61 new Suff s length sa i 61 k表明的排名为i的后缀是从k开始的 for int i 61 0 i lt s l
  • 关于求后缀数组的公共前缀的长度height数组求法思路与代码

    字符串匹配之后缀数组 概念 xff1a 后缀数组 xff1a 是所有后缀按字典排序后 xff0c 数组中记录的起始下标 sa 0 61 5 起始下标为5的后缀 在所有后缀中字典最小 rank数组 xff1a 是给定后缀下标 xff0c 返回
  • Excel 2013 Power Programming with VBA 翻译

    第14 章 xff1a 基于VBA开发的Excel实用工具 545页 是什么让它成为一个优秀的工具 xff1f Excel工具 xff0c 理所应当的让你的工作变得更容易或者更有效 但是 如果你正在为其他用户开发一个实用工具 xff0c 你
  • myeclipse中编写小java项目遇到的一些问题(持续更新)

    刚开始学习java程序 xff0c 读了 lt lt thingking in java gt gt 刚开始编写正常 xff0c 可后来再次打开时看到所创建的java项目都会出现红色叉号 后来搜了一会儿却还是什么感觉很乱 xff0c 最好也
  • IT成长录

    少壮不努力 xff0c 老大学IT xff0c 初次听到这句话是我大学老师在一次上课时看到满班乱哄哄的气氛说的 xff0c 当时以为他是嘲讽我们或者是略微自嘲呢 xff0c 现在回想起来有些不一样的感觉 从自己第一份接触IT工作 xff08
  • 我所了解的大数据

    大数据如今越来越热 xff0c 数据量再大不会用 xff0c 放到那里也是存储垃圾 所以随着数据量的越来越大 xff0c 对数据的各种处理和挖掘需求也很多 这就促进分布式存储和计算软件的快速发展 xff0c 集群的规模也越来越大 从以前的某
  • 通过Jetty搭建一个简单的Servlet运行环境

    最近在做一些简单的Servlet开发的时候 感觉每次调试的时候都要发布到tomcat上很麻烦 把程序共享给同事也很麻烦 需要帮他设置本地的tomcat环境 在网上找了找其他的Servlet运行环境 发现用Jetty可以很方便的实现嵌入式We
  • 一些常用的Maven Plugin配置

    Maven是一个常用的Java build Manager 使用Maven可以很好的对Java Project的dependency进行管理 这里我记录几个比较常用的Plugin配置 生成JAR打包文件 lt plugin gt lt gr
  • 【Android】测试方法汇总,助力打造完美应用

    目录 Log 打印日志Junit 单元测试Debug 断点调试Monkey 压力测试Profiler 性能分析器ADB 无线连接设备Appium 自动化测试BlockCanary 界面卡顿检测App Inspection 应用程序检查Dat