中文站

知物由学 | 一文带你读懂游戏反外挂SDK测试,节省90%测试时间

背景

SDK,是Software Development Kit的缩写,它是为第三方开发者提供的软件工具包,是把要单独接入的应用的功能从应用中剥离出来,可以提供给所有其它应用使用的公共组件,降低工作的复杂度、节约了成本。

和传统APP测试不同,SDK测试还需要兼容多种类型的APP,以易盾手游反外挂SDK为例,涵盖了非常丰富的防破解和反外挂功能,并且服务了上亿用户。

那么,如何在产品快速迭代,功能越来越多,且需要兼容各类APP和操作系统,并且测试资源有限的情况下保障SDK测试质量呢?本文将为大家详细介绍,游戏反外挂SDK如何保障测试质量。

一、测试流程规范 

简单介绍下,游戏反外挂的测试流程,如下图:


1、在需求评审和技术评审的环节,需充分讨论需求细节等,确保各个角色都充分理解需求和技术方案;

2、之后的测试用例编写阶段,可以深入了解需求和技术方案,并且考虑用户的真实使用场景和异常场景,设计测试用例,组织会议评审,评审后摘出开发自测用例;

3、编码并自测完成后,发布加固版本。加固,区别于传统的SDK代码接入方式,是一种便捷的,只需要一行命令就能接入最新版本的方式,包括反外挂SDK接入和反编译功能;

4、测试流程:

• 冒烟自动化测试:通过Jenkins平台构建,执行自动化加固和冒烟功能测试用例;

• 新功能测试:根据测试用例进行新功能测试,包括功能、兼容性、性能等。新功能测试完成后,会持续维护进自动化回归用例和冒烟用例;

• 自动化回归测试:通过Jenkins平台构建,执行Pytest+Airtest自动化回归用例,并且有丰富的断言方式,保障原有功能正常;

5、上线和验证:上线后可以对新功能进行手工验证,原有功能可进行自动化验证。

二、自动化测试提效

众所周知,客户端尤其是Android碎片化严重,不同品牌机型、操作系统、CPU架构的运行表现不一样,所以会有各种各样的兼容性问题。对于游戏反外挂来说,需要兼容不同类型的游戏和应用。所以单个功能,测试一个APP、一台手机远远不够。如果仅采用手工测试,效率问题就十分突出了,那么如何高效地进行多APP测试和多机型测试呢?

首先,我们使用了的自动化冒烟、回归测试提高测试效率。另外,还有自动化兼容性测试:通过爬取应用市场的应用,近2500个APP样本,进行批量的APP测试,和多机型兼容性测试,保障SDK的兼容性。

下面详细介游戏反外挂的自动化测试

1.测试框架

游戏反外挂,采用Jenkins+Pytest+Airtest+Allure的方式进行自动化测试,架构图如下:


2.用例编写方式

如何在测试不同的机型和测试APP时简洁地编写测试用例呢?

首先,我们把测试机型和APP分类,回归时覆盖不同类型的即可,比如游戏,可以按引擎分为u3d mono、u3d il2cpp、cocos2d、Neox、其他游戏引擎;

其次,用到@pytest.mark.parametrize装饰器,让测试入参等参数化,只需要传入测试机list、测试APP list,这样一个功能点只需要编写少数几条用例,但是却可以测试任意的机型和APP,代码简洁、复用性高。

3.用例执行结果校验

针对反外挂功能的多样性,我们的测试结果断言方式也有很多种,主要分为客户端校验和服务端校验。 

【客户端校验】

• UI校验:

游戏APP不像普通APP,可以捕获UI控件,所以airtest的图像识别就可以派上用场,比如校验某个图片是否存在(图1是vmos_mutiopen的关键代码,waitingmuticrash是自己写的查询图片函数)。


                                                             图 | vmos_mutiopen的关键代码 



4.测试报告


执行Jenkins命令时加上--alluredir参数,并且增加allure Report模块后,执行构建,测试完成就可以生成漂亮的测试报告了,相较于原生pytest报告,功能更加强大:用例分类,附加截图日志等非常方便。




测试执行完成,可配置Jenkins邮件发送测试结果,并且自定义邮件内容,这样无论何时何地执行,都能便捷的关注到测试结果。

5.自动化成效

有了自动化测试的帮助,自动化回归从4天时间缩短为6个小时,测试时间大大缩短。并且可以通过Jenkins定时执行,比如定时0点执行,早上上班,就可以看结果。

目前,通过自动化发现9个有效问题,均为增加新功能影响原有功能,每天定期执行,并且在上线之前执行一次自动化用例,上线都更有底气了呢~

三、自动化测试提效 

除了保障功能正常外,还需要兼容性+稳定性,所以,我们搭建了小型测试机机房,并且有自研多机型健壮性测试工具。

 • 兼容性测试

测试机架连接多台测试机,使用Jenkins构建执行多机型执行安装和运行脚本,进行兼容性测试。执行20台测试设备,几分钟就可以完成。



 •  健壮性测试平台

另外我们还自研了一个健壮性测试工具,Jenkins作为执行器,先获取电脑连接的设备devices list,然后分发给futures.ThreadPoolExecutor去执行,每个设备都会执行pytest -count命令,并打一定的标识生成到同个目录的allure_result,执行的参数支持自定义,可以测试任意的APP执行。




Jenkins参数化构建执行,只需要勾选对应参数即可。

断言方式,可以组合日志期望和进程期望进行断言,and和or的关系都支持,并且日志断言,支持正则表达式。

另外count功能也非常强大,其实就是用到pytest-repeat功能,指定count次数就可以重复执行多少次,对于稳健性测试来说真的非常方便,另外配合断言方式使用,对于复现客户端偶现问题也非常便捷。

最后,重点介绍下run_type,这里除了静置运行,还用到了开源工具 Maxim的智能monkey,支持原生 monkey、遍历控件、黑白名单等功能,而且也封装了更加易解析的日志文件,也支持多种遍历方式。


最终汇总成allure测试报告:



思考 

测试工作的重中之重是保障质量。怎么样在现有条件下更好的保障质量呢,我们需要践行如下几点:

1、提升测试质量,需要对业务深入了解,用测试的方法论来实践,来提高测试覆盖度。

2、提升测试效率,为了更快速发现问题,测试效率就同样重要,一个bug,发现的越晚,修复的代价越高。首先要有良好的工作习惯,协调能力。另外,我们还需要对重复的测试步骤工作进行提炼,并引入自动化,可以极大的提高测试人员的工作效率。

3、拥有测试思维,也是很重要的一点,测试的思维很重要,要站在用户的角度、产品的角度、开发的角度,通过正向思考与逆向思考,感染整个团队的人,从而让产品更加丰满。

道阻且长,行则将至;行而不辍,未来可期。