查看原文
其他

醒图基于数据驱动的性能防劣化实践

陈乾发 字节跳动技术质量 2022-09-06



零 、醒图的性能窘境

醒图业务流量急剧上升,发展速度很快;醒图模板功能上线后,激发了广大创作者的创作热情,也为产品运营提供更丰富的抓手。在APP版本高速迭代之际,随着DAU提升与后期发布模板功能逐步开放,丰富多样的玩法也对性能测试提出了新的挑战:

  1. 底层模块升级或重构,需要回归的场景非常多,怎么能快速知道众多场景的性能指标是否有劣化趋势?

  2. 今天又上了几百个新模版,但昨天的前天的大前天的模板还有待审核的,人工性能回归速度远远跟不上模版的发布速度,捉鸡啊

  3. 每个模板对应的素材都不一样,有人脸的有人体的,素材和模版的交叉验证工作量好大啊

  4. 每次新发一个Release版本,都需要对核心场景进行性能回归

  5. 目前常用的基于UI或其他方式执行的性能测试,并不适用于醒图的性能验收方式


一 、 Easy 简单易上手的性能解法

基于以上背景,eTest针对醒图这种需要对多种素材和多种模版进行交叉测试的场景设计了一种基于数据驱动的性能防劣化解决方案,覆盖安卓、iOS主流机型,高效、实时定位APP性能、模板劣化问题。提供丰富的测试报告反馈用户测试结果、性能报告、设备分析;还可以通过点击测试截图,查看错误日志,还原测试过程。

1.1. 迭代模型

结合研发的版本迭代周期模型,我们提供了一套简单易上手的解决方案。遵从版本研发-自动化测试-结果分析-性能优化的研发迭代流程,开发完成版本研发后,QA同学可以使用提前准备好的测试素材(包括图片、场景等),手动启动一次自动化测试,也可以选择每天定期对测试包进行测试,自动化测试执行完成后,eTest会结合历史基准版本结果和QA同学预先配置好的规则红线进行结果分析,对于不符合预期的测试结果进行分级并生成测试报告,QA同学根据测试报告进行分析并将发现的问题反馈给开发进行性能优化。


如上图所示,醒图的性能自动化流程主要分为以下几步:

1、版本研发:开发同学按照日常迭代节奏进行版本研发,用户可以在eTest自动化测试平台上按Release包、CommitId或指定版本生成对应的测试包进行测试;

2、素材管理:用户可以提前在eTest自动化测试平台准备好测试用例(即有测试图片和测试场景的测试用例),用户可以使用分类对以上测试素材进行分类管理,并通过分类选择批量自动生成基准测试用例,便于后续启动自动化时使用;

3、自动化:用户可以选择手动或定期启动,任务启动后,eTest自动化测试平台会根据任务启动时的配置,将任务分配给对应的Jenkins/云构建服务进行执行,自动化测试worker再根据任务配置使用相应的测试机进行测试;

4、结果处理:自动化任务执行完成后,会将收集到的原始性能数据上报到eTest自动化测试平台,eTest自动化测试平台再根据历史基准版本的测试结果 和由用户事先配置好的规则红线,对测试结果进行分级,生成测试报告

5、测试报告:任务执行完成后,eTest自动化测试平台会生成一份包含测试包信息、基准版本比较和性能结果分级的报告,方便用户进行劣化分析;

6、监控告警:任务执行完成后,会将任务结果通过飞书告知任务创建人。

1.2. 执行流程

了解了醒图的性能自动化整体模型之后,接下来详细介绍一下具体的自动化执行流程,如下图所示:

当用户出发启动任务之后,eTest会根据启动任务时传入的配置参数,生成相应的子任务(安装包打包、申请测试机、性能自动化),并在上游任务执行完毕后,自动串行调用下一任务。在安装包打包阶段,打包子任务会判断当前版本的包是否已经打包过了,如果已经打包过了,则会跳过打包阶段,直接返回包信息;否则进入打包流程。在申请测试机阶段,会根据用户在启动任务时选择的资源池进行申请占用,如果有其他任务正占用了资源,则会持续等待直到资源释放。当其他前置任务结束后,会开始执行性能自动化测试任务,性能自动化子任务会先将打包阶段的安装包安装到执行机上,然后获取指定用例集进行执行,最终上报结果,由服务端进行结果处理和入库。

