基于机器学习的启动耗时自动化测试方案(一)

简介: 基于机器学习的启动耗时自动化测试方案(一)

image.png

背景


当一个应用的用户越来越多,业务越来越复杂,性能问题就会突显,特别是在低端机上的用户感受尤为明显,甚至会影响到应用的用户活跃度、停留时长等重要指标,提升应用在中低端机上的性能迫在眉睫。如何来对研发同学的优化做出合理的评测我们需要思考下面两点:


  • 要避免“运动式”性能优化, 有不少团队在投入了大量时间和精力对应用进行专项治理之后,由于缺少常态化的管控和治理手段,最终导致性能震荡式波动恶化;
  • 线上的埋点日志数据不能完全反应用户对应用的真实体验和感受;


而影响用户体验最重要的一个指标就是启动耗时(启动+首屏),特别是应用拉新的时候,关于如何测量启动耗时,一般有两个方向:一是通过技术埋点,但基于技术埋点记录数据很难衡量用户真实体感(线上统计数据好?真实体感却差?),而且也无法基于技术埋点获取竞品数据;另一个是通过录屏分帧测试,但是人工录屏逐帧分析会有人为感知误差(结束位边界认知不一致),而且人工性能专项测试持续交付ROI不高,比如录制10次,抽取关键帧取平均值,差不多要花费将近一个小时,采样次数越多,耗时越久。由于最近一段时间在看机器学习的书,所以在想能不能拿这个案例来实践一下。

在此之前我也调研了一下业内已有的类似方案:有通过OCR文字识别的、也有通过图像对比的,其中图像对比的方案如果是整图对比,视频启动过程中的广告、首页海报是变化的,这样无法准确识别;另外如果是部分对比,那么应用完整启动后第一屏不完全展示的地方,每次不一定在同一处,于是我参考了各种方案后,结合自己的想法,就把整个方案实现了一遍,接下来详细介绍一下此方案。


整体流程


阶段一主要是采集数据,将视频转换为图片,生成训练数据和测试数据


image.png


阶段二主要是训练模型

image.png

阶段三主要是通过训练好的模型进行预测并计算启动时间


image.png

环境准备


由于整个方案我是通过Python实现的,所以本地需要安装好Python环境,这里我使用的是Mac电脑所以默认带的Python环境,但如果要用到Python3需要自己升级,另外要安装pip工具:

brew install pip3


安装scikit-learn,一个简单的机器学习框架,以及依赖的科学计算软件包numpy和算法库scipy:

pip3 install scikit-learn
pip3 install numpy
pip3 install scipy

图片处理库OpenCV和imutils:

pip3 install opencv-contrib-python
pip3 install imutils

对视频文件进行分帧处理的ffmpeg:

brew install ffmpeg

安装airtest框架(网易的一个跨平台的UI自动化框架):

pip3 intall -U airtest


安装poco框架(网易的一个跨平台的UI自动化框架)

pip3 install pocoui


注意:需要将Android手机开发者选项中的触摸反馈开关打开,这样就可以准确识别出点击应用icon的时刻。


image.png

阶段一


首次安装

由于应用第一次安装会有各种权限弹框,为了避免影响测试准确性,我们需要把第一次安装时候的弹框点掉,然后杀掉应用重新启动计算冷启动时间。


另外要模拟用户真实体感,首先要模拟用户真实的点击应用启动的过程,这时候不能通过adb直接唤起应用,我是通过poco框架来实现点击桌面应用icon的。

poco = AndroidUiautomationPoco()
poco.device.wake()
poco(text='应用名字').click()
poco(text='下一步').click()
poco(text='允许').click()
poco(text='允许').click()
poco(text='允许').click()
os.system("adb shell am force-stop {}".format(package_name))


启动录屏

用adb命令开启录屏服务,—time-limit 20 表示录屏20秒,一般情况下20秒启动加首页基本能完成,如果是在低端机上可以适当延长时间。


录屏通过单独线程启动。

subprocess.Popen("adb shell screenrecord  --time-limit 20 /sdcard/sample.mp4", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)


启动应用

测试前对被测应用进行安装,然后在点击完权限弹框后,杀掉进程重新点击桌面icon启动应用。

os.system("adb install -r {}".format(apk_path))
poco(text="应用名字").click()


等录屏结束后杀掉进程,然后重复上面的启动过程,根据采样率决定重复几次。

os.system("adb shell am force-stop {}".format(package_name))


视频分帧

将录制好的视频从手机中拉取到本地,然后通过ffmpeg进行分帧处理。

os.system("adb pull /sdcard/sample.mp4 {}".format(video_local_path))
os.system("ffmpeg -i {} -r 60 {}%d.jpeg".format(video_local_path, test_path))
-r 指定抽取的帧率,即从视频中每秒钟抽取图片的数量。60代表每秒抽取60帧。


提取训练集和测试集数据

我们一般把数据按照80%和20%的比例分为训练集和测试集,这里我们可以录制10组数据,把其中8组作为训练集,2组作为测试集。


相关文章
|
1月前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
【10月更文挑战第6天】如何使用机器学习模型来自动化评估数据质量?
|
1月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
15天前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
如何使用机器学习模型来自动化评估数据质量?
|
21天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
47 4
|
23天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
24 1
|
28天前
|
机器学习/深度学习
自动化机器学习研究MLR-Copilot:利用大型语言模型进行研究加速
【10月更文挑战第21天】在科技快速发展的背景下,机器学习研究面临诸多挑战。为提高研究效率,研究人员提出了MLR-Copilot系统框架,利用大型语言模型(LLM)自动生成和实施研究想法。该框架分为研究想法生成、实验实施和实施执行三个阶段,通过自动化流程显著提升研究生产力。实验结果显示,MLR-Copilot能够生成高质量的假设和实验计划,并显著提高任务性能。然而,该系统仍需大量计算资源和人类监督。
29 4
|
28天前
|
机器学习/深度学习 数据采集 监控
如何使用机器学习模型来自动化评估数据质量?
如何使用机器学习模型来自动化评估数据质量?
|
1月前
|
机器学习/深度学习 存储 测试技术
从0到1:如何规划一套流量回放自动化测试方案
本文介绍了流量回放自动化测试的完整方法,从企业战略到交付的四个关键环节:Discovery(深度挖掘)、Define(定义目标)、Design(详细设计)和Delivery(交付与反馈)。通过这些步骤,帮助企业优化系统性能和稳定性,确保产品的高质量。
55 4
|
1月前
|
机器学习/深度学习 供应链 搜索推荐
机器学习驱动的工厂自动化
机器学习驱动的工厂自动化是一种利用先进的机器学习技术来提升生产效率、降低成本和提高产品质量的智能制造方法。
38 2
|
1月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
35 3
下一篇
无影云桌面