Braindead
Websocket cli client and replicator
Installation
npm i -g braindead
Usage
braindead -h
Output:
Usage: braindead [options] [command] Options: -V, --version output the version number -h, --help output usage information Commands: interact [options] connect to server and open an interact shell exec <files> run client yaml script replicate [options] <files> run replicator with an yaml script
Interaction Mode
Usage: interact [options] connect to server and open an interact shell Options: -H, --host <host> client host (default: localhost) -P, --port <port> client port -S, --ssl enable SSL -U, --uri <address> uri -t, --timeout <miliseconds> request timeout -h, --help output usage information
Example:
braindead interact -H localhost -P 3014braindead interact -H localhost -P 3014 -Sbraindead interact -U wss://localhost:3014
Executor Mode
Usage: exec [options] <files> run client yaml script Options: -h, --help output usage information
Example:
braindead exec ./client.yamlbraindead exec ./client1.yaml,./client2.yaml
Replicator Mode
Usage: replicate [options] <files> run replicator with an yaml script Options: -i, --interval <miliseconds> replicator intervel -c, --concurrency <count> replicator concurrent count -l, --level <verbose|info|warn|error> replicator log level -p, --prefix <prefix> replicator instance id prefix -o, --log <path> replicator log file path -h, --help output usage information
braindead replicate -o test.log -i 1000 -c 500 ./client.yamlbraindead replicate client1.yaml,client2.yaml,client3.yaml
Yaml Scripting
Examples:
- connect: host: 'localhost' port: 3014 ssl: true timeout: 5000- emit: route: 'gate.handler.connect' data: udid: $eval: '$options.name' expect: 'code === 200' success: '$session.host = host; $session.port = port'- disconnect:- sleep: 500- connect: host: $eval: '$session.host' port: $eval: '$session.port' ssl: true timeout: 5000- emit: route: 'connector.handler.login' data: udid: $eval: '$options.name'- emit: 'connector.handler.changeRoom'- emit: 'room.roomHandler.enterRoom'- emit: 'connector.handler.logout'- disconnect:
- connect: host: 'localhost' port: 3014 ssl: true timeout: 30000- emit: route: 'gate.handler.connect' data: udid: $eval: '$options.name' expect: 'code === 200' success: '$session.host = host; $session.port = port'- disconnect:- sleep: 500- connect: host: $eval: '$session.host' port: $eval: '$session.port' ssl: true timeout: 30000- emit: route: 'connector.handler.login' udid: $eval: '$options.name' expect: 'code === 200'- emit: route: 'connector.handler.changeRoom' expect: 'code === 200'- emit: route: 'room.roomHandler.enterRoom' expect: 'code === 200'- emit: route: 'room.userHandler.unlockSlot' data: slotId: 1 expect: '/^(200|400)$/.test(code)'- sleep: 500- emit: route: 'connector.handler.changeRoom' data: slotId: 1 mode: 1 type: 2 expect: 'code === 200'- emit: route: 'room.roomHandler.enterRoom' expect: 'code === 200'0- emit: route: 'room.slotsHandler.spin' data: bet: 1000 expect: 'code === 200' repeat: sleep: 6000
Expressions
connect
# connect to remote host - connect: # hostname(required) host: 'localhost' # port(required) port: 9000 # connection and request timeout in millisec(optional) timeout: 30000
disconnect
# disconnect from remote host - disconnect:
emit
# a request without message body - emit: 'room.roomHandler.enterRoom'
# a request - emit: # request route(required) route: 'connector.handler.login' # request data(optional) data: udid: '123456' # response test(optional) run in the context with current response data and global data expect: 'code === 200' # success hook(optional) run in the context with current response data and global data success: '$session.user = user' # repeat(optional) repeat: # count(optional, omit to make infinite loop) count: 3 # sleep for millisec before next repeat(optional) sleep: 6000
sleep
# sleep for millisec - sleep: 6000
Interpolation
$session
, $options
, $env
can be used in $eval
, expect
, and success
.
$eval
can be used in connect
and emit
.
$session
Fetch variables stored in session.
- connect: host: $eval: '$session.host' port: $eval: '$session.port'
- emit: route: $eval: '$session.route'
- emit: route: 'room.userHanlder.unlock' data: id: $eval: '$session.id'
$options
Fetch variables stored in options. Available variables are host
, port
, ssl
, uri
, timeout
, interval
, concurrency
, level
and prefix
.
$env
Fetch variables stored in environment variables.
- emit: route: 'room.userHanlder.check' data: env: $eval: '$env.NODE_ENV'