游戏测试 接口测试须知(中)— 游测接口篇

5t5 · 2022年04月06日 · 最后由 5t5 回复于 2023年01月16日 · 11091 次阅读

引言

本贴的意义就是答疑下现阶段中,游测同学对于游戏接口上的认知,因为他们或多或少的了解到软测同学他们会有接口测试,并且好像还大有作为,感觉人人都会的样子,而大多的游戏测试同学却非常少的接触的到这块的内容,游戏没有接口么?为啥我们就没有接口测试这么一说?游戏接口测试到底是怎么做的?为啥感觉很少见到或者参与到,本篇就去试着解答大家的疑惑;

实际前些时间,一篇爆火的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!~

共收到 8 条回复 时间 点赞

游戏是软件的一种吗?
游戏接口测试不还是软件接口测试吗?

5t5 #2 · 2022年04月11日 Author
Thirty-Thirty 回复

嗯嗯,是其中的一种,话粗理不粗,前者可以归类后面因为表现差异化明显所以并不能划为一类,不然也不会存在所谓的游戏测试了,那都可以叫软件测试了。差异化比较明显,才把游戏这块独立出来了。

游戏主要是 tcp 的接口 很多是有前后关系的 所以不能像 http 一样 单次的 所以用 python 去做接口的话 个人感觉可能是要像客户端一样 实现一个客户端去做 感觉很麻烦 如果可以在游戏客户端那边通过最后的发包接口 进行拦截处理的话 可能会好一点

5t5 #4 · 2022年04月21日 Author
Barak 回复

唔,不太懂你的意思,按照我的理解,你的意思是实际业务中,不管聊天还是匹配或者对战这一类的数据交互不是 tcp 就是 udp 亦或者其他改造协议,但是这些都有前置条件的触发才能发送响应成功的意思么?比如:聊天你就必须得在线才可以去发送诸如此类这种?另外的话 http 的话,一般应用的都是运营活动数据的发包,所以可以是一次性的,另外 http 也是可以改造做游戏数据传输,前后关系这种,毕竟本身就是基于 tcp 的协议,另外可以通过最后的发包接口去做,只是操作场景会比较受限,扩展性会差一些,一切都得基于前置条件进行操作,然后拦截处理然后发送,都是可以的,当然最适合自己的才是最好的,毕竟 python 这一套协议接口调试的方案没落地,实际过程中有什么坑,可能也不大清楚,老哥有尝试欢迎沟通!~

二维码过期了 游测同行寻组织~~~

5t5 #6 · 2022年04月29日 Author

v:frey0521

群进不去了

5t5 #8 · 2023年01月16日 Author
zmt 回复

加 v 拉你

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册