百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

普通APP与鸿蒙APP性能测试对比(上)

liuian 2025-06-09 23:30 37 浏览

前言:

普通APP的测试与鸿蒙APP的测试有一些共同的特征,但是也有一些区别,其中共同特征是,它们都可以通过cmd的命令提示符工具来进行app的性能测试。

其中区别主要是,对于稳定性测试的命令的区别,性能指标获取方式的命令的区别,安装的命令,卸载的命令,等等。此外,鸿蒙APP还有一个专项测试。

这篇文章就将普通APP的测试方法以及鸿蒙APP的测试的方法进行一定程度的梳理。希望能从中发现一些共通点。

这篇文章作为鸿蒙APP以及安卓APP的第一篇总结性文章,将带着以下问题进行展开:

1:什么是hdc? 什么是adb?

2:adb的shell命令可以用在鸿蒙hdc 的shell上面吗?

3:adb的性能测试的日志文件与hdc的性能测试的日志一样吗?

对于五类性能测试的方法及其log的主要分析。这五类的方法分别是: hdc稳定性测试,hdc性能测试,hdc专项测试,adb稳定性测试,adb性能测试。

4:鸿蒙的包名的格式和安卓的包名的格式一样吗?

带着以上的疑问我将写一篇相关的文章,同时,此次测试的鸿蒙官方文档的出处以及测试的心得也将列出来。

本文很多的描述都是来自 <文心快码>等AI搜索生成。

第一部分 普通APP的测试详细步骤

第一步 打开 uiautomatorviewer.bat 作为元素定位的工具

查看快捷方式的指向

C:\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk\tools\uiautomatorviewer.bat

第二步 打开APPIUM

第三步 点击 “Start Server”

第四步 打开模拟器

第五步 打开CMD 运行adb devices 查看连接设备的情况,此时显示没有匹配的客户端

第六步 运行 adb connect 127.0.0.1:7555

连接到模拟器:在命令行中输入adb connect 127.0.0.1:7555。

127.0.0.1代表本地计算机,而7555是模拟器的端口号。

第七步 再次运行 adb devices

第八步 使用pycharm工具运行最基本的python命令查看是否可以正常启动APPIUM

第九步 常用的adb命令的演示

1)包名查询

获取当前焦点窗口的信息: adb shell dumpsys window | findstr mCurrentFocus

列出所有已安装的应用程序包: adb shell pm list packages

adb shell pm list packages命令还可以使用一些选项。例如:

  • -f选项:列出应用程序包的完整路径。
  • -3选项:仅列出第三方(非系统)应用程序包。

2)日志收集之: adb logcat

adb logcat命令的主要作用是捕获和显示Android设备的日志信息。这些日志信息包括系统日志、应用日志、错误日志等 。

app中任何操作的日志情况都会在adb logcat的日志中显示。

比如打开 “设置”组件等操作,都会实时地更新adb logcat的日志信息。

3)adb的文件传输命令

adb push

将本地的文件传送到模拟器中

adb push C:\app\test.apk /sdcard/

adb pull

将模拟器中的文件传送到本地

adb pull /sdcard/test.apk C:\app\

4)adb的安装 卸载命令

卸载软件

adb uninstall <name of apk with com>

安装软件

adb install apkname.apk

5)启动app,停止app

adb shell am start <name of apk with com/Activity>

adb shell am force-stop <name of apk with com>

6)稳定性测试- 点击600次 并保存到某个log中

adb shell monkey -p <name of apk with com> -v -v 600命令是Android开发中常用的一条命令行指令,它主要用于对指定的Android应用进行压力测试。

解释如下:

  • adb shell:用于在连接的Android设备上执行shell命令。
  • monkey:用于向系统发送伪随机的用户输入事件流(如点击、触摸、手势等)
  • -p <name of apk with com>:这个选项指定了要测试的应用的包名。
  • -v -v:设置日志的详细程度。 -v -v则表示启用比-v更详细的日志输出。
  • 600:这个数字表示monkey工具将发送的事件的数量。在这个例子中,monkey工具将向<name of apk with com>应用发送600个伪随机的用户输入事件。

检查日志中是否有异常的关键词,并提取相关日志给开发

常见的关键字

  1. ANR问题(应用无响应)
  • 关键词:ANR、anr in
  1. 闪退问题
  • 关键词:crash
  1. 异常
  • 关键词:exception
  1. 强制退出
  • 关键词:force closed

