游戏服务器的压力测试应该如何进行?自己写机器人还是 LR 等工具?
1 条评论
按投票排序
按时间排序
14 个回答
我自己测试的方式如下:
1)先测Unit,这个没啥好说的,软件工程那一套,基本保障覆盖。
2)单接口压力测试。这里是用fake数据使用自己开发的压测脚本进行测试,基本上一个接口要测试5分钟的样子,期间保障两台机器同时并发300个进程不间断发包。
3)机器人测试。这个稍微麻烦点……总之就是在跑机器人脚本,模拟一个玩家可能进行的操作,操作是随机的(除非某些关联操作,会写在一起),然后搞起10W+个机器人跑啊跑啊一跑就是两三天……
4)采集线上数据。任何测试都模拟不了线上……无论如何线上都可能出现BUG的,所以……呵呵呵
1)先测Unit,这个没啥好说的,软件工程那一套,基本保障覆盖。
2)单接口压力测试。这里是用fake数据使用自己开发的压测脚本进行测试,基本上一个接口要测试5分钟的样子,期间保障两台机器同时并发300个进程不间断发包。
3)机器人测试。这个稍微麻烦点……总之就是在跑机器人脚本,模拟一个玩家可能进行的操作,操作是随机的(除非某些关联操作,会写在一起),然后搞起10W+个机器人跑啊跑啊一跑就是两三天……
4)采集线上数据。任何测试都模拟不了线上……无论如何线上都可能出现BUG的,所以……呵呵呵
对于游戏后台性能,评测标准不只单单是TPS(每秒处理多少个XX请求),因为当你的游戏服务器上线后,不存在一群玩家只发XX请求的压力场景。所以,游戏后台受到的现网请求压力永远是多场景混合的,在这样的压力下,后台能支撑多少人同时在线,才是一个游戏压测者需要得到的有价值的测试结论。
要得到可支撑的"最大同时在线人数",主要做好2件事:
1、设计你的类现网压力模型
在现网真实压力里,不论压力大小如何变化,现网环境如何变化,一个游戏类型和玩法设计定型后,永远有2个压力宏观数据保持不变:a. 各接口的压力比例不变, b.玩家平均每分钟操作频率不变。因此,压力测试目标就转变成了如何模拟符合ab数据的压力。
对于a,首先从同类型游戏或者本游戏内测阶段,日志插桩,收集各个接口的调用比例;然后,将接口比例转化为场景比例,如同时会有个2%完结登陆、15%玩家战斗、20%玩家拉取好友列表、10%玩家赌博(一个手游场景例子)。
对于b,同样在内测阶段收集玩家平均操作频率。
此时有了a和b,就可以构造出一分钟内玩家同时在线的真实压力模型了。
2、用压测工具构造出符合压力模型的压力
这个可以自己写,也可以使用现成的压测工具。现在市面上的压测工具很多,但很多都是专注于TPS这个参数,不符合游戏行业压测的关注点-同时在线人数。最近腾讯开放平台推出了一款针对游戏后台的压测工具还不错,在腾讯游戏已经被广泛使用的,建议你看看, http://wetest.qq.com/gaps
要得到可支撑的"最大同时在线人数",主要做好2件事:
1、设计你的类现网压力模型
在现网真实压力里,不论压力大小如何变化,现网环境如何变化,一个游戏类型和玩法设计定型后,永远有2个压力宏观数据保持不变:a. 各接口的压力比例不变, b.玩家平均每分钟操作频率不变。因此,压力测试目标就转变成了如何模拟符合ab数据的压力。
对于a,首先从同类型游戏或者本游戏内测阶段,日志插桩,收集各个接口的调用比例;然后,将接口比例转化为场景比例,如同时会有个2%完结登陆、15%玩家战斗、20%玩家拉取好友列表、10%玩家赌博(一个手游场景例子)。
对于b,同样在内测阶段收集玩家平均操作频率。
此时有了a和b,就可以构造出一分钟内玩家同时在线的真实压力模型了。
2、用压测工具构造出符合压力模型的压力
这个可以自己写,也可以使用现成的压测工具。现在市面上的压测工具很多,但很多都是专注于TPS这个参数,不符合游戏行业压测的关注点-同时在线人数。最近腾讯开放平台推出了一款针对游戏后台的压测工具还不错,在腾讯游戏已经被广泛使用的,建议你看看, http://wetest.qq.com/gaps
可以让客户端把发送的消息存储到一个文件里(按一定的格式),然后写一个程序,按你们定义的格式把消息读出来一条条发送,然后起多个线程同时发送,就变成一个很强大的机器人了。不过要注意一些有顺序要求的消息要特殊处理,还有一些玩家之间的交互操作是测不了的(需要特殊处理)。一般的跑跑足够了。
知乎用户 赞同
我觉得一个是强度测试 一个是代码覆盖测试。强度测试就找具有代表性的功能 循环发,或者多个代表性的协议搭配循环发,主要来看服务器性能参数的。代码覆盖测试就是一个小机器人 尽可能覆盖所有协议 多跑些时间 看内存泄漏等等。
知乎用户 赞同
测试应该分为几个阶段
(1)单元测试,也就是程序员自己写的程序。自己测试自己的逻辑代码
(2)合并内网测试,在内网的机器上跑通所有的逻辑,一般有专门测试人员完成。
(3)内网压力测试,测试某些指令的性能参数。可以重复数据包。
(4)内测,邀请一些玩家进入内测服务器查看服务器的稳定性。
(5)公测,放开注册,克隆服务器,让大量玩家进入。
(1)单元测试,也就是程序员自己写的程序。自己测试自己的逻辑代码
(2)合并内网测试,在内网的机器上跑通所有的逻辑,一般有专门测试人员完成。
(3)内网压力测试,测试某些指令的性能参数。可以重复数据包。
(4)内测,邀请一些玩家进入内测服务器查看服务器的稳定性。
(5)公测,放开注册,克隆服务器,让大量玩家进入。