I am looking for some advice on the best way to parallelize a large
set of browser-based regression tests written in rspec. Just as a
note; we are running these specs with RSpec 2.5 on JRuby 1.6.1.
Our current set of specs takes about 4 hours to run when it is not
parallelized. We have implemented a simple “bucket” parallelization
scheme that basically takes each spec file and divides them evenly
across a specified number of forked buckets. This simple solution
has problems:
Some forked buckets finish early and exit. They don’t get the
chance to contribute to finishing the remaining work.
It is somewhat difficult to aggregate all the results into one
spot (Not really, but annoying).
So… What do I want?
Is RSpec the right tool? If no, what would you suggest?
It seems like having a queue of specs and a thread pool would
address my two points above. But… I don’t think RSpec is thread
safe (Specifically RSpec::Core.world and RSpec::Core.configuration).
Thoughts?
The multiple databases will be necessary even if you do have multiple
threads if you are accessing your database in your tests, unless either:
- You run all your examples that hit the database in a single
thread, or;
- You will have to careful choose how to write your tests in a
thread-safe way, which will is very likely error prone and you should
make your tests as simple as possible.
On the other hand, having as many databases as many threads/processes
you have is a much simpler solution and it is not that complicated since
Rails can generate them for you: “rake parallel:create_databases” or
something like that.
Maybe dripdrop can make it easy to write some simple performant queues?
The nice thing is that if you do need to grow beyond on machine zeromq
makes that mauch less painful than it was before.
There was a thread.new in DripDrop the last time I looked, and I
haven’t had the time to see if making it optionnal (vs some
observable) is possible/easy.
HTH?
Sidu.
scheme that basically takes each spec file and divides them evenly
–
πόλλ’ οἶδ ἀλώπηξ, ἀλλ’ ἐχῖνος ἓν μέγα
[The fox knows many things, but the hedgehog knows one big thing.]
Archilochus, Greek poet (c. 680 BC – c. 645 BC) http://wiki.hedgehogshiatus.com
Wouldn’t using threads require that the code being tested also be threadsafe?
Yes. In my case, we are testing a web application through the
browser (regression tests). If the web application is not thread
safe, we want to know about it
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.