其他常见异常类型

  • 算术异常:ArithmeticException
  • 空指针异常:NullPointerException
  • 类型强制转换异常:ClassCastException
  • 数组负下标异常:NegativeArrayException
  • 数组下标越界异常:ArrayIndexOutOfBoundsException
  • 违背安全原则异常:SecurityException
  • 文件已结束异常:EOFException
  • 文件未找到异常:FileNotFoundException
  • 字符串转换为数字异常:NumberFormatException
  • 操作数据库异常:SQLException
  • 输入输出异常:IOException
  • 违法访问错误:IllegalAccessError
  • 内存不足错误:OutOfMemoryError
  • 堆栈溢出错误:StackOverflowError

7)稳定性测试 让 -v的次数变动查看log的变化

--pct-touch <percent>指定了触摸事件在所有生成的事件中所占的百分比。例如,如果你设置--pct-touch 87,那么在执行测试时,大约87%的事件将是触摸事件。

以下命令是 pct-touch 的概率是百分之百,发送600个伪随机的用户输入事件,间隔时间为300毫秒

adb shell monkey -p <name of apk with com> --pct-touch 100 --throttle 300 -v 600 > C:\Users\test\Desktop\0228\v\-v\v.log

adb shell monkey -p <name of apk with com> --pct-touch 100 --throttle 300 -v -v 600 > C:\Users\test\Desktop\0228\v\-v-v\vv.log

比对 -v的 log 与 -v -v 的log之间的区别:

目前发现 -v-v的日志中含有

Sleeping for 300 milliseconds

但是 -v的日志中是没有Sleeping for 300 milliseconds的

除了--pct-touch 之外,还有,--pct-motion <percent> (滑动事件生成百分比) 等参数。

8)性能测试之内存查询

adb shell dumpsys meminfo命令用于获取Android设备上指定进程的内存使用情况。当你附加一个应用包名(如name of apk with com)作为参数时,它会返回该应用的内存使用信息。

关键指标

  • PSS (Proportional Set Size): 表示进程独占的内存页的数量,考虑到共享库的内存占用。
  • RSS (Resident Set Size): 表示进程实际占用的物理内存大小。
  • OutOfMemoryError: 如果应用显示内存不足错误,需要进一步分析是哪个部分的内存使用过高。

如果要查询系统的内存信息则是

adb shell cat /proc/meminfo

9)性能测试之cpu查询

adb shell dumpsys cpuinfo

可以获取当前CPU的使用情况,帮助分析CPU的性能瓶颈,找出占用资源较多的进程进行优化。

对于以下的命令输出的详细解释如下

1.7% 1590/m.mumu.launcher: 1.3% user + 0.3% kernel / faults: 5056 minor 28 major

这段信息是从adb shell dumpsys cpuinfo命令的输出中提取的,它提供了关于特定进程CPU使用情况的详细信息。下面是对这段信息的详细解释:

  • 1.7%:这是进程m.mumu.launcher的总体CPU使用率。它表示该进程在当前采样时间范围内占用了CPU总时间的1.7%。这个数值是用户态使用率和内核态使用率之和的一个总体反映。
  • 1590/m.mumu.launcher:这里的1590是进程的ID(PID),而m.mumu.launcher是进程名。这个信息告诉你哪个进程正在使用CPU资源。
  • 1.3% user:这是进程在用户态下的CPU使用率。用户态是指进程执行用户级代码时的状态,如应用程序的逻辑处理部分。1.3%的用户态使用率表示进程在执行用户级代码时占用了CPU总时间的1.3%。
  • 0.3% kernel:这是进程在内核态下的CPU使用率。内核态是指进程执行内核级代码时的状态,如系统调用、中断处理等。0.3%的内核态使用率表示进程在执行内核级代码时占用了CPU总时间的0.3%。
  • faults: 5056 minor 28 major:这里的faults表示进程在执行过程中遇到的页错误(page faults)数量。页错误是指进程试图访问其虚拟内存空间中尚未映射到物理内存的地址时发生的情况。5056 minor表示发生了5056次轻微页错误,这通常是由于进程的工作集(working set)超出了物理内存的大小,但操作系统能够通过将部分内存页换出到磁盘来解决这些问题,而不会导致进程被阻塞。28 major表示发生了28次主要页错误,这通常是由于进程试图访问已被换出到磁盘的内存页,导致操作系统必须等待磁盘I/O操作完成才能继续执行进程,这可能会导致性能下降。

对于性能分析来说,这些信息非常有用:

  • 总体CPU使用率可以帮助你了解进程是否占用了过多的CPU资源,从而可能影响到系统的整体性能。
  • 用户态和内核态的使用率可以帮助你判断进程的性能瓶颈是在用户级代码还是内核级代码上。
  • 页错误数量,特别是主要页错误数量,可以帮助你了解进程的内存使用情况,以及是否存在内存不足或内存访问模式不佳导致的性能问题。

