本文相关工具:stagesep
2018-9-10
将OCR修改为非必要,只需要具备python3环境就可以进行分析了
关于速度类性能测试的一些想法
速度类测试包括了启动速度、页面切换速度等不同类型,其核心思想是根据关键时间点对应用运行状态进行划分,以得到应用在不同状态间消耗的时间以判定运行效率。
其核心技术点是,关键点判定。个人认为可以分为依赖系统与不依赖系统两个方向:
依赖系统:倾向于与应用有更强的耦合,分析的主体通常是应用本身
深入应用,在应用中通过各种方式(通常是log)打点,最后通过分析日志得到点位
优点是由于深入到源码中,数据采集相对容易一些
缺点是需要修改到源码,并不是很方便。对于一些无法接触源码的项目行不通
不依赖系统:倾向于完全脱离应用进行分析,分析的主体可能是视频、图片等等
通过外置摄像机录制应用的响应过程,对视频进行采样、分帧,利用图像识别的手段得到点位
优点是对于应用本身几乎没有影响,也不需要接触源码,非常干净;且分析对象就是用户实际的体验效果,比起在源码中加log更加直观
缺点是技术难度相对比较大,对设备要求也比较高,需要有一套优秀的策略
比较好的策略是两条线都要做,在相辅相成的同时能够互相保证彼此的可靠性达到完全的覆盖。
日志采集是纯系统层面的行为,可能会有系统日志正常但表现异常的情况
图像识别是纯用户层面的行为,对于状态的控制很难达到如日志般精确细致
本文面向图像识别方案展开,力图覆盖更多的实际场景。
主要方案
一般来说,通过图像识别来进行测试分为三个步骤:
图像/视频 采集
这个部分通常由高速摄像机或稳定帧率的外置相机进行拍摄,得到固定帧率的视频
软件录制是不靠谱的,很容易出现帧率不稳定。而如果时间与帧数不能精确对应的话数据会失真
视频处理
提取视频中的信息,输出成为我们需要的形式
也是整个流程最关键的部分
数据分析
将视频处理的结果进行分析,得到结论或生成报告
其中,第一点如果能够将设备固化好是比较好解决的,而数据分析取决于视频处理的结果。
所以针对这种情况,我利用了图像识别与OCR,编写了一套性能测试工具,用于提取视频中有用的信息。
使用
通过使用stagesep,你可以将一段视频中每一帧的特征提取出来,生成数据供后续分析。
你只需要:
就能够将视频中的特征提取出来!以为分隔符,分别为:
帧编号
帧对应的视频时间
当前帧包含的文字
如结果为,代表当前帧中出现了字样
可以借此得到视频的不同阶段
与首帧的图像相似度
可以得到开始出现变化的时刻
与末帧的图像相似度
可以得到进入稳态的时刻
当前帧是否存在特征图片
当前帧没有出现该表情包
的结果为0.27
例如,传入一张特征图片,是一个表情包
如果结果为,两个参数分别代表:
适合在没有文字的场景下进行阶段界定
每一帧会对应一行数据。
更加具体的使用参考github主页。
相关原理
图像相似度
统一使用SSIM进行图像相似度匹配
直接使用提供的方法
相似度变化趋势是规律的,基本符合应用加载流程。
OCR
就目前来看,词数趋势难以自动化地反映问题。
但可以作为后续分析的重要依据。
特征匹配
opencv与skimage均提供了方法供使用。目前直接使用skimage提供的方法。
算法:Fast Normalized Cross-Correlation,详见这里
可以看到,对于特征的识别效果显著:
关联与依赖
opencv: 图像与视频处理
tesseract: OCR
skimage: 图片相似度
最后
欢迎各种形式的讨论与PR
欢迎star & fork
领取专属 10元无门槛券
私享最新 技术干货