利用tidevice+mysql+grafana实现ios性能测试

利用tidevice+mysql+grafana实现ios性能测试

1.什么是tidevice?

tidevice是一个可以和ios设备进行通信的工具,提供以下功能:

  • 截图
  • 获取手机信息
  • ipa包的安装和卸载
  • 根据bundleID 启动和停止应用
  • 列出安装应用信息
  • 模拟Xcode运行XCTest,常用的如启动WebDriverAgent测试(此方法不依赖xcodebuild)
  • 获取指定应用性能(CPU,MEM,FPS)
  • 文件操作
  • 其他
    支持运行在Mac,Linux,Windows上
    官方地址:https://github.com/alibaba/taobao-iphone-device

2.环境准备

Python3.6+
Mysql (docker)
grafana(docker)

3.实现思路

  • 使用tidevice选定连接的被测手机和被测app
  • 启动app和程序,将开启app后每秒的设备性能信息采集将采集到的数据存储到mysql
  • grafana设置mysql数据源
  • 配置grafana展示图表
  • 配置展示图表的刷新时间

4.具体步骤

  1. 数据库建立相应的测试库和测试表,主要是我们要收集的fps,cpu,memory,network等4个表,表的结构就是时间戳和相应的数据 比如fps表:


2. 连接手机,指定要测试的应用(以 fun club为例子)
`
#使用 tidevice applist来查看手机app列表

t = tidevice.Device()
perf = tidevice.Performance(t,list(tidevice.DataType))
#print(list(tidevice.DataType))
appid='com.xxx.xxx.xxxxxxx'  #填写自己需要测试的app包名即可
  1. 设定程序的运行时常,启动指定的app,查看回调函数输出的数据格式

  1. 从返回的字典数据里,分别提取对应的cpu,network,memory,fps数据和时间戳,然后插入数据库相对应的表。以fps为例子
def callback(_type: tidevice.DataType, value: dict):print("R:", _type.value, value)if _type.value =='fps':fpsdata = valuefps = fpsdata.get('fps')time = timeStamp(fpsdata.get('timestamp'))db = pymysql.Connect(user='root', password='123456', host='localhost', database='mytest')cursor = db.cursor()sql="INSERT INTO `mytest`.`my_fps` (`fps`, `time`)VALUES ('%s', '%s')" %(fps,time)try:cursor.execute(sql)db.commit()except:db.rollback()db.close()
  1. 检查数据库对应的表是否有数据插入(以fps为例)

  1. 启动grafana 设置mysql数据源

  1. Add Panel 选择折线图 进行相关配置,以fps为例

  1. 设置grafana的时间以及定时刷新的频率

  1. 配置好4个图表,grafana设置图标刷新时间为1秒

10.设定好程序运行的时常 启动app 首页静止, 查看折线图

11.funclub进入ludo游戏,查看折线图数据(21:06开始)

12.在对应的时间打标签


我的博客(https://vwo50.club)有分享更多好玩的计算机知识,欢迎访问 vwo50博客站

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/50009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习深度学习——针对序列级和词元级应用微调BERT

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——NLP实战(自然语言推断——注意力机制实现) 📚订阅专栏:机…

【C++设计模式】用简单工厂模式实现按汽车重量输出汽车类型

2023年8月24日&#xff0c;周四凌晨 #include<iostream>class CarType{ public:virtual std::string getType()0; };class MiniCar:public CarType{ public:std::string getType() override{return "小型车";}; };class MidSizeCar:public CarType{ public:std…

游戏出海需知:Admob游戏广告变现策略

越来越多的出海游戏公司更加重视应用内的广告变现&#xff0c;而 AdMob因为其提供的丰富的广告资源&#xff0c;稳定平台支持&#xff0c;被广泛接入采用。 Admob推出的广告变现策略包括bidding、插页式激励视频、开屏广告、各种细分功能的报告等等。 一、Bidding 竞价策略 …

CSS background 背景

background属性为元素添加背景效果。 它是以下属性的简写&#xff0c;按顺序为&#xff1a; background-colorbackground-imagebackground-repeatbackground-attachmentbackground-position 以下所有示例中的花花.jpg图片的大小是4848。 1 background-color background-col…

解决docker无法执行定时任务问题

背景 在docker里面想创建定时任务&#xff0c;但是发现时间到了并没有执行&#xff0c;第一时间想到应该是没有开启crond服务&#xff0c;然后执行systemctl status crond.service报错如下所示&#xff1a; System has not been booted with systemd as init system (PID 1).…

ReactNative 密码生成器实战

效果展示图 使用插件 Formik 负责表单校验、监听表单提交、数据校验错误信息展示 Yup 负责表单校验规则 分析页面 从上述的展示图我们可以看到的主要元素有&#xff1a;输入框、单选按钮和按钮。其中生成的密码长度不可能很大也不可能为负数和 0&#xff0c;所以我们可以限…

QGraphicsItem的缩放

QgarphicsItem是Qt视图体系中的项。QGraphicsItem本身是不支持鼠标拖动来缩放的&#xff0c;本文介绍如何通过更改鼠标事件来修改项的大小。下文代码实现的功能为&#xff1a;按住shift&#xff0c;再用鼠标拖动&#xff0c;可以改变Box的大小。 定义类Boxclass Box:public QG…

5.6 汇编语言:汇编高效数组寻址

数组和指针都是用来处理内存地址的操作&#xff0c;二者在C语言中可以互换使用。数组是相同数据类型的一组集合&#xff0c;这些数据在内存中是连续存储的&#xff0c;在C语言中可以定义一维、二维、甚至多维数组。多维数组在内存中也是连续存储的&#xff0c;只是数据的组织方…

解决问题:如何在 Git 中查看提交历史

可以使用以下命令查看 Git 中的提交历史&#xff1a; git log这将显示当前分支上的所有提交历史。每个提交的输出包括提交哈希&#xff08;SHA-1 值&#xff09;、作者、日期和提交注释。 您也可以添加一些选项&#xff0c;以获取更详细的提交历史&#xff1a; --oneline 显示…

idea的断点调试

1、行断点 首先在代码的最左侧点击会显示红色的圆圈 第二步在main方法中右键选中debug run进行运行 会出现下面图片的情况 出现上图之后&#xff0c;点击console 下一步 这个时候就可以看到调试的结果了 6、方法调用栈&#xff1a;这里显示了该线程调试所经过的所有方法&…

“深入解析JVM内部结构与工作原理:揭秘Java虚拟机的奥秘“

标题&#xff1a;深入解析JVM内部结构与工作原理&#xff1a;揭秘Java虚拟机的奥秘 摘要&#xff1a;本文将深入探讨Java虚拟机&#xff08;JVM&#xff09;的内部结构和工作原理&#xff0c;帮助开发者更好地理解JVM的运行机制&#xff0c;从而提高Java程序的性能和稳定性。 …

C语言小白急救 指针进阶讲解1

文章目录 指针一、 字符指针二、 指针数组三、数组指针1.数组的地址2.数组指针3.数组指针的应用 四、数组参数、指针参数1. 一维数组传参2.二维数组传参3.一级指针传参4.二级指针传参 五、函数指针1.函数的地址2.函数指针3.练习 指针 指针的概念&#xff1a; 1.指针就是个变量…

Redis性能配置优化

1、内存优化 Redis的性能取决于可用内存的大小。如果内存不足&#xff0c;Redis将开始交换&#xff08;swap&#xff09;&#xff0c;这会极大影响性能。因此&#xff0c;首先我们需要确保Redis所用内存的数量合理。 对于合理的内存使用&#xff0c;我们需要对Redis的maxmemory…

跨越边界:从前端切图仔走进iOS开发(Swift版--上集)

本文简介 点赞 关注 收藏 学会了 本文将以前端开发者的视角&#xff0c;和各位工友进入iOS开发的世界。 本文以实战为导向&#xff0c;快速掌握iOS开发这个技能。 无论你是想要扩展技能领域&#xff0c;还是对iOS开发充满好奇&#xff0c;花一个下午学习本文都能打开iOS开…

微服务中间件--http客户端Feign

http客户端Feign http客户端Feigna.Feign替代RestTemplateb.自定义Feign的配置c.Feign的性能优化d.Feign的最佳实践分析e.Feign实现最佳实践(方式二) http客户端Feign a.Feign替代RestTemplate 以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http:…

【ARM】Day9 cortex-A7核I2C实验(采集温湿度)

1. 2、编写IIC协议&#xff0c;采集温湿度值 iic.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "led.h" /* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_S…

Baidu World 2023,定了!

1. 定了&#xff0c;Baidu World 2023 终于定了&#xff0c;今年的 Baidu World 将会于 2023-10-17 日在北京首钢园正式召开&#xff0c;主题为『生成未来 / PROMPT THE WORLD』&#xff0c;这也是近4年来 Baidu World 再次恢复线下举行。 有些小伙伴们如果还不知道什么是 Baid…

tda4 videnc-test-app: CONTINUOUS and STEPWISE FRAMEINTERVALS not supported

/* videnc-test-app */ https://git.ti.com/cgit/jacinto7_multimedia/ git clone https://git.ti.com/git/jacinto7_multimedia/videnc-test-app.git // 编译 ./autogen.sh ./configure --enable-maintainer-mode --buildi386-linux --hostaarch64-none-linux CC/home/share…

GMS基本模块TIN、Solids、Modflow2000/2005、MT3DMS、MODPATH。及其在地下水流动、溶质运移、粒子追踪方面的应用

解决地下水数值模拟技术实施过程中遇到的困难&#xff0c;从而提出切实可行的环境保护措施&#xff0c;达到有效保护环境、防治地下水污染&#xff0c;推动经济社会可持续发展的目的。 &#xff08;1&#xff09;水文地质学&#xff0c;地下水数值模拟基础理论&#xff1b;&am…

Kotlin 中的 协程 基础篇

一、什么叫协程 协程可以称为轻量级线程&#xff0c;线程代码块&#xff1b; 二、GlobalScope 协程 CoroutineScope (协程作用域) 的上下文中通过 launch、async 等构造器来启动。GlobalScope ,即全局作用域内启动了一个新的协程&#xff0c;这意味这该协程的生命周期只受整…