iOS性能测试方法-获取手机内存数据

这篇具有很好参考价值的文章主要介绍了iOS性能测试方法-获取手机内存数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在研究如何获取iOS手机性能数据(主要是内存),看了一圈目前主流的方法主要是两种:1.阿里开源的iOS自动化测试工具tidevice;2.xcode自带的instruments;

一、移动端性能指标

1.cpu

正常在20%-40%左右,超过80%需要引起重视。

2.内存

rss:私有内存+所有共享内存,pss:私有内存+比例分配共享内存,一般vss>=rss>=pss>=uss;

需要关注退出一个页面后,内存是否有回落;进行某个操作之后,内存是否增长过快。

3.fps

在30-60之间比较合理,低于30会有明显卡顿,高于70感知不到,会浪费图形处理器能力。

4.耗电量

测试前先看规定时间内手机正常待机下(重启后待机)电量消耗为多少。然后再启动待测试APP看看消耗的电量增加了多少取差值。

5.crash

<0.03%表示优秀,<0.1%表示良好。

6.启动时长

7.流量

8.gpu过度渲染

二、tidevice 

tidevice是阿里开源的iOS自动化测试工具,能够提供截图、获取手机信息、ipa包的安装和卸载、根据bundleID启动和停止应用、获取指定应用性能数据、模拟xcode运行xctest等功能;taobao-iphone-device/README.md at main · alibaba/taobao-iphone-device · GitHub

安装tidevice

pip3 install -U "tidevice[openssl]"

tidevice可以用命令行或者python脚本方式获取性能数据。

1.命令行方式:

tidevice applist

得到ipa 文件的 bundle id

ios获取内存使用情况,移动端测试,ios,xcode,macos

查看性能数据

tidevice perf -B bundleID

ios获取内存使用情况,移动端测试,ios,xcode,macos

输出数据格式如下, 采集时间使用时间戳格式。

fps {'fps': 46, 'value': 46, 'timestamp': 1655023837471}
gpu {'device': 22, 'renderer': 20, 'tiler': 22, 'value': 22, 'timestamp': 1655023837572}
cpu {'timestamp': 1655023837647, 'pid': 2734, 'value': 0.6984475878545683, 'sys_value': 83.33333333333331, 'count': 2}
memory {'pid': 979, 'timestamp': 1655023837647, 'value': 148.61046600341797}
network {'timestamp': 1655023837613, 'downFlow': 78.1064453125, 'upFlow': 0.7294921875}

2.python脚本方式

import time
import tidevice
from tidevice._perf import DataType

t = tidevice.Device()
# perf = tidevice.Performance(t,[DataType.CPU, DataType.MEMORY, DataType.NETWORK, DataType.FPS, DataType.PAGE, DataType.SCREENSHOT, DataType.GPU])
perf = tidevice.Performance(t,DataType.MEMORY)

def callback(_type:tidevice.DataType,value:dict):
    print(_type.value,value)

perf.start('com.meituan.imerchantbiz.ep',callback = callback)
time.sleep(60)
perf.stop()

ios获取内存使用情况,移动端测试,ios,xcode,macos
可以用pyecharts自动生成实时的性能采集报告。 

安装pyecharts

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pyecharts
#绘图
x = [i for i in range(len(d))]
y = d
print(x)
print(y)

#创建对象,可以添加一些参数
line = Line(init_opts=options.InitOpts(width='800px',height='600px'))
#添加x轴y轴数据,注意添加y轴数据的时候必须设置series_name参数,表示图例的名称
line.add_xaxis(xaxis_data=x)
line.add_yaxis(series_name='memory', y_axis=y, is_symbol_show=True, label_opts=options.LabelOpts(is_show=False),
               #is_symbol_show=True显示点,label_opts=opts.LabelOpts(is_show=False)不显示值
               #设置展示最大值最小值
                markpoint_opts=options.MarkPointOpts(
                    data=[
                        options.MarkPointItem(type_="max",name="最大值", symbol="pin", symbol_size=[70,50]),
                        options.MarkPointItem(type_="min", name="最小值",symbol="pin", symbol_size=[70,50], itemstyle_opts={'color':'#3CB371'}),
                    ]
                ),
                #设置展示平均值
                markline_opts=options.MarkLineOpts(
                    data=[options.MarkLineItem(type_="average",name="平均值")]
                ))
line.render()
os.system('open render.html')

效果示例:可以看到最大值、最小值、平均值;鼠标移动到某一个点,可看到该点数值。

ios获取内存使用情况,移动端测试,ios,xcode,macos  ios获取内存使用情况,移动端测试,ios,xcode,macos

 3.遇到的问题

(1)出现报错:tidevice.exceptions.MuxError: ImageMountFailed

解决:可能是由于没有devicesupport,下载对应版本的developer,然后用xcode重新安装wda

(2)出现报错:sh: ./render.html: Permission denied

解决:这是因为没有为程序分配读写权限,chmod 755 render.html