1.3. 基础功能

  • 测试机管理
    • 统一管理,机器使用情况一目了然

  • 素材&场景管理
    • 多层级设置,管理方便

    • 可根据业务需求灵活添加测试场景

  • 生成用例
    • 细粒度的素材跟场景配置,支持用户灵活自定义基准用例,同时提高复用性

    • 批量生成基准用例,系统会根据选择的素材和场景生成笛卡尔积数量的用例

  • 启动任务
    • 覆盖多种测试平台,本双月将引入PC端

    • 多种top机型,涵盖安卓、iOS多种主流中高端机型

    • 支持基于多种执行环境进行自动化测试

    • 测试包种类全面,包含“最新Release包”、“Commit ID包”、“测试版本”、“代码分支”包类型

    • 同时支持“有版本对比”、“无版本对比”对比模式

    • 支持手动/定时触发(CD)

  • 查看报告
    • 报告层级清晰,状态结果一目了然

    • 可支持结果筛选,快速寻找失败用例

    • 基本信息全面,提供丰富、全面的报错信息,帮助快速定位失败问题

  • 任务结果及时反馈
    • 任务结束,及时发送lark消息告知用户任务结果概况


二、Efficiency 有效的性能效果

2.1. 执行效率

eTest自动化测试平台支持将一个自动化任务分为多个阶段,阶段间按顺序串行执行,一个流程内可以并行执行多个子任务。如下图所示,一个性能自动化任务分为两个阶段,分别为打包阶段和自动化执行阶段。在打包阶段,可以并行执行多个版本的打包任务,也可以执行多个平台的打包任务。在自动化执行阶段,当依赖的上游打包任务完成之后,则会开始申请测试机器,并执行相应的自动化任务。因为灵活的任务编排方式和并串行执行方式,可以灵活地调度测试任务资源,达到提高执行效率的目的。

eTest的执行效率提升不仅体现在灵活的任务调度上,也体现在独立的打包服务上。我们摒弃在传统流水线上增加打包任务的方式,而是将打包过程服务化,提供通用的打包接口,支持流水线通过不同的参数调用接口触发打包任务,打包完成后则返回结果包。统一进行包管理,简化了打包流程,支持不同的自动化任务使用。同时打包服务会进行去重判定,如果多个打包任务实际上是针对相同版本或者代码进行打包的话,打包服务会进行去重,仅进行一次打包即可满足多个打包任务的需求,后续相同的打包请求也会直接使用已有包,这大大减少了安装包的打包次数和耗时。

在近214次打包任务中,有138次打包任务命中了去重策略,命中率高达64.5%,平均节省执行时间34.7分钟。另外,打包服务将所有自动化打包任务整体迁移到ies jenkins平台,解决平台以及机器不稳定导致的jenkins整体崩溃,从之前的2次/周降为0次。

2.2. 节省人力,提升人效

根据醒图测试同学的反馈,目前醒图性能自动化测试在新版本回归、重大重构回归和单功能场景回归等测试场景均能显著减少测试人力投入。

  • 新版本系统测试核心场景性能回归,内存泄漏,内存过大等问题拦截,异常性能点告警  2d

  • 重大优化重构的核心场景性能回归,异常性能点告警  2d

  • 单功能场景性能回归  0.5d

2.3. 发现典型问题

案例:**优化需求,应用全功能模板内存有明显增长

问题说明:Android 使用全功能模板后内存比线上大接近100M

醒图导入4k图片后,应用全功能模板,稳定后内存比线上接近大100M

问题原因:painter坐标系统重构需求,多生成一些纹理未及时释放,同时导致了卡顿的场景


