游戏测试 基于行为树的游戏压测工具 (demo)

ownSecurityGuard · 2023年03月06日 · 最后由 水山 回复于 2023年03月29日 · 6800 次阅读

基于行为树的游戏压测

楼主这边一直在思考如何让 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 文件,可以搞成平台去运行,也就可以搞成自动化 (所有的专项测试的最终目标怎么感觉都是自动化,哈哈哈)。
大佬们,提提意见,说说在你们公司,是如何进行游戏压测的呢?

共收到 2 条回复 时间 点赞

压测业务逻辑用纯 json 配置去实现还是有些局限性,我们仍然是用代码去写的压测业务逻辑。其他的模拟机器人部分都大同小异。

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