普通APP与鸿蒙APP性能测试对比(上)
liuian 2025-06-09 23:30 26 浏览
前言:
普通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个伪随机的用户输入事件。
检查日志中是否有异常的关键词,并提取相关日志给开发
常见的关键字
- ANR问题(应用无响应):
- 关键词:ANR、anr in
- 闪退问题:
- 关键词:crash
- 异常:
- 关键词:exception
- 强制退出:
- 关键词: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的
相关推荐
- 快速上手maven
-
Maven的作用在开发过程中需要用到各种各样的jar包,查找和下载这些jar包是件费时费力的事,特别是英文官方网站,可以将Maven看成一个整合了所有开源jar包的合集,我们需要jar包只需要从Mav...
- Windows系统——配置java环境变量
-
怎么配置java环境变量呢?首先是安装好jdk然后我的电脑右键选择属性然后选择左侧高级系统设置高级然后点环境变量然后在用户变量或系统变量中配置,用户变量指的是只有当前用户可用,系统变量指的是系统中...
- ollama本地部署更改默认C盘,Windows配置环境变量方法
-
ollama是一个大语言模型(LLM——LargeLanguageModel),本地电脑安装网上也要很多教程,看上去非常简单,一直下一步,然后直接就可以使用了。但是我在实操的时候并不是这样,安装完...
- # Windows 环境变量 Path 显示样式更改
-
#怎样学习Java##Windows环境变量Path显示样式更改##1、传统Path环境变量显示:```---》键盘上按【WIN+I】打开系统【设置】---》依次点击---》【系统...
- 如何在Windows中创建用户和系统环境变量
-
在Windows中创建环境变量之前您应该了解的事情在按照本指南中所示的任何步骤创建指向文件夹、文件或其他任何内容的用户和系统变量之前,您应该了解两件事。第一个也是最重要的一个是了解什么是环境变量。...
- Windows 中的环境变量是什么?
-
Windows中的环境变量是什么?那么,Windows中的环境变量是什么?简而言之,环境变量是描述应用程序和程序运行环境的变量。所有类型的程序都使用环境变量来回答以下问题:我安装的计算机的名称是什么...
- 【Python程序开发系列】谈一谈Windows环境变量:系统和用户变量
-
这是我的第350篇原创文章。一、引言环境变量(environmentvariables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作...
- 系统小技巧:还原Windows10路径环境变量
-
有时,我们在Windows10的“运行”窗口中执行一些命令或运行一些程序,这时即便没有指定程序的具体路径,只输入程序的名称(如notepad.exe),便可以迅速调用成功。这是因为Windows默认...
- Windows10系统的“环境变量”在哪里呢?
-
当我们在操作系统是Windows10的电脑里安装了一些软件,要通过配置环境变量才能使用软件时,在哪里能找到“环境变量”窗口呢?可以按照下面的步骤找到“环境变量”。说明:下面的步骤和截图是在Window...
- 系统小技巧:彻底弄懂Windows 10环境变量
-
每当我们进行系统清理时,清理软件总能自动找到Windows的临时文件夹之所在,然后加以清理,即便是我们重定向了TEMP目录也是如此。究其原因,是因为清理软件会根据TEMP环境变量来判断现有临时文件夹的...
- MySQL 5.7 新特性大全和未来展望
-
本文转自微信公众号:高可用架构作者:杨尚刚引用美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计。前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存...
- MySQL系列-源码编译安装(v8.0.25)
-
一、前言生产环境建议使用二进制安装法,其优点是部署简单、快速、方便,并且相对"yum/rpm安装"方法能更方便地自定义文件存放的目录结构,方便用脚本批量部署,方便日后运维管理。在生产...
- MySQL如何实时同步数据到ES?试试这款阿里开源的神器!
-
前几天在网上冲浪的时候发现了一个比较成熟的开源中间件——Canal。在了解了它的工作原理和使用场景后,顿时产生了浓厚的兴趣。今天,就让我们跟随我的脚步,一起来揭开它神秘的面纱吧。简介canal翻译为...
- 技术老兵十年专攻MySQL:编写了763页核心总结,90%MySQL问题全解
-
MySQL是开放源码的关系数据库管理系统,由于性能高、成本低、可靠性好,成为现在最流行的开源数据库。MySQL学习指南笔记领取方式:关注、转发后私信小编【111】即可免费获得《MySQL进阶笔记》的...
- Mysql和Hive之间通过Sqoop进行数据同步
-
文章回顾理论大数据框架原理简介大数据发展历程及技术选型实践搭建大数据运行环境之一搭建大数据运行环境之二本地MAC环境配置CPU数和内存大小查看CPU数sysctl machdep.cpu...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
飞牛OS入门安装遇到问题,如何解决?
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)