效率提升50%!基于智能探索的游戏兼容性测试如何实现?

游戏兼容性测试由于场景多变,脚本编写和维护难度都很大,大部分游戏的兼容性测试还是靠人工完成。如何提升游戏兼容性测试的效率?

本文中,腾讯高级测开工程师赖勇辉将为你分享基于智能探索的游戏兼容性测试实现原理。(文章干货较多,建议收藏后再看~)

兼容性测试的特性

目前安卓手机的机型可能有几百上千种,目前游戏兼容性测试的实现方案很多,但是真正做到完全自动化测试的游戏可能还不到一半,大部分还是通过人工实现,游戏兼容性测试有哪些特性呢?

人工测试

人工测试的特点是简单、可控,但是它可能效率低,人力成本比较高。

脚本自动化测试

脚本自动化测试的优点是提升了效率,但是脚本的编写和维护成本都很高,有较高的门槛。

游戏自动化测试的难点

不像传统的软件有一个确定性的逻辑,但是游戏场景逻辑复杂,脚本代码编写难度上升,执行过程容易出错且调试困难,代码维护性也会变差。

智能探索的实现

智能探索方案的优点

一、简洁的实现过程

智能探索方案应用了对人工测试概念的理解,理想情况下,用户不需要编写任何代码,实现过程非常简洁。方案中的工具主要实现三个功能,首先是定义和标记场景,比如说欢乐斗地主开启页面,根据场景标记,应该进行点击登陆按纽的场景操作;其次是回放调试,把前面定义和标记的场景跑起来,最后生成一个报告。

二、自然的操作流程

场景定义和标记如何实现?以欢乐斗地主登陆的首页为例,可以根据右上角的logo,标记这个场景为首页登陆的场景,在这个场景下,需要进行点击微信登录,实现整个微信登录的过程,我们把它称为是场景操作。

在标记完场景之后,自动化的程序也是通过场景识别,然后选择场景下对应的操作。整个过程都是和人工操作流程一样,非常自然。

三、高效的检查

所有的操作执行完成之后,有一个很重要的步骤是识别中间图片是否存在UI异常。首先需要将操作过程中的图片截取下来,然后通过人工检查是否存在UI异常。但是十几个场景,300台机器,截取的图片可能有几万张,如何筛选出UI异常的图片?在这个方案中,我们做了一个高效的UI异常检查的机制,也是通过图像对比或者说图片聚类的方法去实现这种图片的快速检查。

经统计,通过这种方式发现bug的平均质量相比人工测试提高了20%,但是执行时间降低了50%左右,取得了较好的效果。

智能探索工具

上图为目前采用的智能探索自动化测试框架,左边是定义的场景,右边对应场景下的标记,下面是场景属性,这就是智能探索工具,属于脚本录制的工具,点击执行就可以提交到WeTest平台进行兼容性测试。

上图为智能探索工具的六个模块,最下方为设备层对应安卓设备,其余五个模块分别为面向客户的录制界面;回放模块主要是用于回放和调试;API模块主要是对脚本提供API,包括点击、多点触控等操作;设备驱动模块主要是和设备层交互,实现截屏等操作;CV模块用于图像识别,包括场景识别和对象识别这两个功能。

综合识别算法

图像识别已有基于模板匹配和基于特征匹配两种方案。主要问题在于如何提升图像识别的准确性和识别效率。

模板匹配单个对象识别速度很快,准确性也很高。但是模板识别只能在同样分辨率大小的情况下去识别。如果图片分辨率的比例或者说大小发生变化,模板可能就失效。为了能找到最传统的模板,需要将模板类型放大或者缩小,然后去查找,但是缩放次数增多就导致它的识别时间变长。

相比模板匹配,特征匹配好处在于不用管图片的大小,都可以识别。但是特征匹配是基于特征点提取的,如果截取的图片过小,或者图片背景单一,就难以提取到足够的特征点进行识别。

一、识别准确性优化

综合识别算法基于模板和特征匹配,结合了特征匹配和模板匹配算法的优势。图片先用模板匹配,适当地缩放尺度去识别。如果图片有足够的特征点,就用特征匹配。为了加快识别速度,综合识别算法会对特征点进行快速过滤,在提取到特征点后,会对该特征的向量计算它的斜率,过滤掉一些冗余的特征点,加快匹配速度。对于某些对象,也可以通过特征点准确地找到它对应的图像上的位置。

在脚本录制和标记对象的同时会将对象的位置标记,如果对象的位置相对固定,识别时只在标记位置周围一定范围去寻找,可以加快识别速度。

此外,我们还对一些图像进行特殊定制。如,对于某些纯文字的对象,除了考虑特征点,还会考虑特征点分布,是否符合与截图时相同。还有透明属性、高亮属性、动画属性等,会针对不同的图片对象去做策略调整,使得它能够识别更多的图像或者更精准的判断它是否图像正确。我们可以根据这些特点修改它的尺度、比例、相似度,进行校准,从而增强它的图像识别准确性。

