基于行为树的游戏压测

楼主这边一直在思考如何让 QA 也能够更好的支持游戏压测,在不擅长编写脚本的前提下,也能够支持压测需求。
高情商的管这叫叫赋能 QA

行为树

具体是啥,自行百度。这边使用的行为树工具为 https://github.com/magicsea/behavior3go

压测工具

目前只考虑 tcp,数据传输使用 protobuf。
大体的实现方式:
1、新增两个 Composites,ReqMsg(发送协议),RespMsg(响应协议)。两个协议必填属性为协议 Id 和协议名称 (需要与 proto 文件一致)。同时 ReqMsg 可以填充参数,例如有一个复杂的 proto 结构体。

message LoginReq{
string name = 1;
OtherMessage c= 2;
}
message OtherMessage {
repeated int32 a= 1;
}


可使用以下来进行表示

2、能从行为树获得的数据,就有协议名称和对应的 json 数据。这样工具可以通过这些信息,去编译出可用 protobuf 数据流
3、各个游戏的编解码方式不同。故接入的游戏项目都需要去实现对应的编解码接口。后续可以做成插件,但对于压测来说效率比较尴尬。

type MsgIdType uint32
type Codec interface {
Encode(MsgIdType, []byte) ([]byte, error)
Decode(net.Conn) (MsgIdType, []byte, error)
}

4、参数上下文传递。这边使用 $RespMsg.Key.Val 的方式 (jmespath) 来获取上文信息。例如,先获取敌人列表,如何再挑一个敌人 Id 进行挑战

5、增加 Action, Check(未实现).对响应的数据进行断言

简单粗略的 demo 版

地址: https://github.com/OwnSecurityGuard/stress
下载项目后
启动测试用的服务器: cd stress/src/server && go run server.go
启动工具:cd stress && go run main.go --num 人数数量 --spawn 生成速度 后边两个也可不填,默认均为 1
运行效果:


## 后续
简陋的 demo 搞了出来,感觉还行,目前还有存在一些问题,工具的效率问题等等。不过如果真的能做出来的话,因为行为树其实就是一堆 json 文件,可以搞成平台去运行,也就可以搞成自动化 (所有的专项测试的最终目标怎么感觉都是自动化,哈哈哈)。
大佬们,提提意见,说说在你们公司,是如何进行游戏压测的呢?


↙↙↙阅读原文可查看相关链接,并与作者交流