接口和协议组成 游戏测试中的接口测试总结

志荣 for 君海游戏QA · 2017年10月31日 · 最后由 HonJoe 回复于 2019年12月13日 · 7333 次阅读

一、游戏为什么要做接口测试
如果只是单纯做游戏的功能测试(黑盒),对于一些问题就无法测试到,游戏上线后会产生严重的后果。
举例子,重复领取奖励的问题:例如玩家完成一个任务后去领取奖励,领完奖励后【领取】按钮就消失了,对于正常玩家是没有问题的。但如果领取奖励的判断只依靠客户端来做(领奖后按钮消失),而服务器没做判断,那么遇到坏玩家时,就会被刷奖励(例如玩家截取到请求,通过发送请求可以重复领取奖励;或者在领奖时快速点击领取按钮,也会得到多次奖励)。
因此,游戏的接口测试作为功能测试的补充,是十分有必要。

二、游戏如何去做接口测试
1、如何获取接口协议
由于我们游戏项目的通信协议,要么是 TCP、要么是 WebSocket,并没有通用的第三方工具直接获取接口协议的。因此我们做接口测试是依赖研发写的工具,用来模拟协议的发送与返回结果。

2、如何做接口测试
接下来我根据自己负责的游戏项目,来具体说一下游戏的接口测试是怎么做的。
(1)拿到接口协议文档、返回码文档、参数配置文档等等,熟悉上述文档与游戏玩法,准备接口测试用例。

(2)拼凑所需测试的接口协议。
协议模板为:
tools:handle(角色 ID, 协议号, {pt_协议号_c, 参数 1, 参数 2, 参数 3.....})
例如上面截图中,我要升级剑士的旋风斩技能,那么协议是:
tools:handle(1678,5702,{pt_5702_c,1005})

(3)登录游戏账号,打开接口测试工具,准备好测试条件后,发送接口协议,查看返回结果是否符合预期。
例如我是法师职业,去发送一条升级剑士技能的协议,返回结果为 1902,查看返回码文档,显示为技能不适合该职业,符合预期。

三、总结:
1、由于我定义的游戏接口测试是作为功能测试的补充,因此并不需要每条协议都去测试,而是挑选游戏核心功能的协议,或者是一些容易被刷的协议。例如充值、领取奖励、出售物品、活动开启结束等等。

2、拼凑接口协议,要根据具体情况进行拼凑,前提是要熟悉接口协议文档与参数文档。因为有的协议是不带参数的(测试时不用考虑错误参数的情况),而有的带一般参数(就是上面我举例升级技能的协议),最怕的是带嵌套参数(这个需要把多条协议嵌套在一起,组合成一条协议去发送,测试的复杂度也比较高)。

3、接口的测试,重点要考虑边界值(例如条件不满足,达到下限、上限等),以及错误参数情况(例如负数、0、特殊字符等)。而且测试条件需要熟悉游戏的玩法。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 18 条回复 时间 点赞

游戏接口测试实现了对接口测试,对抓 bug 有积极意义。

这个游戏是 MU 吧。。哈哈哈

重来看雨 回复

哈哈,不是啊~
只不过职业类似 MU 而已,剑士、法师、弓箭手😃

哎,我现在的公司代码都不给看。

372 回复

😓 代码不给看,那就让开发提供协议、参数配置等文档,接口模拟工具。如果开发不配合,你连文档权限都没有,基本无法搞,只能想办法去说服他们了,哈哈~

匿名 #6 · 2017年11月11日

接口测试工具是要研发大佬写好吗?找客户端程序还是服务端程序啊

找服务端程序就好啦,最好是服务端主程~

文章不错,很有用😀

有些不明白,请问为何截取到请求就可以刷奖励了么

这个可以自己封装请求然后写业务就好了啊。跟 http 的没啥不同,就是在协议这块比较花点心思

这个完全可以自己来做,如果了解协议构造 ,通过 socket 的形式来编写接口测试用例,Jmeter 也对 TCP/UDP 协议有很好的支持

可以歪个楼吐槽一下技能名称么。。。。。

Ikaros灬 回复

哈哈,测试版本,非最终数据,不要太在意~

志荣 #14 · 2017年12月10日 Author
战 神 回复

谢谢 10 楼、11 楼的提醒,我先研究研究~

志荣 #15 · 2017年12月10日 Author
假精哟 回复

其实我文中已说得比较清楚,如果你还是没看懂,我也不好说得太细,要不大家都去游戏里尝试刷奖励就尴尬了。。。

开发没有提供工具的情况下,这个游戏接口测试有办法开展吗

请问有做游戏接口自动化测试么

这个写法感觉你们服务端像是 erlang

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