● 需求背景
Kim PC端在每一个版本的迭代过程中,由于各版本的功能改动较多,为了避免在发布新版本时性能不会出现“大跳水”的情况,需要针对每一个版本进行性能测试。由于人工手动测试所需时间较长,且存在参数不准确、时间不可控等问题,所以需要针对PC 端开发一款性能自动化工具,以此降低人力投入成本,提高测试效率。
● 性能指标
- 冷启动速度
■ FP(启动弹窗时)
■ FCP(roomlist框架刚加载出来时)
■ FMP(RoomList中LastMessage加载完成)
■ TTI(Kim首页数据完全加载)
■ 会话载入(点击会话到会话加载完成) - 冷启动内存
■ 内存(冷启动之后的稳定值)
■ CPU(冷启动之后的稳定值) - 业务场景耗时
■ 耗时(执行该场景前后所消耗的时间) - 前台内存
■ 内存(多次执行固定业务case之后各进程的内存变化趋势)
■ CPU (多次执行固定业务case之后各进程的CPU变化趋势)
5. 温度
■ CPU 温度(多次执行固定业务case之后电脑的CPU温度变化趋势)
■ GPU 温度(多次执行固定业务case之后电脑的GPU温度变化趋势)
● 主要贡献
参与方案制定、负责工具开发
● 技术方案
该工具主要分成两个模块,即性能日志解析模块和进程监控模块。其中性能日志解析模块通过Python脚本将Kim客户端生成的性能日志进行解析及可视化展示,生成冷启动速度、冷启动内存、业务场景耗时等相关数据。进程监控模块通过 PC UI 自动化脚本(Cucumber框架)执行固定业务场景case,同时执行 Shell 脚本收集case运行过程中的相关性能日志,最后将采集的日志通过 Python 进行解析并绘制图像,得到规定时间内的前台内存及温度的变化趋势。
该工具的执行流程如图1所示。其总共分成3个模式,分别是版本全场景测试模式、性能日志解析模式、进程监控模式。其中版本全场景测试模式用于启动版本性能测试,只需启动该模式即可获得相关性能数据图及数据表;性能日志解析模式可单独对性能日志进行解析,可用于解析线上用户的性能日志,生成数据报告以便排查问题,该模式可以获取Kim冷启动速度、冷启动内存及相关场景耗时数据;进程监控模式可通过设置监控时长,结合PC 端 UI 自动化case触发的业务场景,得到该时长内的内存、温度变化数据,可用于内存泄露的分析。
目前Kim各版本的性能报告均存储在本地,之后将通过本地数据上传至阿拉丁平台的方式,对每个版本的性能数据进行可视化及保存,并进行版本间的数据对比,更清晰地分析出版本间的性能变化。
图1 PC端性能自动化测试工具流程图
● 实践过程及可视化展示
工具运行的过程如图2所示,在运行之后可以通过输入数字“1”、“2”、“3”选择对应的模式,选择完成之后即可运行对应的功能。
图2 PC端性能自动化测试工具运行过程图
若用户输入“1”,则进入“版本全场景测试”模式。该模式用于一键生成 Kim 版本性能测试中所需的所有性能数据,包括性能日志解析数据和前台内存数据。其中性能日志解析数据为各进程冷启动内存、各进程冷启动CPU、冷启动耗时、业务场景耗时,前台内存数据为执行固定业务case之后各进程内存、CPU的变化趋势图以及期间CPU、GPU温度变化趋势图。性能日志解析和前台内存监控如模式2、模式3所述。
若用户输入“2”,则进入“性能日志解析”模式,该模式可用于快速生成某版本当前的性能数据报告。在程序执行完成之后,该工具将性能日志按照特定格式进行解析,并通过固定的格式进行编排,即可获得性能日志解析数据报告,具体如图3所示。若出现用户反馈Kim性能问题时,可通过隐藏在Kim中的开关采集性能日志,对该日志进行解析并生成报告,以便排查问题。
图3 性能日志解析数据报告
若用户输入“3”,则进入“进程监控”模式,在输入需要监控的时长之后,即可在该时长内对任意一个进程持续监控其内存、CPU变化趋势。同时,若结合PC端的UI自动化case,通过不断地执行同一场景的业务case,根据生成的性能趋势图,可用于前台内存数据分析、内存泄露排查等场景。
图4 内存、CPU、温度变化趋势图
● 收益
在工具产生前:对每个版本的常态化性能测试以及业务需求的性能测试,通过手工测试以及视频分帧的方式收集页面耗时数据,完成性能测试。一次版本性能测试需要占用人力5p/d。
工具产生后:在设定执行时间及时长之后,可自动生成相关的报告及数据,只需要对数据进行总结分析即可,释放了人力4p/d。