0.1.9 • Published 10 years ago

jiny v0.1.9

Weekly downloads
1
License
ISC
Repository
bitbucket
Last release
10 years ago

Jiny - runs tests/jobs in parallel

jiny allows to run your tests/jobs/commands in parallel on the different servers. Main goal of jiny is horizontal scalability for testing.

It has 4 main features:

  • upload project folder to the all servers (slaves) - jiny upload
  • prepare project on the all slaves - jiny run "./prepare.sh"
  • make job queue based on mask and pattern and run in parallel jiny feed *.js "mocha -R spec @"
  • make job queue based on pipe and run in parallel find ... | jiny jobs

Install

  • Require: tar
  • npm install -g jiny

Picture

jiny

Help

> jiny 


  Usage: jiny [options] [command]

  Commands:

    master
       Starts master

    slave
       Starts slave

    upload
       Upload dir to the slaves

    run [command]
       Runs command on the all slaves. Prepare project on the all slaves. `jiny run "./prepare.sh"`

    feed [mask] [pattern]
       Find files by mask, build job based on pattern and runs jobs in parallel on different slaves. Replaces `@` -> `[file name]`. Example: `jiny --dir tests feed *.js "mocha -R spec @"`

    jobs
       Runs commands in  in parallel on the different slaves. Uses pipe: `find tests/ | grep .js | awk '{print "echo "$1" && sleep 1"}' | jiny jobs`

    stop
       Stops slaves and master

    wait.slaves [quantity]
       Waits for slaves registered in the master


  Options:

    -h, --help     output usage information
    -V, --version  output the version number
    --port [port]  master port
    --host [host]  master host
    --dir [dir]    work dir
    --detach       runs detached process: master / slave
    --live         master option to save alive slaves after exit
    --skip-upload  slave option to skip upload on this slave, if you want to use slave on the master

Local example

Make dirs

  • mkdir ~/my-project # make project dir
  • mkdir ~/my-project-1 # make slave dir 1
  • mkdir ~/my-project-2 # make slave dir 2

Start master and slaves (in different terminals)

  • jiny master --dir ~/my-project/ # start master
  • jiny slave --dir ~/my-project-1/ # start slave #1
  • jiny slave --dir ~/my-project-2/ # start slave #2

Prepare project (in another terminal)

> jiny run "echo prepare-project && pwd && sleep 1" # run same command on the both slaves in same time

I am client http://10.0.2.15:7500
#1 10.0.2.15 > echo prepare-project && pwd && sleep 1
prepare-project
/home/vagrant/my-project-1

#2 10.0.2.15 > echo prepare-project && pwd && sleep 1
prepare-project
/home/vagrant/my-project-2

PASSed 1s

Make fake tests

  • mkdir ~/my-project/tests # make like tests dir in the project
  • touch ~/my-project/tests/test1.js # make like test1
  • touch ~/my-project/tests/test2.js # make like test2

Upload tests to slaves

> jiny upload # upload project to slaves

I am client http://10.0.2.15:7500
#1 10.0.2.15 uploaded dir: /home/vagrant/my-project-1/ time: 0s
#2 10.0.2.15 uploaded dir: /home/vagrant/my-project-2/ time: 0s
done 0s

#### Check uploaded data
> jiny run "pwd && ls tests" # check that tests have been uploaded

I am client http://10.0.2.15:7500
#1 10.0.2.15 > pwd && ls tests
/home/vagrant/my-project-1
test1.js
test2.js

#2 10.0.2.15 > pwd && ls tests
/home/vagrant/my-project-2
test1.js
test2.js

PASSed 0s

Find files by mask, build job based on pattern and runs jobs in parallel

  • it will run commands one by one on the free slaves
  • slave #1 executes test1.js, slave #2 executest test2.js in same time.
  • in this example I use mocha to run these tests
  • real examples looks like:
    • jiny feed --dir features *.feature "cucumber.js features/@"
    • jiny feed --dir src *Test.php "phpunit -c app/ src/@"
> jiny --dir ~/my-project/tests feed *.js "mocha -R spec tests/@"

I am client http://10.0.2.15:7500
#1 10.0.2.15 > mocha -R spec tests/test1.js


  0 passing (5ms)


#2 10.0.2.15 > mocha -R spec tests/test2.js


  0 passing (5ms)


PASSed 0s

Stop all: slaves and master

> jiny stop # stops all, slaves and master

Notes

Start master and slaves (in same terminal)

  • if you want to work in one terminal use --detach option.

    • jiny master --dir ~/my-project/ --detach # start master
    • jiny slave --dir ~/my-project-1/ --detach # start slave #1
    • jiny slave --dir ~/my-project-2/ --detach # start slave #2

Find files by find and grep and pipe it to jiny jobs

  • if you want to make job queue by pipe you can use this example
> find ~/my-project/tests | grep .js | awk '{print "echo "$1" && sleep 1"}' | jiny jobs

I am client http://10.0.2.15:7500

#1 192.168.1.131 > echo /home/vagrant/my-project/tests/test1.js && sleep 1
/home/vagrant/my-project/tests/test1.js

#2 192.168.1.131 > echo /home/vagrant/my-project/tests/test2.js && sleep 1
/home/vagrant/my-project/tests/test2.js

PASSed 1s

Run your tests in parallel, be scalable horizontal! Enjoy and be happy!

0.1.9

10 years ago

0.1.8

10 years ago

0.1.7

10 years ago

0.1.6

10 years ago

0.1.5

10 years ago

0.1.4

10 years ago

0.1.3

10 years ago

0.1.2

10 years ago

0.1.1

10 years ago

0.1.0

10 years ago

0.0.9

10 years ago

0.0.8

10 years ago

0.0.7

10 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.2

10 years ago

0.0.1

10 years ago