(3)报错:./render.html: line 1: syntax error near unexpected token `newline'

暂未解决,先改成open render.html;

三、xcode-instruments

1.获取内存数据-leaks

xcode-open developer tool-打开instruments;

ios获取内存使用情况,移动端测试,ios,xcode,macos打开leaks;

ios获取内存使用情况,移动端测试,ios,xcode,macos

 选择被测设备和被测应用;ios获取内存使用情况,移动端测试,ios,xcode,macos 点击启动,项目会跑起来,然后即可观测;

ios获取内存使用情况,移动端测试,ios,xcode,macos

当出现红色的x时,表示有内存泄漏了;

ios获取内存使用情况,移动端测试,ios,xcode,macos

选中红色的x,找到leaks-call tree,在底部找到call tree,选中invert call treee,hede system libraries,然后就会显示类和泄露的方法,双击查看详情就可以开始修改了。

Invert Call Tree 的意思是翻转调用树,意思就是我们在调用函数时,是一层一层的,调用外层函数会一直进入内层,直到最后一层,有点递归的意思,当选中 Invert Call Tree 选项时,会直接显示内层函数,方便我们去寻找。反向输出调用树。把调用层级最深的方法显示在最上面,更容易找到最耗时的操作。

Hide System Libraries :隐藏系统库文件。过滤掉各种系统调用,只显示自己的代码调用。ios获取内存使用情况,移动端测试,ios,xcode,macos ios获取内存使用情况,移动端测试,ios,xcode,macos

出现报错:Instruments could not acquire the necessary privileges to profile the target application.

ios获取内存使用情况,移动端测试,ios,xcode,macos文章来源地址https://www.toymoban.com/news/detail-730477.html

到了这里,关于iOS性能测试方法-获取手机内存数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IOS手机耗电量测试

    1. 耗电量原始测试方法 1.1 方法原理: 根据iPhone手机右上角的电池百分比变化来计算耗电量。 1.2实际操作: 在iOS通用设置中打开电池百分比数值显示,然后操作30分钟,60分钟,90分钟,看开始时和结束时电池百分比数值的差值。 1.3 优缺点分析: 1、电池百分比数据非常粗略

    2024年02月06日
    浏览(47)
  • 获取linuxIP、内存、cpu、磁盘IO等信息的Shell脚本及其讲解

    grep是一个在Unix和Unix-like系统上使用的命令行工具,用于在文本文件中搜索匹配指定模式的行。它的名字来自于\\\"global regular expression print\\\"(全局正则表达式打印)的缩写。grep的基本用法是通过指定一个正则表达式模式和一个文件名(或者从标准输入读取数据),来查找和打印

    2024年04月27日
    浏览(31)
  • Android/iOS性能测试工具-SoloX

    SoloX - Android/iOS性能数据实时采集工具。支持收集被测应用CPU、内存、FPS、流量等性能数据,进行图表化展示。 官网:GitHub - smart-test-ti/SoloX: SoloX - Real-time collection tool for Android/iOS performance data.(Android性能测试android performanceiOS性能测试ios performance移动端性能测试mobile perform

    2024年02月03日
    浏览(39)
  • 怎样在iOS手机上进行自动化测试

    Airtest支持iOS自动化测试,在Mac上为iOS手机部署iOS-Tagent之后,就可以使用AirtestIDE连接设备,像连接安卓设备一样,实时投影、控制手机。iOS测试不仅限于真机测试,iOS模拟器也可以进行。Mac端上部署完成后还可以提供给同一局域网内的windows上远程连接使用。同时支持airtest图

    2024年02月04日
    浏览(40)
  • 如何在iOS手机上进行自动化测试

    🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 Airtest支持iOS自动化测试,在Mac上为iOS手机部署iOS-Tagent之后,就可以使用AirtestIDE连接设备,像连接安卓设备一样,实时投影、控制手

    2024年02月20日
    浏览(47)
  • 利用tidevice+mysql+grafana实现ios性能测试

    利用tidevice+mysql+grafana实现ios性能测试 tidevice是一个可以和ios设备进行通信的工具,提供以下功能: 截图 获取手机信息 ipa包的安装和卸载 根据bundleID 启动和停止应用 列出安装应用信息 模拟Xcode运行XCTest,常用的如启动WebDriverAgent测试(此方法不依赖xcodebuild) 获取指定应用性

    2024年02月11日
    浏览(36)
  • Linux系统运行时参数命令(性能监控、测试)(3)网络IO性能监控

    通常用带宽、吞吐量、延时、PPS(Packet Per Second)等指标衡量网络性能 带宽 ,表示链路的最大传输速率,单位通常为b/s(比特/秒) 吞吐量 ,表示单位时间内成功传输的数据量,单位通常为b/s(比特/秒)或者B/s(字节/秒)。吞吐量受带宽限制,而吞吐量/带宽,也就是 网络

    2024年02月13日
    浏览(42)
  • ios开发 swift5 苹果手机怎样获取蓝牙设备的mac地址

    如设备蓝牙名为: 蓝牙名_mac app这边展示蓝牙名的时候,就只展示 蓝牙名 , 去掉后面的 _mac 其他用到蓝牙名的地方,都用这样的方式处理 如下图,箭头部分就是广播出的mac地址 如果不是通过搜索获取到peripheral,而是通过retrievePeripherals方法获取到peripheral。这个时候就只能获

    2024年02月03日
    浏览(52)
  • 【Charles】成功解决使用iOS手机抓包时,iOS手机连接网络失败&Charles配置方法

    解决方法:原来是因为我换了一台电脑,需要重新安装手机的证书,不能用之前的证书。而且安装完证书以后,Charles没有弹出让我allow的窗口,就直接可以抓包了。 配置方法如下,搬运自同事大佬: 手机和电脑连接同一个网络,启动charles工具 iOS手机代理配置,服务器及端口

    2024年02月11日
    浏览(57)
  • IOS手机和车机互联自动化测试

    在酷热的夏天,提前打开空调;在寒冷的冬天,提前加热座椅和方向盘。这些贴心的功能都是通过手机远程控制汽车实现的。随着汽车新四化的进程推进,类似手机和车机连接的功能必然越来越多。 作为汽车行业的工程师,我们都知道每一个功能的背后,都离不开反反复复的

    2024年02月10日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包