性能测试工具 再次利用图像识别与 OCR 进行性能测试

williamfzc · 2019年03月18日 · 最后由 williamfzc 回复于 2019年08月06日 · 5501 次阅读

前言

之前因为一些原因,在 利用图像识别与 OCR 进行速度类测试 上做了一些研究,总结了一下然后分享出来,没想到收获了不少谬赞😄 不过stagesep确实还很不成熟,是边研究边开发的产物,在代码结构与工程性上都比较随意。

为了更好的后续使用与落地,在它的基础上经过多次迭代,对它进行了重构与改进,stagesep2顺利诞生,并且已经顺利达到了可用状态。目前它已不再只是一个实验项目。它承接了一部分测试工作,真正地开始产出价值,让这套理论顺利应用到实际中来。

谢谢各位的鼓励 :)

项目主页

https://github.com/williamfzc/stagesep2

原理

stagesep2 的两个核心功能:

  • ocr(tesseract)
  • 图像识别(opencv)

视频是由一系列连续的图片(帧)组成的,通过逐帧分析,我们能够从视频中提取出流程相关信息。理论上,每一帧都存在能够区分它与其他帧的标识,可能是文字或图像。

例如,我们需要测试 从桌面启动 chrome,打开 amazon 的速度:

  • 在操作前,我们在主页。主页上会有特定的文字与图像(例如 chrome icon)
  • 在操作时,页面会有特定的变化(例如 chrome icon 变暗,或出现点击位置反馈)
  • 在操作后(chrome 启动后),页面发生切换,页面上的文字与图像都会发生改变(例如 amazon logo 出现)

那么,我们可以通过两个方面来进行检测。首先是通过标志性图片:

可以看到,在 0.2s 时 chrome 图标被点击,在 0.96s 时 amazon 图标正式出现。再看看文字的:

{
    "result_id": "c2e5116c-462b-11e9-9ed2-005056c00008",
    "video_name": "./videos/demo1.mp4",
    "frame_id": 24,
    "current_time": 0.96,
    "ocr": ["PO", "/", "1dX00d", "¥", ":", "00Xv00Yv00", "—", "ESRRGRERSize0.0215", ":", "27dSlsB", "(", "ayhttps", "/", "/", "www", ".", "amazon", ".", "comQO", "°", "oa", "\"", "四", "Ney", ",", "DepartmentsListsDealsVideoMusic", "©", "DelivertoChinaWeshipinternationallyWe", "'", "reshowingyouitemsthatshiptoChina", ".", "Toseeiemsthatshiptoadifferentcountrychangeyourgetiveryaddres5AdditionallanguagesettingsareavailableSomecontentmaybeauto", "-", "translatedCHANGETHEADDRESSrs", "并", "~", "Shopwith100%", "ConfidenceonAmazonLJ", "—", ")", "SigninforthebestexperienceCoO00", "@"],
    "match_template": {
        "amazon": {
            "min": -0.4684264361858368,
            "max": 0.6224471926689148
        },
        "chrome": {
            "min": -0.4022962152957916,
            "max": 0.7294253706932068
        },
        "chrome_clicked": {
            "min": -0.6132965087890625,
            "max": 0.7038567066192627
        }
    },
    "trend": {
        "previous": 0.8785946933890821,
        "first": 0.8719320065296263,
        "last": 0.5842399940047383
    }
}

节选 0.96s 的检测结果,可以发现在该时刻 amazon 网页上的相关字样开始出现,与图片检测的结果是一致的。

通过对这些阶段进行分析,得到每个阶段及帧对应的时间戳,我们就能够准确地知晓视频每个阶段发生的事情。你的视频 FPS 越高,数据会越精确。

目的

值得注意的是,在性能测试范畴内,fps 的稳定性是非常重要的。而目前软件录制手段实际上并不稳定,容易造成结果不准确的问题。如果用于生产环境,建议使用硬件方式(例如外置摄像头)。

全平台的 性能测试/有效性验证 方案

  • 渲染内容是否符合期望
  • 渲染性能

为什么介入图像识别

UI

现阶段的 UI 测试大多属于纯代码层面的行为,而对于控件是否真的渲染成为我们希望的样子我们并不知晓。

性能

在常规速度类性能测试中通常通过提前埋点进行测试,一般会有两个问题:

  • 具有侵入性(需要改动源码)
  • 对于界面相关的场景不适用(并不知道界面是否已经被真正渲染出来)

图像识别在测试中的应用

一般来说,通过图像识别来进行测试分为三个步骤:

  • 图像/视频 采集

    • 这个部分通常由高速摄像机或稳定帧率的外置相机进行拍摄,得到固定帧率的视频
    • 软件录制是不靠谱的,很容易出现帧率不稳定的情况。而如果时间与帧数不能精确对应的话数据会失真
  • 视频处理

    • 提取视频中的信息,输出成为我们需要的形式
    • 也是整个流程最关键的部分
  • 数据分析

    • 将视频处理的结果进行分析,得到结论或生成报告

该项目将承载视频处理的部分,将录制好的视频解析成开发者需要的格式。

使用

目前支持两种使用方式:

  • docker(推荐)
  • python 包

官方示例 开始吧。

相关内容

Bug 与建议

欢迎通过 issue 告知,或直接发起 PR 加入 :)

共收到 9 条回复 时间 点赞
williamfzc 利用图像识别与 OCR 进行速度类测试 中提及了此贴 04月25日 19:53
williamfzc 让所有人都能用图像识别做 UI 自动化 中提及了此贴 05月19日 22:06

感谢分享这么好的工具,昨天试用了下跑了下 Demo,太太太慢了...
下午大概跑了一个多小时,一直卡在最后一帧的地方,后来我强制停止了容器。
晚上特地试了下挂着一直跑,从 7:30 左右到 0:32 左右,才出来最终结果,大概跑了 5 个小时。
后面能不能考虑优化下效率啊😂 😂 😂

多写一些 这个项目实践的帖子就更好了

Joo 回复

感谢耐心,卡住这个问题我知道的,不过我还没注意放久了居然可以跑完😂
具体方案我在 github 上回你啦,谢谢反馈

已经建了 issue 跟踪:https://github.com/williamfzc/stagesep2/issues/7

026 回复

嗯嗯,这一块的话我是觉得现在还做得不够好,有些问题还没有解决,所以没写太多。
等解决楼上提的问题之后可能慢慢会开始写一些实践

williamfzc 回复

兄弟,你微信多少,我用你的 FindIt 库也遇到了卡住的问题😂 😂 😂

Joo 回复

加你 QQ 啦,大概率是因为传入高精度图片或者一次加载了太多模板图片,暂时还没解决这个问题

williamfzc 回复

感谢,感谢~
新的 0.5.2 版本 FindIt 已经解决卡的问题了👍 👍 👍

williamfzc 图像分类、AI 与全自动性能测试 中提及了此贴 07月22日 21:48

好绝望,为啥我在环境这一步一直报错

喵小咪 回复

我觉得用这个可能好一点
https://testerhome.com/topics/19978

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册