node package manager
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »




Server side of totoro.

Latest stable version:v2.0

1. Installation

Node requirement

>= 0.10.12

Install from npm

$ npm install totoro-server -g

If it not works, you may add sudo before the command, as follows.

Install from github

To get the latest function (may not be stable)

$ git clone
$ cd totoro-server
$ npm install -g

2. Quick Start

  1. Launch server.

    $ totoro-server

    You should see an output like bellow:

    Start server <{{yourIP}}:9999>
  2. Start a driver

    Use any browser to visit {{yourIP}}:9999, then it registers as a web driver that can drive the browser of this kind run test.

    If you use it on pc, be mind that allow popup from {{yourIP}}, refer to popup settings.

Want to run some test? See the quick start of totoro.

3. What Is A Driver?

In a word, a driver is something open specified browser to visit specified URL and close it by directives from server.

Available drivers

Official drivers
  • web driver: any browser opens {{yourIP}}:9999 becomes a web driver, it's for temporary use only.
  • totoro-driver: a stable driver written in node, be able to drive chrome, safari, firefox and ie both on windows and mac.
Third party drivers

Add your driver here

How to write a driver?

If you know how to open and close a browser(or some other application), it's very very easy to write a driver for it.

All steps with pseudo-code.

  1. Set command line options

    • -s, --server: default is
  2. Link to server by socket and init.

    var socket = socketClient.connect({{server}} + '/__labor')
    // NOTE: the namespace of socket is '/__labor'
    socket.on('connect', function() {
      var initInfo = {
        // if the app you drive is not a browser
        // group is required, it could be any string you like
        group: 'groupName',
        device: { name: 'mac' },
        os: { name: 'macosx', version: '13.1.0' },
        agent: { name: 'chrome', version:'35.0.1916.114' }
      socket.emit('init', initInfo)
  3. Open or close specified browser when received corresponding directives.

    socket.on('add', function(data) {
       * structure of data
       * {
       *   orderId: {{orderId}},
       *   laborId: {{laborId}},
       *   laborTrait: {{labor trait info, the same as init info}},
       *   runner: {{test runner, typically be a url}}
       * }
      var key = data.orderId + '-' + data.laborId
      orders[key] = open(runner)
    socket.on('remove', function(data) {
      // the data structure is the same as 'add' event's but without the laborTrait
      var key = data.orderId + '-' + data.laborId
      ;delete orders[key]
  4. Close all browsers when dirver exits.

4. Cli Options

-H, --host

Server host。

Default: IP of this computer.

-P, --port

Server port。

Default: 9999

-d, --debug

Show debug log.

Default: false

5. Config File

If you need a config file, just place totoro-srever-config.json in the CWD, all options are written in lower camel case.

Data flow