程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

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

balukai 2025-05-26 13:46:30 文章精选 7 ℃

前言:

普通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的

最近发表
标签列表