https://github.com/NetEase/pomelo/wiki/PomeloRobot-%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3
這是wiki的教學,事實上我看完也是一知半解。
後來看了demo https://github.com/NetEase/pomelo-robot-demo
之後,實際操作一次才了解,
這個demo主要是用來測試pomelo官網上的那個lord的demo game。
所以裡面有很多不需要的東西。
先從大方向解譯一下這個robot的功用。
首先 你可以使用node app來啟動master模式
或是使用node app client來啟動client模式
master模式會運行一個終端,並且可以連上lolcahost:8889來操作及觀看robot的訊息
(wiki文件有詳細的圖)
所以master就是一個集成各個client的終端機
接下來client這個東西,指的是要去跑腳本的程序
一個client可以模擬好幾個測試程序。這個在master介面上的Per Agent Users參數可以調整。
也就是說 我可以將Per Agent Users設成2,然後執行 node app client
這樣就會登入2個測試腳本。
我也可以再同一台機器上 執行另一個node app client,這樣就會總共跑4個腳本(不過這樣做好像沒什麼意義,畢竟腳本一樣的話,消耗的都是同一台機器的資源)
所以就可以做到 我在a機器跟b機器都跑node app client,然後node app master掛在 c 機器上。
當然master你想掛哪一台都沒問題,但是基於我們在壓力測試的時候,可能會預估 嗯~ 每一台機器應該可以模擬100個測試程序,所以就將a跟b機器各跑100個Per Agent Users好了。那這時你如果把MASTER放在A或B其中一個機器上的話,就會照成那一台有額外的負擔,如果掛了就會考慮到這裡。。。畢竟壓力測試要測的是SERVER不是CLIENT嘛,當然要盡量保持CLIENT的穩定性。
我們現在舉一個例子來做,不要用DEMO裡那個LORD GAME了,那個好麻煩 還要DB,還要架好LORD GAME。
我們用聊天室來做ROBOT測試。就這個https://github.com/NetEase/chatofpomelo
首先你當然是先搞定聊天室,開啟聊天室的終端之後,順便開個網頁測試一下聊天室運作。
接著重寫ROBOT裡的lord.js腳本,腳本名稱位置在config裡面有 可以自已修改。
在lord.js裡,我們要連上 聊天室。
在這裡 每一個lord.js都是獨立運行的,也就是你Per Agent Users設多少,就會跑出多少個獨立的app出來。
所以你就盡情的在這裡寫腳本吧。。。
基本上要寫的就是把聊天室client端的腳本照抄一份進來而已。
聊天室是基於socket.io的(demo是ws的),所以你就把socket.io搬進來,具體寫法我也是整個把聊天室client端的復製過來修改一下而已。
然後 首先你會遇到一個問題,在傳送封包的時候,因為不在browser底下的話不會有Uint16Array這個function,所以我在傳訊息時就直接傳送json格式的字串,前面加個json字樣
socket.send("json"+JSON.stringify({id:id,route:route,body:msg}));
然後修改聊天室的接口node_modules\pomelo\lib\connectors\sioconnector.js裡的decode 修改成這樣
Connector.decode = Connector.prototype.decode = function(msg) {
if(msg.substr(0,4)=="json")//json
{
var _msg=msg.substr(4);
return JSON.parse(_msg);
}
else
{
//這裡就放舊的decode方法
這樣子一來,就不用改原本聊天室client的作法,而且測試程序的訊息也可以解析了。
到這裡,應該就可以使用robot連進聊天室了。
你可以在腳本中使用actor.id來辨別這是第幾個Per Agent Users,每一個不同的actor.id可以用來做登入不同角色的識別。
假設我想a機器登入 db裡的帳號100~199,b機器登入200~299
那我就可以使用actor.id來做。
至於是actor.id+100或是actor.id+200 那個起始值 你可以寫死,或者是從node app client 100 這裡代進去,
當然啦 你的app.js要去接這個值
var baseActorId= process.argv[3];之類的。
CONSOLE上的RUN SCRIPT ,填上正確的路徑的話,可以指定腳本。
詳細用法參考lib/agent/actor.js
這是wiki的教學,事實上我看完也是一知半解。
後來看了demo https://github.com/NetEase/pomelo-robot-demo
之後,實際操作一次才了解,
這個demo主要是用來測試pomelo官網上的那個lord的demo game。
所以裡面有很多不需要的東西。
先從大方向解譯一下這個robot的功用。
首先 你可以使用node app來啟動master模式
或是使用node app client來啟動client模式
master模式會運行一個終端,並且可以連上lolcahost:8889來操作及觀看robot的訊息
(wiki文件有詳細的圖)
所以master就是一個集成各個client的終端機
接下來client這個東西,指的是要去跑腳本的程序
一個client可以模擬好幾個測試程序。這個在master介面上的Per Agent Users參數可以調整。
也就是說 我可以將Per Agent Users設成2,然後執行 node app client
這樣就會登入2個測試腳本。
我也可以再同一台機器上 執行另一個node app client,這樣就會總共跑4個腳本(不過這樣做好像沒什麼意義,畢竟腳本一樣的話,消耗的都是同一台機器的資源)
所以就可以做到 我在a機器跟b機器都跑node app client,然後node app master掛在 c 機器上。
當然master你想掛哪一台都沒問題,但是基於我們在壓力測試的時候,可能會預估 嗯~ 每一台機器應該可以模擬100個測試程序,所以就將a跟b機器各跑100個Per Agent Users好了。那這時你如果把MASTER放在A或B其中一個機器上的話,就會照成那一台有額外的負擔,如果掛了就會考慮到這裡。。。畢竟壓力測試要測的是SERVER不是CLIENT嘛,當然要盡量保持CLIENT的穩定性。
我們現在舉一個例子來做,不要用DEMO裡那個LORD GAME了,那個好麻煩 還要DB,還要架好LORD GAME。
我們用聊天室來做ROBOT測試。就這個https://github.com/NetEase/chatofpomelo
首先你當然是先搞定聊天室,開啟聊天室的終端之後,順便開個網頁測試一下聊天室運作。
接著重寫ROBOT裡的lord.js腳本,腳本名稱位置在config裡面有 可以自已修改。
在lord.js裡,我們要連上 聊天室。
在這裡 每一個lord.js都是獨立運行的,也就是你Per Agent Users設多少,就會跑出多少個獨立的app出來。
所以你就盡情的在這裡寫腳本吧。。。
基本上要寫的就是把聊天室client端的腳本照抄一份進來而已。
聊天室是基於socket.io的(demo是ws的),所以你就把socket.io搬進來,具體寫法我也是整個把聊天室client端的復製過來修改一下而已。
然後 首先你會遇到一個問題,在傳送封包的時候,因為不在browser底下的話不會有Uint16Array這個function,所以我在傳訊息時就直接傳送json格式的字串,前面加個json字樣
socket.send("json"+JSON.stringify({id:id,route:route,body:msg}));
然後修改聊天室的接口node_modules\pomelo\lib\connectors\sioconnector.js裡的decode 修改成這樣
Connector.decode = Connector.prototype.decode = function(msg) {
if(msg.substr(0,4)=="json")//json
{
var _msg=msg.substr(4);
return JSON.parse(_msg);
}
else
{
//這裡就放舊的decode方法
這樣子一來,就不用改原本聊天室client的作法,而且測試程序的訊息也可以解析了。
到這裡,應該就可以使用robot連進聊天室了。
你可以在腳本中使用actor.id來辨別這是第幾個Per Agent Users,每一個不同的actor.id可以用來做登入不同角色的識別。
假設我想a機器登入 db裡的帳號100~199,b機器登入200~299
那我就可以使用actor.id來做。
至於是actor.id+100或是actor.id+200 那個起始值 你可以寫死,或者是從node app client 100 這裡代進去,
當然啦 你的app.js要去接這個值
var baseActorId= process.argv[3];之類的。
CONSOLE上的RUN SCRIPT ,填上正確的路徑的話,可以指定腳本。
詳細用法參考lib/agent/actor.js
沒有留言:
張貼留言