欢迎使用"pomelo-robot"对Pomelo进行压力测试

pomelo-robot

pomelo-robot 是一个用来对pomelo游戏服务器框架进行性能测试的工具, 也可以测试其他基于socket.io服务的性能.
该模块可以采用单机或者分布式测试两种模式.

功能

对游戏项目进行自动化的性能测试和分析, 为游戏服务器提供机器人及其运行脚本, 最终输出性能测试分析报告.
pomelo-robot 模块通过沙箱的方式执行用户自定义的JS脚本. 运行过程中各客户端会自动把数据汇报给主节点, 主节点把所有节点的测试数据进行提炼汇总, 计算出平均响应时间等统计数据, 然后定时发给内置的HTTP服务器进行界面展示.

模块结构

模块内部运行结构如下:

"Master"负责收集所有"Client"的运行数据并展示统计结果.
"Client"负责在多个沙箱("User")中运行自定义脚本, 同时向"Master"汇报运行数据.

使用示例

创建Node.js测试工程, 工程目录结构如下图所示:

安装依赖库:

npm install pomelo-robot

实现自定义脚本配置

在"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);
    });
  });
}
// ...

上面的代码运行在沙箱中: 首先登录游戏服务器, 登录成功后回调"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"
打开浏览器访问地址"localhost:8889"

运行如下命令, 启动"client"服务:
"node app.js client"
注: 可以在多台机器上启动"client"服务进行性能和压力测试.

WEB界面会显示连接到"master"的"client"数量, 可以在"Per Agent Users"一栏中配置每个"client"将要运行的沙箱数量, 点击"Go"按钮通知所有的"client"开始运行. WEB界面会定时获取后台数据进行展示.
运行界面如下图所示:

具体请参考:
PomeloRobot-使用文档
pomelo-robot
pomelo-robot-demo
Pomelo-性能测试

标签: pomelo
palmtoy 在 2013-10-28 15:45发布
palmtoy 在 2013-10-28 17:45重新编辑 分享到 weibo
8 回复
#1 py8765 2013-10-28 16:10 回复

赞~

#2 w3hacker 2013-10-28 20:34 回复

赞~

#3 {3} gonglei007 2013-10-30 16:18 回复
请教一个问题:我们想自己写robot测试脚本,具体做法就是让这个脚本连接我们的服务器,请求一些数据,然后结束。但试来试去都没有成功。
我们尝试过用pomelo-jsclient-websocket或者pomelo-jsclient-socket.io来连接服务器,但得到ReferenceError:window is not defined的错误(这两个库里的window对象没找到定义)。
我们又尝试使用pomelo-robot-demo中的代码来连接,它又报“TypeError: Cannot read property 'protos' of undefined”,说pomelo.data.protos中的protos属性没定义。
我看PomeloRobotDemo中的测试是直接请求数据库,而我们是想把robot作为js客户端来连接服务器,请问怎么能实现这个需求呢?(最好能直接使用pomelo-jsclient-websocket/socket.io来做)。
谢谢!
gonglei007 2013-10-31 15:49 回复

我已经为这个问题创建了一个独立的讨论 - http://nodejs.netease.com/topic/5270c35f0a516e18513e28eb

palmtoy 2013-11-1 14:10 回复

试试按照PomeloRobot-使用文档的流程跑一下pomelo-robot-demo.

pomelo.data.protos是在initData函数中被初始化的, 可以参考pomelo-robot-demo/app/script/lord.js中的相关代码.

在pomelo-robot-demo中, lord.js中的mysql相关操作只是自动拿到一个登录名和密码, 这相当于用户在lordofpomelo的web页面中手动输入Username和Password. 后面读取用户数据还是由robot连接服务器后, 由game-server来操作数据库的.

sunchaomen 2016-11-8 22:03 回复

@gonglei007 你好,请问你这个问题解决了吗?请教下!如果有详细文档能发我邮箱吗?sunchao_men@163.com

#4 {1} roytan 2013-10-31 12:37 回复

同问,现在Pomelo Robot支持socket.io测试不?

palmtoy 2013-11-1 14:20 回复

可以支持socket.io来做测试, 只要在如pomelo-robot-demo/app/script/lord.js等的用户脚本中来使用socket.io连接服务器即可.

#5 {1} magiclizi 2013-10-31 16:12 回复

自己定义了一个脚本并且设置了配置文件中的执行间隔,为何永远都只会调用一次呢。。
脚本中只实现了一个登录操作,运行后可以收到数据,但是永远都只会执行一次
pomelo.init({
host:"192.168.29.13",
port : 1000,
log: true
},function(){
pomelo.request('login.loginHandler.userLogin', {account: "xiaoli888",password:"1234"}, function(data) {
console.log(data);
});

配置文件为

{
"master": {"host": "127.0.0.1", "port":8888, "webport":8889, "interval":1}
}

还有一个问题是。我的WEB浏览器上没有任何图表显示
});

palmtoy 2013-11-1 11:46 回复

如需运行多次脚本, 则需要在WEB界面的"Per Agent Users"一栏中配置每个"client"将要运行的沙箱数量, 这个沙箱数量即为要运行的次数.

只有执行多次才会有图表绘制.

请参考PomeloRobot-使用文档
试试按照PomeloRobot-使用文档的流程跑一下pomelo-robot-demo.

#6 fantasyni 2013-10-31 17:40 回复

赞啊

#7 Aries 2016-11-22 18:16 回复

請問如何使用wss連線,
更改了lord.js裡的ws:// to wss://
出現socket error {code : UNABLE_TO_VERIFY_LEAF_SIGNATURE}

多謝!

回到顶部