我们这样做容器分层性能测试

news2024/11/18 16:45:22

前言

目前闲鱼不少业务正在从H5/Weex升级到Kun(基于W3C标准&Flutter打造的混合高性能终端容器),从测试角度来看,我们希望这种升级迭代对于用户体验是正向的,所以用好性能测试这把标准尺就显得格外重要。

早期做性能保障时,我们在一些核心场景要上线或者上线之后遇到问题时,才去跑一些性能测试,这种方式只知道性能变差了,至于差在哪里,就只能反推开发去查问题,效率低且容易出问题。今年我们提出了基于容器分层的性能测试,目的是提前将性能风险点抛的更前置、更明确,特别对于Kun,除了容器本身的影响,Flutter引擎也会影响性能体验。

我们要测什么

性能指标对齐

在确定我们要做性能分层测试后,第一个问题就随之而来——性能测试到底要测什么,什么样的指标才能够去衡量一个页面的好坏。我们有两个选择:A、业界通用的指标,和友商APP的度量标准对齐;B、开发打点,测试侧对数据进行清洗;我们毫不犹豫选择了方案A,因为我们期望的性能测试并不只是在闲鱼内部赛马,而是说这些数据也能与友商以及业界标杆APP看齐,追求更加极致的用户体验。最终我们KO确定的指标如下:

7bf5dd2586a857764b4c9939b8bb8429.png

我们对现有的主干业务场景以及技术栈进行了梳理,并结合核心的业务场景和关键能力组件,建立对于引擎电商领域核心的数据观察策略,沉淀各个能力层和领域层度量体系,用于衡量在各个领域层开展相关性能优化取得的效果。

  1. 1. 明确基于Flutter引擎层,对齐Flutter页面和Kun页面的度量体系标准;

  2. 2. 分别基于组件层面和核心业务,搭建benchMark测试场景;

  3. 3. 回归业务,从核心业务层观测判定性能优化结果

3d534f42d9e135d8715a130b90a0f7a6.png

分层性能场景

我们按照上文中提及的分层策略,确定了最终测试的场景,在benchMark中,我们侧重于关注组件和核心组件场景的性能情况,最后会在闲鱼APP的上层业务中,验证对大盘整体水位的影响,如下图所示为我们性能测试分层覆盖的内容:

15dcb551c1c42d435b7f259c1ab7ffb1.png

多维度度量

闲鱼APP是混合技术栈,其中包含H5、Weex、Native以及Flutter、KUN,目前闲鱼有很多业务正在逐渐从H5/Weex升级到Kun,那我们如何拉齐标准,保证APP性能的稳定性呢?为此我们通过多维度的测试,来保障性能的稳定:

  • • 极限压测门槛:使用中、低端机压测,关注在极限场景下,APP是否会出现Abort或crash;

  • • 横向对比:横向对比我们会将技术栈升级前后的两个版本进行对比;

  • • 版本对比:业务迭代跟随版本需做回归,确定版本的波动指标;

  • • benchMark测试:构建极速验证版benchMark工具平台,部分场景通过mock数据排除网络等不稳定因素的干扰,快速验证组件层面的性能波动;

除此之外,不同的应用场景,我们对指标的使用也略有不同:

76806405ec7be663d97a2480cdadea58.png

通过以上过程分析,和多维度性能度量体系的建立,我们已经明确了整个性能分层测试的纲领——怎么度量、度量什么内容。接下来就是实操过程——如何更方便、更快捷的把这些数据测出来,同时更直观的展示给开发同学,让他们能够确定自己的优化是有效的。

我们该怎么测

测试脚本

滑动速度的快慢,对性能稳定性数据的产出起到关键性作用,我们在性能测试过程中,通过不断的调试优化脚本,最终使滑动的方式尽量贴合用户的操作习惯,区分快慢滑场景,对性能数据进行采集。如下图所示为我们模拟用户快慢滑场景的测试录屏。

457439c9996cce5e99107e34d223c1fc.gif
快滑
f7d72f53153a11b727ba8ae1b2a04d24.gif
慢滑

另外,为了保障脚本的通用性和易用性,我们封装了通用脚本库,在这些库中包含了如何提取环境变量、如何开始性能收集以及一些关于录屏、分帧等操作。对于简单的测试需求,大多数使用者只需要在前台勾勾选选就能够完成测试需求,而不需要每个业务方都投入精力去维护一套测试代码。

基建建设与能力升级

我们分析闲鱼现有的性能平台能力,虽然一定程度上能够支撑性能分层测试,但是在易用性、扩展性上还是存在一些缺陷,主要存在以下4个问题:

  • • 设备排队久:开发同学经常会问任务为什么一直在执行中,然后排查之后发现大家的任务都集中成一台设备上执行。

  • • 任务创建复杂:随着老平台的使用,创建任务表单字段在不断的增长,从而导致创建任务时经常会选错或填错。

  • • 报告对比难:老性能平台大多数应用场景是在版本的性能测试,所以报告对比能力较弱,很多时候需要大家手动整理几个报告来查看差异。

  • • 数据需频繁订正:老性能平台在页面加载时长测试能力上一直比较薄弱,需要测试同学订正每个录屏数据,确定页面加载的起始帧和结束帧,在有大量benchMark测试需求时,这种订正成本暴露的更加明显。

