自动化工具 图像分类在兼容性测试中的应用

校服杀人魔
校服杀人魔
校服杀人魔
订阅者
277
文章
0
评论
测试交流1 184字数 1471阅读4分54秒阅读模式

背景意义

这篇文章来自于两年前的 issue:https://github.com/williamfzc/stagesepx/issues/158
前阵子发现有同学这么落地了,觉得挺有意思的,实验了下,作为一个官方 api 开放出来吧
新功能可能会有奇奇怪怪的潜在问题,欢迎交流

随着 APP 应用范围越来越广,用户群体越来越大,终端设备的型号也越来越多,移动终端碎片化加剧,使得 APP 兼容性测试成为测试质量保障必须要考虑的环节。文章源自玩技e族-https://www.playezu.com/179458.html

而很多兼容问题在显示层发生,例如黑白屏花屏、显示不及预期等,自动化评测开展的门槛比较高。文章源自玩技e族-https://www.playezu.com/179458.html

方案

一般方案分为两个部分,驱动层与校验层:文章源自玩技e族-https://www.playezu.com/179458.html

驱动

  • 录制回放:通常是将操作过程保存下来,下次直接拿出来回放
  • 脚本回放:常规 UI 自动化

当然现在两种会结合起来用,例如录制回放后保存的形式就是自动化脚本,你可以在此基础上进行编辑。文章源自玩技e族-https://www.playezu.com/179458.html

校验

  • 自动化校验:常规 UI 自动化,控件检测等
  • 人工校验:将整个过程进行录屏,人工统一验证

同样会结合起来用,自动化校验一些关键位置,人工检验整体表现。文章源自玩技e族-https://www.playezu.com/179458.html

难点与思路

  • 现阶段自动化校验的能力比较有限,许多还靠控件检测,而随着 web 技术的兴起,控件检测在技术上越来越受挑战,脚本变更频繁
  • 图像算法维度,对关键图、脚本的维护成本并不低,算法能选择的也有限
  • 全自动化(如自动遍历)的兼容性测试在心理上接受度有限,你无法控制判断一些流程是否符合预期

本文尝试在图像校验的角度,利用 stagesepx 实现简单的自动化校验功能,提供一些新的思路。文章源自玩技e族-https://www.playezu.com/179458.html

小例子

这里展示了 chrome 打开一个页面的情况。可以发现,在不同机器(ios、android 的不同版本)、不同版本上,同一个应用的表现可能是不一样的:文章源自玩技e族-https://www.playezu.com/179458.html

自动化工具
 图像分类在兼容性测试中的应用插图
文章源自玩技e族-https://www.playezu.com/179458.html

与 https://testerhome.com/topics/22215 类似,我们可以用类似的方式将整个过程拆解为几个阶段:文章源自玩技e族-https://www.playezu.com/179458.html

  • 0:待机页
  • 1:chrome 开屏页
  • 2:loading 页
  • 3:真正的内容页

而 chrome 开屏页在低版本的 android 上不会出现。我们假设,我们希望 chrome 在不同版本上表现是一致的,0 1 2 3,那么开屏页不出现就是一个兼容性问题。文章源自玩技e族-https://www.playezu.com/179458.html

那么只要跟原来一样准备好训练集:

自动化工具
 图像分类在兼容性测试中的应用插图1

