中秋节突发奇想,尝试说能不能搞出通用点的游戏协议测试的工具,撸了一天代码。 越写越感觉少了什么,由于本人工作经验较浅,所以希望大佬指教一波
这边在开发过程,产生了一些问题:
1、各位大佬,平常在做游戏接口测试是怎么做的呢?我在想要不直接走 jmeter,然后自己这边选择开发波插件会不会更加容易接入呢?大佬们,你们在选择这类工具中会注重的是什么呢?我这边的考虑就是说尽量避免增加开发的工作量,只要开发给 proto 文件和编解码方法,剩下的就让我们自生自灭即可
2、因为游戏接口除了方式不一样外,其实和 http 接口测试没啥差别,可能需要再考虑下服务端会主动推协议和预期协议的捕获这类的。写的工具也参考了 Python 那一块接口测试的东西
3、最后问一个非常实际的问题,有没有大佬在实际工作中开展过,游戏接口自动化测试,然后比较成功的那种。我怎么总觉得收益不大,游戏版本迭代太快了,真的有必要搞么?
故综上所述,这款工具接入准备有:
github 地址:https://github.com/OwnSecurityGuard/gameProtoTest
目前只是个 demo,比较粗糙
先直接说一下,我这工具的两个设想:
工具的基本逻辑:
解析 yaml 文件的数据, 加载 Proto 文件,依据协议名,还有参数,先使用参数构造 json 数据,再将 json 数据转为 protobuf 格式,发送。以单测的形式运行,去生成对应的用例,不用编写单测,只需编写 yaml 即可构造用例,而且 goconvery 功能非常好用,可以以 web 的形式展示用例,和运行。目前这一块断言还没有完全完成,估计得到国企才有空 了。。。
实现方法 (永远的调包侠,yyds)
编解码方法的格式我这边定为了
Encode func(data [] byte, mesId int32, seqId int32,s ...string)([] byte,error) 编码方法
Decode func(conn net.Conn)(tarData [] byte, seqId int32,msgId int32) 解码方法
非常粗略,感觉抽象程度不够,还不够通用,之后还细化一下,但感觉应该能满足需求了
github 地址:
使用说明
安装 go 1.16
安装 goconvey
go get github.com/smartystreets/goconvey
项目根目录 go mod tidy 一下
一切就绪后,
1、修改 first.yaml 文件的文件路径,建议改成绝对路径,所需文件均在 service 目录下。
2、 修改 tcp.go 文件中的 YamlFilePath,改为项目中的 first.yaml 的绝对路径
3、 运行 service 下 testSec 的 main.go 文件,可直接在改文件目录下,go run main.go
4、 在目录下,直接运行 goconvey, 进入页面 127.0.0.1:8080.即会开始加载 yaml 进行测试
目前这边工具使用了 Go 语言开发
ProjectName: "firstTest" ## 项目名,目前什么用都没有,
ProtoPath: "testSec" ## proto文件存放目录路径 建议修改成绝对路径
MesIdPath: "data.csv" ## 协议名对应协议id
CodecPath: "debugCodec.txt" ## 编解码方法
ServerHost: "127.0.0.1:9791" ## 服务器地址
Proto:
-
name: LoginReq ## 测试协议的协议名
param:
name: "username1" ## 参数 若是有嵌套关系,可 a.m: 23 == {"a":{"m":23}}
password: "password2"
asserts: # 断言 ,目前未实现
-
ProtoName: LoginResp # 响应的协议
Check:
-
key: greet
expectVal: 1234
最后还成功搞出个 Bug(看来得国庆再来修一波了。。。)