针对以上问题,我们设计了性能实验室2.0,其整体架构如下图所示

dcfabdabd5fe8f3fd66f6fbf879d9ed8.png

设备库优化

首先针对设备排队问题,我们扩展了闲鱼的手机设备池,从原有的8台设备扩展到了16台,覆盖了低、中、高机型。同时针对开发同学不知道该选什么设备的问题,我们对各类设备进行了分组圈选打标,以保障各类任务都有不同的设备在执行,在同组设备中,如果开发选择的设备正在执行任务,我们的任务调度系统会在该设备组中选择同样型号的设备来执行任务,这样在提高任务的执行效率的基础上,同时也能让机器分担的任务更加均匀,确保设备的性能水位是基本持平。

性能任务模板

针对于任务创建流程长,参数填写复杂容易出错的问题,我们引入了任务模板的概念。在设计任务模板时尽量考虑高扩展性,用户如果有需要额外的字段,只需要通过动态添加相关环境变量即可传入,脚本底层也封装了相关参数获取方法。通过该设计使脚本任务的参数和平台的参数进行解耦,用户在使用模板创建任务时,不需要考虑脚本内部需要的参数以及细节,只需要调整安装包地址即可。

876b36d71eed472bba4c9ac0c97a71ee.png

建立数据归档

解决了任务创建复杂、执行慢的问题后,遗留下来的问题就是各种类型报告的比较。在容器分层性能测试中,我们除了对业务场景进行性能测试,还需要对不同的容器、不同的benchMark进行测试比较,如果依旧采用手工整理数据进行比较成本高、容易出错且回溯困难。因此我们对结果展示功能进行了扩展,用户不仅能够查看单次报告数据,还能够挑选任意的其他报告进行比较,这样开发同学可以在任务结束之后,通过筛选对比,一目了然地确定优化是否有效。

f7f106bf69cfe25f74205b8bffde2521.png

有什么效果

经过一阶段的实践,目前性能实验室2.0已经上线试运行约15天,累计执行任务360余个:

  • • 人力成本降低:之前开发创建任务时总是找相关同学答疑,新平台上线后,除了新增模板以及设备需求,该类问题已不存在。同时对于启动时长的起始帧/结束帧的订正问题也给予了解决,从之前的10分钟手动订正降低至2-3分钟确认无误即可。

  • • 高效稳定:任务成功率94%,设备排队问题得到一定缓解。

  • • 数据分析便捷:通过新平台,开发同学可以直接任意比较相关实验数据,更快得到测试结论,释放了整理数据的人力。

  • • 分层验证效果:通过benchMark的建设,负责不同优化点的同学使用对应的benchMark模板即可快速验证其优化效果,各行其是,也能够快速定位到问题。

  • • 问题深入化:通过新平台的使用以及对比,我们发现在Flutter的一些性能数据收集上存在问题,通过调研了解到相关原因,并找到了新的收集方法。

    我们还要做什么

目前针对于容器分层性能测试已经实现了一个小的闭环,开发同学已经能够完全自助测试并且分析相关数据,在后期我们会持续深入挖掘相关工作。

  • • 丰富完成benchMark,更细化地确定优化效果以及最终收益

  • • 减少性能测试的等待时间,提升测试效率

  • • 制定标准的发布标准要求,保障新技术演进有质有量

  • • 将性能测试前置到版本集成前,性能问题发现更前置

  • • 探索问题定位能力

742da43e280348ee39e6119bcc9e9d84.png

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

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

相关文章

有什么比较好用的低代码开发平台?

国内有特色的低代码快速开发平台产品有哪些?这篇就来介绍下目前市面上主要的几家零代码开发平台! 简道云、明道云、IVX这几家目前是无代码赛道的明星选手,在市场综合表现上名列前茅。宜创、红圈营销虽也极具潜力,但在市场表现力上…

Java开发技术之成为高级java工程师必须学习的三个技术

所谓的Java高级程序员往往是经验和能力的结合,并不是说掌握了哪几个技术就是高级程序员了,能否把掌握的知识运用到实际的项目中,并且解决了具体的问题,这个才是衡量一个Java程序员的标准。 那么对于一名Java程序员来说&#xff0…

Java项目:房屋租赁系统设计和实现(java+ssm+mysql+spring+jsp)

源码获取:博客首页 "资源" 里下载! 主要功能描述: 1.登录管理:主要有管理员登录和租客登录 2.房源列表以及添加房源功能: 3.租赁合同管理以及在租房源和已退租房源信息管理: 4.看房申请和退租申请管理&a…

【 java 集合】HashMap源码分析

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

python基础篇之列表(增删改查)

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页:lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm1000.2115.3001.5343 哔哩哔哩欢迎关注&…

excel数据统计:三个公式提高统计工作效率

善于在工作中使用函数、公式可以提高工作效率,结合近期学员们遇到的问题,老菜鸟总结了三个非常实用的公式,每个公式都可以解决一类问题。学会这三个公式套路,就能解决日常遇到的很多麻烦事。第一类问题:对指定时间段的…

