Nonsense Placement Mandatory


    2.0.3 • Public • Published



    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



    npm i totoro-server

    DownloadsWeekly Downloads






    Last publish


    • kangpangpang
    • fool2fish