pomelo-robot 使用文档
pomelo-robot 是一个用来对pomelo游戏服务器框架进行性能测试的工具, 也可以测试其他基于socket.io服务的性能. 该模块可以采用单机或者分布式测试两种模式.
功能
对游戏项目进行自动化的性能测试和分析, 为游戏服务器提供机器人及其运行脚本, 最终输出性能测试分析报告. pomelo-robot 模块通过沙箱的方式执行用户自定义的JS脚本. 运行过程中各客户端会自动把数据汇报给主节点, 主节点把所有节点的测试数据进行提炼汇总, 计算出平均响应时间等统计数据, 然后定时发给内置的HTTP服务器进行界面展示.
模块结构
模块内部运行结构如下:
"Master"负责收集所有"Client"的运行数据并展示统计结果.
"Client"负责在多个沙箱("User")中运行自定义脚本, 同时向"Master"汇报运行数据.
使用示例
创建Node.js测试工程, 工程目录结构如下图所示:
安装依赖库:
npm install pomelo-robot
config.json配置
"config.json"分为两种运行环境: 开发(dev)或生产(prod)环境, "prod"环境的文件内容如下:
{
"master": {"host": "127.0.0.1", "port":8888, "webport":8889, "interval":500}
}
"master":主服务器的IP, 与客户端的通讯端口, WEB界面端口, 间隔多少毫秒运行一个自定义JS脚本(如:lord.js).
实现自定义脚本配置
在"env.json"中配置自定义脚本路径:
{
"env": "prod",
"script": "/app/script/lord.js"
}
实现自定义脚本"lord.js":
// ...
var queryHero = require(cwd + '/app/data/mysql').queryHero;
// ...
function entry(host, port, token, callback) {
// ...
// 初始化socketClient
pomelo.init({host: host, port: port, log: true}, function() {
pomelo.request('connector.entryHandler.entry', {token: token}, function(data) {
// ...
afterLogin(pomelo,data);
});
});
}
// ...
"/app/data/mysql.js"中查找登录角色的代码如下:
// ...
queryHero = function(client,limit,offset,cb){
var users = [];
var sql = "SELECT User.* FROM User,Player where User.id = Player.userId and User.name like 'pomelo%' limit ? offset ? ";
// ...
};
// ...
上面的代码运行在沙箱中: 首先登录游戏服务器, 登录成功后回调"afterLogin"函数, 用户可以进行后续的相关操作.
启动入口文件app.js
"app.js"会根据启动参数判断是启动"master"服务还是"client"服务.
var envConfig = require('./app/config/env.json');
var config = require('./app/config/' + envConfig.env + '/config');
//...
if (mode === 'master') {
robot.runMaster(__filename);
} else {
var script = (process.cwd() + envConfig.script);
robot.runAgent(script);
}
// ...
具体代码可参考工程.
运行测试
运行如下命令, 启动"master"服务:
"node app.js master"
打开浏览器访问地址"http://masterIp:8889"
运行如下命令, 启动"client"服务:
"node app.js client"
注: 可以在多台机器上启动"client"服务进行性能和压力测试.
WEB界面会显示连接到"master"的"client"数量, 可以在"Per Agent Users"一栏中配置每个"client"将要运行的沙箱数量, 点击"Go"按钮通知所有的"client"开始运行. WEB界面会定时获取后台数据进行展示.
运行界面如下图所示:
其他
源代码请参考工程