使用原有脚本,简单变更即可轻松断言(脚本与使用可以参考 https://github.com/150109514/stagesepx_with_keras,不再赘述):

from stagesepx.classifier.keras import KerasClassifier
from stagesepx.cutter import VideoCutter
from stagesepx.reporter import Reporter
from stagesepx.video import VideoObject
video_path = "android-new4.mp4"
video = VideoObject(video_path)
video.load_frames()
cutter = VideoCutter()
res = cutter.cut(video)
stable, unstable = res.get_range()
# 0.9为置信度
cl = KerasClassifier(0.9, epochs=20)
cl.train("./chrome_startup")
classify_result = cl.classify(video, stable, keep_data=True)
assert classify_result.is_order_correct(["0", "1", "2", "3"]), classify_result.get_ordered_stage_set()

可以看到 1 阶段(开屏页)没出现:

自动化工具
 图像分类在兼容性测试中的应用插图2

如此即可将一个流程检测集成到你们的常规流程中了。

更复杂的实际例子

对于兼容性我们不可能只看一个启动,通常会更加复杂。这里以雪球为例:

简单一点说,雪球一眼进去,主要页面有五个:

自动化工具
 图像分类在兼容性测试中的应用插图3

要测兼容性,一般都是将主要的页面都过一遍。过一遍好过,但校验是个问题。

自动化工具
 图像分类在兼容性测试中的应用插图4

一样的方法,将图片分类整好,按照你的遍历方式,选择需要的断言即可。例如你的自动化脚本/录制回放是沿着 0、1、2、3、4 来的:

assert classify_result.is_order_correct(["0", "1", "2", "3", "4"]), classify_result.get_ordered_stage_set()

我们找一个异常状态(页面表现不一样)的视频:

自动化工具
 图像分类在兼容性测试中的应用插图5

自动化工具
 图像分类在兼容性测试中的应用插图6

可以看到 1、3、4 都没有出现并被正常检测出来。

而只要有一套训练集,他同样可以被复用到不同机器上。细心的同学可以看到我的训练集甚至用的是 iphone 的截图。

而,如果闪屏页样式很多,而又不是你关心的重点,你也可以直接忽略掉他:

assert classify_result.is_order_correct(["1", "2", "3", "4"]), classify_result.get_ordered_stage_set()

或者,只关心 1 与 4 是否出现?同样可以只确保 1 与 4 按照顺序出现:

assert classify_result.is_order_correct(["1", "4"]), classify_result.get_ordered_stage_set()

还有一些更特别的。例如你不关心是否按顺序出现:

assert "1" in classify_result.get_stage_set() and "4" in classify_result.get_stage_set()

或者利用一些自动遍历工具做的测试,产出物是一堆图片,不是视频,只是想看看这些图片是不是符合。你也可以直接利用 stagesepx 自带的分类器满足你的需求:

cl = KerasClassifier(0.9, epochs=20)
cl.train("xueqiu")
res = cl.predict("./xueqiu/1/5db49c10-94de-4a5e-a930-692ad88efad7.png")
print(res)
# 这张图片被分类为类型1

一些常见问题

模型每次都要训练吗?

不是,你可以保存。图中只是为了简化描述:

YOUR_MODEL ="./YOUR_MODEL.h5"
if os.path.isfile(YOUR_MODEL):
cl.load_model(YOUR_MODEL)
else:
cl.train("xueqiu")
cl.save_model(YOUR_MODEL)

每次都要解析视频,很慢?

功能测试跟性能测试的出发点完全不同,在兼容性、功能测试的时候 FPS 的敏感度小多了,可以大大降低来提升分析效率。

分类不准确?

可以参考之前的其他文章来简单调优。

相关链接

  • stagesepx:https://github.com/williamfzc/stagesepx
  • 图像分类、AI 与全自动性能测试:https://testerhome.com/topics/19978
  • 全自动的抖音启动速度测试:https://testerhome.com/topics/22215
  • 官方落地例子:https://github.com/williamfzc/work_with_stagesepx
  • 一个超级详细的落地例子与原理解释:https://blog.csdn.net/wsc106/article/details/107351675
 
    • 笑哼
      笑哼 9

      您好,是对录屏分帧,然后判断分帧后的图片是否是 Ui 兼容性问题是吧?对的你好 想问下页面在不同的手机机型上打开的时间不同,录视频分帧生成的图片可能和基准的图片不对应,这块怎么解决的?

    匿名

    发表评论

    匿名网友
    确定

    拖动滑块以完成验证