williamfzc / stagesepx

detect stages in video automatically
MIT License
432 stars 125 forks source link

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

Open williamfzc opened 3 years ago

williamfzc commented 3 years ago

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

背景

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

做法

可能存在的问题

效率?

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

准确度?

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

图片算法指什么?

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

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

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

Alapaca commented 2 years ago

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

williamfzc commented 2 years ago

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

williamfzc commented 2 years ago

在 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"]