三、Elastic 灵活可配的自动化

3.1. 测试物料统一管理,用例生成灵活可配

图片素材和自动化场景均可以根据分类进行灵活地区分;在新建用例时,根据分类选定一类素材和场景,进行批量生产基准用例;进而选用多个用例形成一个测试用例集,供测试执行使用。

3.2. 规则条件高度自定义,关联用例精度可控

用户可以根据不同的性能指标,配置对应的分级判定条件以及版本对比条件,然后对多个指标的判定条件进行组合配置,生成对应的规则。

例如:我们可以为内存峰值这个性能指标配置不同的告警条件,当相对对比版本内存峰值超过20时,则认为不符合预期,并详细设置了不同阈值对应的级别关系。当我们设置了条件,则可以根据条件设置不同的规则。

基于以上条件和规则的设定,我们可以对基准用例设置整个用例级别的告警规则,也可以针对某个场景操作设置告警规则。

3.3. 执行流程可灵活编排,增删节点可按需调整

eTest自动化测试流程支持测试任务灵活编排子任务节点,可以根据任务需要,进行任务节点的增删,灵活适配不同的自动化测试场景。


四、Enormous 无限可能的自动化体系

eTest自动化测试平台所有的自动化任务执行流程都是基于如下图所示的通用任务workflow体系。启动方式可以是由用户手动触发、定时任务触发或者其他方式通过接口触发等,当启动任务后,eTest则会根据传入的配置参数生成一个Job任务,并由Job任务指定的多个Process阶段生成对应的Task子任务。Task子任务可以自由灵活地进行串行或并行的编排,最后由eTest自动化测试平台的任务调度模块统一控制任务的调度与执行。

基于以上任务调度流程,我们可以根据业务需求任意编排自动化任务的执行阶段,复用其他自动化任务。同时我们也可以对每个阶段的服务进行深入挖掘,例如,我们在基础的图片场景管理功能上,进一步提供了批量生成基准用例的功能(如下图)。

我们将原本功能单一的自动化任务逐一丰富功能,逐步深入挖掘体验提升点,最终提供完整的测试自动化服务。如下图所示,我们基于基础的性能自动化任务,增加自动化性能指标分析和规则管理,整合所有测试资源,为醒图量身定制了一套完整的性能自动化服务。

当前的自动化体系,除了已经接入醒图业务之外,也正在适配轻颜和剪映的性能防劣化应用。而适配成本也很低,只需要捋清楚各个业务自动化执行的数据素材和用例生成规则即可以完成服务端的适配;而自动化执行方面,则需要在客户端适配用例生成的协议,驱动用例执行并收集性能数据进行上报。


、结语

eTest自动化测试平台针对醒图的性能测试需求,设计了一套基于数据的性能自动化解决方案。主要围绕着醒图的性能自动化测试流程,补充了测试物料管理的相关功能和规则配置管理功能,提供了完整的性能自动化解决方案。

加入我们

字节跳动互娱研发效能团队,互娱研发负责抖音、抖音火山版、剪映、FaceU、轻颜、直播、音乐等多款明星产品的研发,目前,抖音日活(DAU)已经突破 6 亿。

研发效能团队主打服务化+智能化,旨在通过工具平台+算法,赋能互娱的各个业务场景,团队职能包括但不限于提升研发效能,保证内容质量,优化用户体验,保障业务安全等。团队拥有算法,工程(前端、后台以及客户端)、数据(大数据、DA)、产品、测试等多种职能岗位,可以高效自闭环进行智能平台产品的设计研发,具有多个公司级影响力的智能化平台产品成功落地经验。

团队发展迅速,年轻富有朝气,注重技术氛围建设,积极参与国内外各顶尖行业技术会议,输出高质量技术专利和相关论文,工作 Base 地有深圳、杭州、广州、北京多地可选。

加入我们,让你的每一行代码都能服务亿万用户。

简历投递邮箱:iesep@bytedance.com;邮件标题:姓名 - 职能/技术栈 - 研发效能。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存