背景及目的
环境迁移
反外挂服务建德机房线上迁移,采取的方案是:建德机房独立部署一套完整的集群,统一经由完整的性能测试、故障演练、功能回归后,通过线上分阶段切换流量的方式来切服务。QA 需要比对验证 2 个不同环境下核心接口返回值,保证数据上报检测功能稳定,确保迁移前后功能的一致性。
策略验证
智能风控新产品上线前,为了保证策略效果,建立上线信心,需要对现有的策略进行验证。验证的手段是通过客户端 QA 在功能测试阶段收集的真机样本,同时也对这些包含了多种外挂风险、环境风险等信息的样本进行精确标记,在功能回归阶段将样本重放,检查策略是否满足预期效果。
日常回归
在反外挂服务的日常测试中,服务端的测试数据是通过脚本构造的,对于复杂的场景的测试,更好的选择是利用线上真实的玩家数据——其中包含丰富的设备信息、外挂信息等数据,可以更好地覆盖反外挂策略。在此基础上建立样本回归的常态化,利用真实样本,更全面地覆盖核心场景。
反外挂接入流程
反外挂的接入主要分为 8 个步骤(如下图所示)其中步骤 1 在 GoAPI 平台完成,步骤 2、3、5、6、8 在流量比对平台完成,步骤 4、7 在代码中略微改造。
GoAPI 平台建立接口/场景等信息
在 GoAPI 平台上创建被测接口或场景信息,将步骤包含在“数据循环”中,可以是单接口也可以是存在依赖关系的多个接口。
“数据”设置“参数 key”和“值”。“参数 key”为需要替换的数据(样本中的 key),“值”为样本的具体数值。
流量比对平台创建接口信息
在流量比对平台上创建被测接口信息,设置好子服务和业务类型,配置需要测试的 2 个环境的域名,输入场景 id,关联刚刚在 GoAPI 平台上创建的场景,这样流量比对平台上后续的任务就能触发 GoAPI 平台上的场景进行执行。
建立反外挂样本库
接下来是要在流量比对平台上创建反外挂的样本库,通过样本库的管理进行样本的存储和更新。创建的样本库设置子服务和业务类型、样本上限等信息,后续采集的样本归属于当前样本库。
定制化反外挂样本采集机制
反外挂的样本采集来源有 2 个:一是线上 ES 存储的真实玩家上报数据,按照一定的要求提取数据,然后清洗、字段映射、加密等操作后输出为反外挂样本数据;另一个是客户端 QA 使用真机在测试过程收集的数据,然后进行手动标注,获得精确标注各种外挂信息的样本。
线上 ES 采集反外挂样本
在 ES 中按照设定的要求(平台或者外挂信息等)提取数据,然后按照反外挂接口需要的信息以及格式进行处理:包括根据 Protobuf 协议,重新映射字段;根据客户端与服务端通信加密算法重新加密数据,然后将最终数据存入对应的样本库。目前已采集线上真机样本数据:
真机测试数据转化反外挂样本
客户端 QA 在测试过程中,使用真机安装了各类辅助工具或者外挂工具测试系统策略,并将这些上报的信息存储在数据库中,再对这些真机样本进行精确的标注,这些样本就可以转化为流量比对平台可用的样本。目前已采集标注客户端真机样本:105 条。
样本采集配置
在流量比对平台上创建样本采集的配置,前文中描述的 ES 提取数据所按照的要求就是在此处设置完成的。
导入配置:ES 中提取的数据清洗和过滤的要求,以及提取的比例。
提取字段:ES 中数据提取的字段,可以提取结构化的数据的部分字段。
维护反外挂场景信息
我们在测试反外挂的过程中,希望能掌握测试的场景覆盖情况,所以梳理出各种场景以及场景分类。在流量比对平台上手动添加场景信息。在样本的管理处可以将已知的样本与对应的场景进行关联,将样本与场景联系起来,通过不同的样本执行完成不同的场景覆盖,并能在执行结果中对场景的覆盖进行观测。
反外挂样本自动关联场景
上文提到了手动添加反外挂的场景信息,但还需要再和样本进行关联,可能比较耗时。能否做到自动提取场景信息后自动添加场景并关联呢?答案是可以的。我们在样本执行结束后对执行结果比对分析前,提取样本结果中的一些关键信息作为反外挂场景信息,并进行自动关联。
流量比对平台创建回归任务
在流量比对平台上创建回归任务,通过任务调度 GoAPI 平台上的接口或场景执行,轮询任务状态,执行结束后进行分析比对,最终结果在报告页面展示。
进度及效果
- 反外挂迁移建德
采集线上 10000 条样本,比对线上与建德环境,2 个环境比对结果一致,确保迁移顺利完成。
- 智能风控策略比对
使用客户端真机样本,单样本比对一致,智能风控顺利上线并保证策略效果满足预期。
后续计划
- 反外挂样本多样性:样本提取方式优化。
- 场景覆盖统计:多任务、多场景的覆盖统计;精准掌握样本实际覆盖情况。
- 反外挂场景覆盖:透传接口、直传接口、Android 平台、iOS 平台、老反外挂、融合反外挂、智能风控。
- 执行结果比对方法优化:异步执行结果比对方法。
- 平台化功能优化。
- 流量比对常态化:日常测试、线上验证等常态化执行。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。