通过nvm 控制node的常见命令

通过nvm 控制node查看本电脑安装的node版本号切换到对应的node版本号可以查看nvm的全部命令查看node可安装的全部版本号下载对应node的版本查看本电脑安装的node版本号 nvm ls 查看本电脑安装的node版本号 切换到对应的node版本号 nvm use 版本号 切换到对应的node版本号 注意…

基于Python + Django 的密码自助平台项目(完整代码)

场景说明:因为本公司 AD 是早期已经在用,用户的个人信息不是十分全面,例如:用户手机号。 钉钉是后来才开始使用,钉钉默认是使用手机号登录。 用户自行重置密码时如果通过手机号来进行钉钉与 AD 之间的验证就行不通了。逻辑&#x…

Linux驱动开发基础_在设备树中指定中断以及在代码中获得中断

目录 1 设备树里中断节点的语法 1.1 设备树里的中断控制器 1.2 设备树里使用中断 2 设备树里中断节点的示例 3 在代码中获得中断 3.1 对于 platform_device 3.2 对于 I2C 设备、SPI 设备 3.3 调用 of_irq_get 获得中断号 3.4 对于 GPIO 1 设备树里中断节点的语法…

OVN实验----L3互通

概述 物理拓扑 如上一个实验OVN实验----L2互通 逻辑拓扑 按照上个实验OVN实验----L2互通 的操作方式,再配置一组容器blue,网段192.168.2.0/24 配置完成后可以在central上ovn-sbctl show看到如下4个绑定接口 此时,red和blue两个网段内是可…

EasyTrans,一个注解搞定数据翻译,减少30%SQL代码量

介绍easy trans适用于3种场景1 有userId/idCardNo(身份证号码-唯一键场景) 需要 userName,无需联表查询。2 有gender code 0 需要 男。3 枚举指定属性给前端亮点1 缓存支持2 跨微服务翻译支持(User和Order 是2个不同微服务,order里面有userId 需要userNa…

strapi系列--如何自定义非界面化的接口,定制化自己的业务逻辑

为什么要进行后端定制呢? 在实际开发过程中,项目中有些需求是不需要创建界面化接口的,需要我们定制化自己的业务逻辑,那么我们该如何处理这个需求呢?本文以图文并茂的形式,定制一个我们自己的业务逻辑接口…

blender 应用物体变换的作用

编辑模式和物体模式操作的区别 旋转 在物体模式下旋转时物体旋转值会发生变换** 在编辑模式下旋转时物体不会发生变化** 缩放 在物体模式下缩放会导致缩放尺寸发生变化 在编辑模式下缩放时,缩放属性不会发生变化 应用物体变换 把物体模式下的缩放旋转变换应…

Android---TabLayout

目录 TabLayout TabItem ​编辑 演示效果的xml TabLayout TabLayout 在开发中一般作为选项卡使用,常与 ViewPager2 和 Fragment 结合起来使用。 常用属性: app:tabBackground 设置 TabLayout 的背景色,改变整个TabLayout 的颜色&#xf…

绪论的习题

刘佳瑜*,王越 *, 黄扬* , 张钊* (淮北师范大学计算机科学与技术学院,安徽 淮北) *These authors contributed to the work equllly and should be regarded as co-first authors. 🌞欢迎来到机器学习的世界 🌈博客主页&#xff1…

idea调试常用的快捷键

一、F7 步入调试,进入当前函数内部。 说明: 如果步入的是自己编的函数,可读性会好很多。 如果是系统函数,我个人目前水平,觉得很难读。而且idea系统已编写好的函数,除非是研究源码,否则感觉…

javaweb08 javaweb、tomcat、maven简介、servlet原理和实例、Mapping映射、请求转发和读取properties文件

文章目录一、javaweb简介二、Tomcat三、Maven四、Servlet简介和HelloWorld五、Servlet原理六、Mapping映射七、ServletContext八、请求转发九、读取资源文件properties一、javaweb简介 在java中,动态web资源开发的技术成为javaweb 人们访问到的任何一个网页和资源…

C语言字符串库函数模拟实现

字符串检验 strlen 函数原型 /// brief 返回给定空终止字符串的长度,即首元素为 str 所指,且不包含首个空字符的字符数组中的字符数 /// param str 指向要检测的字符串的指针 /// return 字符串 str 的长度 size_t strlen( const char *str );空终止字…

C语言实现通讯录静态版本

通讯录中首先要有人的信息,然后是存放多少个人的信息 再丰富一下通讯录的功能,例如增删查改、显示、排序。 我们分三个文件来实现。 1、实现简易的菜单,通讯录的整体逻辑 #include"contact.h"void menu() {printf("*****…

900页文档比对只需5分钟?鸿翼InWise文档比对,以人工智能撬动办公效率杠杆

在日常办公中,多份文件间的检查、纠错、复核工作不可避免,这类工作往往具有很强的重复性,占用了大量的工作时间。鸿翼InWise平台文档比对能够赋能企业极速完成海量文档、图片的高精度比对,以人工智能撬动企业生产力提升。 随着数字…