二、提升识别效率

对于支持多尺寸的单个模板图片,识别时间在1-2秒。对于场景识别,一个场景库可能有多个场景,每个场景又有多个特征点,比如20个场景,每个场景2个标记,就需要对比40个图片对象,如何提升识别效率?

我们采用了腾讯的容器集群服务,针对场景识别,云端有超过2500个cpu计算单元。据统计,采用该服务之后一个场景的识别时间从20到30秒缩减到1到2秒,单张图片的识别时间缩减到1秒,还能支持10多个top300任务并发,平均1000多个设备并发运行,提升了它的识别效率。

智能探索算法

智能探索算法要求能尽可能遍历所有场景,但是又要求它可以终止,不会死循环还要能处理一些异常情况。理想情况下,算法可以正常识别完所有场景,但是实际操作中,往往会出现一些异常,如操作无效、游戏弹窗等未知场景,如何将这种情况处理好并回归到正常的场景识别中去?

一、操作无效

如果在选择场景下一个操作没有效果,就选择其他操作,如果该场景下所有操作都操作无效,就选择重启整个APP,这是一个简单的策略。

二、未知场景

面对未知场景,如何实现一种通用型的策略?

1 特征分析

1.1 轮廓分析

面对各种弹窗,最明显的特征是他有一个按钮,我们可以去分析这些按钮的特征。我们选择了两个最主要且具有明显特征的按钮,一是关闭按纽,二是确定或者接受等之类的按纽,从轮廓的特性去进行操作,从而关闭弹窗。

通过传统的图像处理的算法,找出窗口的轮廓,判断是否符合关闭按钮特性。比如是否含有X特性,找到含有这个特性的按钮并把它给关掉;或者寻找符合矩形或者说椭圆形之类的轮廓,将它管掉。这种未知场景与具体的背景侧没有关系,只与轮廓有关系。它每进行操作一次,都会重新进行一次场景识别,确认是否回到了正常的场景下。

1.2 OCR

如果轮廓识别无法找到关闭按钮,下一步会对图片进行OCR识别,将识别的文字与预先配置的文字进行匹配,如果符合预设,就点击文字所在的位置将窗口关闭,并进行场景判断,确认是否回到已知场景。

1.3 其它操作对象

如果当前场景程序无法判断属于哪个场景,就可以判断当前场景的操作对象是否已定义,如果是已经定义过的操作对象,就会根据操作对象进行相应的操作,等操作完成后再次进行场景识别判断是否回归正常场景。

以上三种操作都是通用型的操作,对所有的游戏都是可以适用的。

2 监控图片

第二种方案我们可以根据对当前游戏按钮的了解,预先定义好监控图片,把它放到一个称为监控目录的文件夹下。当未知场景出现时,就可以和目录中的图片进行匹配,根据匹配结果找到相应的位置进行点击,实现未知场景的应对。

3 高亮对象

更为复杂的一种情况类似于新手指导,就是当前场景不知道该如何操作,但是知道要操作的地方会有光圈或者手势在闪,这种情况如何应对?我们做了一个高亮对象检测的机制,可以通过亮度检测找到高亮进行点击。这就是第三种高亮对象的检测。

以上三种就是目前为止场景处理的方法,如果依然无法解决,就只能重启应用,暂时没有更好的方法。

智能探索结果展示

在任务提交后,我们有一个页面用来展示任务信息,比如:完成的机型数量,有问题的机型数量,遍历的场景数,每个场景遍历的机器数量,场景的覆盖率,以及每个设备出现的具体问题等,供用户分析定位。

异常图片检查

当所有操作都执行完成后,有个非常重要的步骤就是UI异常检测。一个十几个场景的游戏截取的图片可能有几万张,我们高效检查的机制是如何实现的?

UI异常的类型非常多,除了常见的黑屏、白屏、雪花等,还有一些层次的错位,色块缺失,单UI异常等。有点图片人工都无法快速判断,所以用机器学习和训练的方法实现比较困难,我们之前尝试的判断错误率高达50%以上。

现在主要是通过人工检测的方法去判定UI异常。首先我们通过将同一场景的图片对齐,每一列是同一个设备,根据图片相似情况判断是否存在UI异常。通过这种方式,我们可以筛选掉2/3到3/4的图片,图片数量从10000降低到2500,而且可以进行有序的查看,耗费时间从三四个小时降低到0.5个小时。

第二种方式是通过图片聚类,将图片按场景聚类,因为UI异常的数量占少数,所以如果同一个聚类下图片书目小于6的话,就将这些类别放在最上方,作为重点筛查对象,从而减少人工检查的时间,提升检验效率。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190524A0L5HG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券