综上所述,这段信息提供了关于进程CPU使用情况的详细信息,对于性能分析和优化非常有帮助。

<以上解释参考自文心快码>

如果要查询系统的cpu信息用的命令是

adb shell cat /proc/cpuinfo

10)性能测试之top命令

top: adb shell top | findstr <key word of process name>

此命令可以实时刷新 top的数值内容

以下是top命令的详细分析

对于以下的命令输出的详细解释如下

2374 u0_a41 10 -10 28G 203M 130M S 3.8 5.1 0:24.27 com.test +

这段文本提供了关于Android系统中一个进程的详细信息。下面是对各个字段的具体解释:

  • 2374:这是进程的ID(PID),它是系统为每个进程分配的唯一标识符。通过这个ID,你可以对进程进行各种操作,如查看详细信息、终止进程等。
  • u0_a41:这是进程的用户ID。在Android系统中,每个应用和用户都有对应的用户ID。这里的u0通常表示第一个用户(即主用户),a41是该用户下的应用ID。这个ID用于系统权限控制和资源隔离。
  • 10 -10:这两个数字通常表示进程的优先级和调度策略。不过,在这个上下文中,它们的具体含义可能因Android版本和厂商定制而有所不同。一般来说,较高的数字可能表示较高的优先级。但这里的-10可能是一个特殊的调度策略或优先级调整值。
  • 28G 203M 130M:这些数字表示进程的内存使用情况。28G可能是指系统总的可用内存(尽管这个值在这里可能不太准确,因为通常进程信息中不会显示系统总内存),203M表示进程当前使用的内存大小,130M可能表示进程使用的某种特定类型的内存(如Dalvik堆内存、Native堆内存等)的大小。不过,具体的内存类型需要根据Android版本和厂商定制来确定。

注意:这里的28G很可能是一个误解或错误,因为单个进程的内存使用情况通常不会以整个系统的内存总量来表示。更可能的是,这里显示的是某种内存统计信息的格式错误或混淆。

  • S:这是进程的状态码。在Android系统中,进程状态码通常表示进程的当前状态,如R(运行中)、S(睡眠中)、D(不可中断的睡眠状态)、T(跟踪/停止状态)等。S状态表示进程正在睡眠中,等待某个事件或资源。
  • 3.8 5.1:第一个数字(3.8%)可能是指进程在过去某个时间窗口内的用户态CPU使用率,第二个数字(5.1%)是某个进程的内存利用率
  • 0:24.27:这表示进程自启动以来已经占用的CPU时间,格式为小时:分钟.秒。在这个例子中,进程已经占用了大约0小时24分钟27秒的CPU时间。
  • com.test:这是进程的名称,通常与应用的包名相对应。在这个例子中,进程名称是com.test,

综上所述,这段文本提供了关于Android系统中一个进程的详细信息,包括进程ID、用户ID、内存使用、CPU使用率、进程状态等。这些信息对于理解进程的当前状态、进行性能分析或故障排查非常有帮助。不过,请注意,某些字段的具体含义可能因Android版本和厂商定制而有所不同。

<以上解释参考自文心快码>

11)性能测试之流量查询

以下是运用adb进行流量测试的详细步骤:

一、获取应用的进程号

首先,你需要获取目标应用的进程ID(pid)。这可以通过以下命令实现:

adb shell ps | findstr <key word of process name>

获得 com.android.settings 的进程号为 4293

二、查看应用流量情况

使用上一步的进程号来查看该应用的流量使用情况:

adb shell cat /proc/<pid number>/net/dev

执行该命令后,你将看到与该应用相关的网络流量数据。这些数据包括接收(Recv)和发送(Transmit)的字节数、包数、错误数和丢弃数等。

  • Interface:网络接口的名称。
  • Receive(接收):bytes:接收的总字节数。packets:接收的总数据包数。errs:接收过程中发生的错误数。drop:接收过程中丢弃的数据包数。
  • Transmit(发送):bytes:发送的总字节数。packets:发送的总数据包数。errs:发送过程中发生的错误数。drop:发送过程中丢弃的数据包数。

  • ip6tnl0 是Linux系统中用于IPv6隧道的网络接口
  • wlan0代表设备上的第一个无线网络接口,它主要负责Wi-Fi通信
  • sit0 是一个在Linux系统中出现的特殊网络接口,它属于sit(Simple Internet Transition)设备的一种。
  • lo代表本地回环接口(Loopback Interface)

