williamfzc/stagesepx

【idea】在功能测试中的应用

williamfzc opened this issue · 3 comments

之前的一个思路,但一直没有时间去落地,看看有没有有缘人或者公司有兴趣 :)

背景

目前ui自动化测试的核心价值其实就是在回归测试里面校验实际表现是否出现不可预知的变化

做法

  • 录制一段基准视频
  • cutter将视频拆成阶段(不需要后面的分类,效率也高),保存成一系列文件夹
  • 回归的时候,把过程录制下来,形成目标视频
  • 同样利用cutter拆成阶段
  • 此时我们会有前后两组图片集,在此基础上应用进阶的图片匹配算法即可

可能存在的问题

效率?

不用分类,所以不涉及keras模型之类的,效率不低

准确度?

最好将阈值调低,使得拆分出来的阶段尽可能少一点(一般来说只需要关注几个最关键的阶段)

图片算法指什么?

比较的时候其实只有三种情况(假设原来是 1->2->3->4)

  • 阶段新增:1-2-5-3-4
  • 阶段变更:1-5-3-4
  • 阶段删减:1-3-4

BTW,这在 leetcode 上其实有算法原题。

  • 但变更实际上就是 删减后新增,所以情况只会有新增与删减两种;
  • 而新增与删减,显然阶段消失了更可能是个需要关注的问题(例如,多一个弹框根本无伤大雅,关键的阶段都还在);
  • 所以第一个阶段我们更关注,只出现在第一个视频中、而没有出现在第二个视频 的阶段

图片匹配算法,如果用 ssim 做的话,都有现成api的,不再赘述了。搜搜别的也完全可以,stagesepx里也都有现成的函数。

思路值得借鉴,主要是每次运行都有可能有些弹窗等异常;关于参数阈值设定也算很头痛的事情,阈值过低可能有些问题没识别出来,过高可能识别太严格

谢谢:)
按理来说,自动化环境应该保证弹窗情况可控,也就是每一个弹窗都是意料之中的;
而如果出现预料之外的弹窗,它反而应该是个问题,所以报错正常;
似乎没有问题?

在 0.16.0 之后,stagesepx 开始提供功能测试接口,可用于基础的验证工作。定位是:

  • 自动化回归时判定现有表现是否与原来预期一致;
  • 大规模兼容性测试中查看表现是否一致;
  • ...
# 在原来的分类完成后
classify_result = cl.classify(VIDEO_PATH, stable)

# 可以针对分类结果进行方便的校验
# 例如,视频是否连续出现了两次0阶段,然后是1阶段,2阶段
# 如果顺序有问题,即代表中间有可能有意料之外的情况发生
# 例如,2阶段先于1阶段出现,1阶段完全没有出现
assert classify_result.is_order_correct(["0", "0", "1", "2"])

# 如果只想检测其中的一部分也可以按需忽略
# 例如我不需要关心1阶段是否出现
assert classify_result.is_order_correct(["0", "0", "2"])
# 2阶段?
assert classify_result.is_order_correct(["0", "1"])
# 0阶段不关心是否出现
assert classify_result.is_order_correct(["1", "2"])

# 或者,你希望所有的功能都自己定制
# 可以通过该接口获取当前分类结果的顺序
cur_order = get_ordered_stage_set()
# 接下来就随意了
assert cur_order == ["0", "1"]