本贴的意义就是答疑下现阶段中,游测同学对于游戏接口上的认知,因为他们或多或少的了解到软测同学他们会有接口测试,并且好像还大有作为,感觉人人都会的样子,而大多的游戏测试同学却非常少的接触的到这块的内容,游戏没有接口么?为啥我们就没有接口测试这么一说?游戏接口测试到底是怎么做的?为啥感觉很少见到或者参与到,本篇就去试着解答大家的疑惑;
实际前些时间,一篇爆火的2021 接口测试白皮书中有对于游戏接口测试的描述,感兴趣的可以看看,文章中拿的的是莉莉丝游戏的测试平台【伏羲】做的举例,有相对较为详细接口测试流程规范上的描述以及基础描述,有对于各版本中接口变动流程上的内容,属于后面已经趋于成熟的集大成者,本篇讲不了那样高的高度,就以一个相对能介绍的简单流程给游测同学介绍清楚游戏接口测试的接口以及如何入手?
游戏接口本质上跟软测是保持一致的,都是脱离表现层以后的逻辑层,就是我们常点的游戏 UI 下,唤起的一系列的操作与响应事件,而最大的不同,主要就在于多数游戏的协议都是非 http 类的,如 UDP 用到的地方就相对比较多,有的对延时性要求不高的游戏,TCP 也会有,http 就相对少一些,如现在的某者某耀,对战用的就是 UDP,再比如说现在的棋牌游戏,很多运营活动,用的就是 http,再比如一些包体很小的养成类游戏,用的也是 http,通过 cdn 去下载对应的资源...会发现游戏这块的游戏协议本身就比较难以统一,因此,接口测试就一直比较难以统一方法论并且需要定制化的去做工具;
原始
举个栗子,转载了下C#TcpClient TcpListener 客户端服务器程序,一个简单的 C# 编写的 CS 工程,其他脚本语言对应的 socket 编程都有对于网络编程的模块,感兴趣的本地拿脚本起服务去看下,这就相当于完成了一个简单的 TCP 网络通信,UDP 同样如此,不过多赘述,百度一下的事情。
常规
常规上流程依然是按照上述的原始流程,不同的是,在协议通信的过程中,添加了一些效率优化的手段,游戏中大家有项目工程的话,应该会看到对应的协议模块中有非常多的 proto 文件,不管是人为控制还是脚本或工具生成,我们只需要关注这个文件怎么来的?用来干啥即可,这边不赘述,依然是直接百度转载现有的文章使用 protobuf 作为游戏网络通讯的协议,里面有对应的解释,总的来讲流程图如下。红字的部分就是用来统一管理数据格式,因此我们对于游戏的协议有了大概的了解,我们在进行接口测试也就有了一定的思路。
鉴于我本人也没去实际实现模拟游戏接口的方案落地,我仅代表我个人做到的程度把思路捋一下说给大家,参考以上的实现思路:
理论支撑 1:优先把对应的待尝试的模块使用的协议环境实现,如使用 TCP 通信就以 TCP 的方式进行 socket 编程去打通 TCP 通信的网络环境;
理论支撑 2:模拟 CS 解析 proto 文件获取数据消息的结构体,不论什么语言,proto 解析大多都有对应的语言去解析,解析成功后,再讲消息协议的结构体按照实际发送需求拼接发送,模拟真实环境;
个人:大家用 Python 的较多,公司沿用的是 PB2,亲测 Python 可以去做 PB2 转 Python 获取解析内容,就是卡在了接口发送上,因公司暂无实际需求,因此后续有空了,再沟通。
以上就是思路的实现,其他编程语言亦可,百度一下有很多。
在实际的游戏业务中设计的设计协议可能会较多较杂,并且有的为了满足实际需求会去该协议的交互方式,游戏中的运营活动中大多是 http 会涉及到 H5 页面跳转,因此这块的内容也是协议安全关注的大头,避免出现活动问题,另外我个人工作的过程中接触了一些对战竞技类的游戏,核心的对战逻辑中或者之前之后都是有对协议进行校验的,很少发生说,通信的过程中缺参会通过的表现一般表现上就直接暴露出问题了,有的体现在游戏中,有的体现在流程中,如打包构建错误等,早早就暴露出的问题。今天就到这里,欢迎大家约还要沟通了。
欢迎测试小伙伴来撩,软测游测都可以,一起 up!~