以下命令可以用来获取更详细的网络流量统计信息

adb shell dumpsys netstats detail

三、计算使用流量

比较两次连续操作性能测试流量数值的区别,从而得到某一段时间内的流量使用情况。

经过研究,鸿蒙是不支持 dumpsys的

相关推荐

教你把多个视频合并成一个视频的方法

一.情况介绍当你有一个m3u8文件和一个目录,目录中有连续的视频片段,这些片段可以连成一段完整的视频。m3u8文件打开后像这样:m3u8文件,可以理解为播放列表,里面是播放视频片段的顺序。视频片段像这...

零代码编程:用kimichat合并一个文件夹下的多个文件

一个文件夹里面有很多个srt字幕文件,如何借助kimichat来自动批量合并呢?在kimichat对话框中输入提示词:你是一个Python编程专家,完成如下的编程任务:这个文件夹:D:\downloa...

Java APT_java APT 生成代码

JavaAPT(AnnotationProcessingTool)是一种在Java编译阶段处理注解的工具。APT会在编译阶段扫描源代码中的注解,并根据这些注解生成代码、资源文件或其他输出,...

Unit Runtime:一键运行 AI 生成的代码,或许将成为你的复制 + 粘贴神器

在我们构建了UnitMesh架构之后,以及对应的demo之后,便着手于实现UnitMesh架构。于是,我们就继续开始UnitRuntime,以用于直接运行AI生成的代码。PS:...

挣脱臃肿的枷锁:为什么说Vert.x是Java开发者手中的一柄利剑?

如果你是一名Java开发者,那么你的职业生涯几乎无法避开Spring。它如同一位德高望重的老国王,统治着企业级应用开发的大片疆土。SpringBoot的约定大于配置、SpringCloud的微服务...

五年后,谷歌还在全力以赴发展 Kotlin

作者|FredericLardinois译者|Sambodhi策划|Tina自2017年谷歌I/O全球开发者大会上,谷歌首次宣布将Kotlin(JetBrains开发的Ja...

kotlin和java开发哪个好,优缺点对比

Kotlin和Java都是常见的编程语言,它们有各自的优缺点。Kotlin的优点:简洁:Kotlin程序相对于Java程序更简洁,可以减少代码量。安全:Kotlin在类型系统和空值安全...

移动端架构模式全景解析:从MVC到MVVM,如何选择最佳设计方案?

掌握不同架构模式的精髓,是构建可维护、可测试且高效移动应用的关键。在移动应用开发中,选择合适的软件架构模式对项目的可维护性、可测试性和团队协作效率至关重要。随着应用复杂度的增加,一个良好的架构能够帮助...

颜值非常高的XShell替代工具Termora,不一样的使用体验!

Termora是一款面向开发者和运维人员的跨平台SSH终端与文件管理工具,支持Windows、macOS及Linux系统,通过一体化界面简化远程服务器管理流程。其核心定位是解决多平台环境下远程连接、文...

预处理的底层原理和预处理编译运行异常的解决方案

若文章对您有帮助,欢迎关注程序员小迷。助您在编程路上越走越好![Mac-10.7.1LionIntel-based]Q:预处理到底干了什么事情?A:预处理,顾名思义,预先做的处理。源代码中...

为“架构”再建个模:如何用代码描述软件架构?

在架构治理平台ArchGuard中,为了实现对架构的治理,我们需要代码+模型描述所要处理的内容和数据。所以,在ArchGuard中,我们有了代码的模型、依赖的模型、变更的模型等,剩下的两个...

深度解析:Google Gemma 3n —— 移动优先的轻量多模态大模型

2025年6月,Google正式发布了Gemma3n,这是一款能够在2GB内存环境下运行的轻量级多模态大模型。它延续了Gemma家族的开源基因,同时在架构设计上大幅优化,目标是让...

比分网开发技术栈与功能详解_比分网有哪些

一、核心功能模块一个基本的比分网通常包含以下模块:首页/总览实时比分看板:滚动展示所有正在进行的比赛,包含比分、比赛时间、红黄牌等关键信息。热门赛事/焦点战:突出显示重要的、关注度高的比赛。赛事导航...

设计模式之-生成器_一键生成设计

一、【概念定义】——“分步构建复杂对象,隐藏创建细节”生成器模式(BuilderPattern):一种“分步构建型”创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建...

构建第一个 Kotlin Android 应用_kotlin简介

第一步:安装AndroidStudio(推荐IDE)AndroidStudio是官方推荐的Android开发集成开发环境(IDE),内置对Kotlin的完整支持。1.下载And...