pomelo-robot 是用于 pomelo 框架的性能测试工具。也可以用于其它同类应用的测试。
安装
通过命令:
npm install pomelo-robot
安装需要有 visual studio 2010 安装(vc 2010 也可以),总之能编译 pomelo 的环境是绝对可以的。
使用
官方的 wiki 中提供基本的写法参考,地址见 pomelo-robot 使用文档。
同时官方有提供一个使用的 demo,不过代码写的不是很好看。地址见: lord of pomelo 测试 demo。
一些能够从官方渠道获取的细节,博主就不赘述了。博主简单介绍下使用形式。
通过这个 demo 我们可以了解到 pomelo-robot 的基本用法。首先是两种执行方式,一种是 master 一种是 client,通过:
node app [master]
可以搭建一个测试的服务器,该服务端主体是一个 web 网站,用于汇总、统计、计算数据并生成走势图像。其次是通过:
node app client
来开启一个客户端。客户端用于运行测试脚本,可以重复多个并且可以布置在多台机器上。其架构如图:
需要介绍的地方就是关于图形数据的生成的一个比较重要的方法。在 lord 的测试 demo 脚本(脚本地址)中有写到:
// 初始化socketClient pomelo.init({ host: host, port: port, log: true }, function() { // monitor(START, 'entry', ActFlagType.ENTRY); pomelo.request('connector.entryHandler.entry', { token: token }, function(data) { // monitor(END, 'entry', ActFlagType.ENTRY); if (callback) { callback(data.code); } if (data.code == 1001) { console.log('Login fail!'); return; } else if (data.code == 1003) { console.log('Username not exists!'); return; } if (data.code != 200) { console.log('Login Fail!'); return; } afterLogin(pomelo, data); }); });
其中的被注释的 monitor 函数就是用来统计数据生成图像的方法。该函数的定义位于第415行:
var monitor = function(type, name, reqId) { if (typeof actor !== 'undefined') { actor.emit(type, name, reqId); } else { console.error(Array.prototype.slice.call(arguments, 0)); } }
可以看到这个 monitor 函数其实是 pomelo-robot 提供的 actor 对象的一个封装。作用是对一个事件进行计时,随后把数据发送到 pomelo-robot 的 master 服务器。其所提供的事件一共有4中分别是: start、end、incr、decr, 其中 start 和 end 是成对的, 类似 console.time 和 console.timeEnd, 后面的 incr 和 decr 分别是累计增加和累计减少. 函数调用的写法参见其 demo, 这里就不赘述了.
配置
在官方 wiki 中有提到配置项, 在 lord 的 demo 中也有现成的配置文件,不过其中之配置了 master 字段, 除了 master 之外其他还可以配置的有:
{ // robot 服务器地址, socket 端口 和 http 端口 "master":{"host": "192.168.1.30","port":8888,"webport":8889}, // 要测试的游戏 ip 地址和端口 "apps":[{"host":"210.14.xxx.xxx","port":3050}], // 指定客户端地址 (其实客户端可以自动指定分配) "clients":["127.0.0.1"] }
数据
关于上述 lord 的 性能测试 demo 官方还有给出一个测试报告 (报告地址), 各位可以去参考一下他们的数据统计和分析:
其中的 Per client Agents 是你当前链接服务端的客户端数目, 随后的 Per Agent Users 是每个 client 所代理的用户数目 (也可以简单看做一个客户端执行几次, 不过要等到所有都执行结束才会断线), 在 Current Agents 后面列举的 ip 就是当前链接上来的客户端:
随后的摘要 (summary) 中简单介绍几个单词的意思:
Max, Min 统计操作所消耗的最大时间和最小时间, 单位 ms
Avg 请求平均消耗时间, 单位 ms
Qps 每秒查询率, 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准
Count 请求执行次数
其他
关于如何使用 pomelo-robot 来调试其他同类程序, 大家观察 官方给的 demo 脚本地址 就可以发现其中前半部分大部分都是 pomelo 客户端请求所用的方法, 考虑把这些方法换成你自己的客户端连接方法即可, 后方统计没有太大变化.