-
Notifications
You must be signed in to change notification settings - Fork 505
Home
With sphinx -- by rgo
At file config/sphinx.yml in test or cucumber section:
cucumber:
port: <%= 9313 + ENV['TEST_ENV_NUMBER'].to_i %>
searchd_file_path: <%= "#{RAILS_ROOT}/db/sphinx/sphinx.#{ENV['TEST_ENV_NUMBER'].to_i}" %>
config_file: <%= "#{RAILS_ROOT}/config/cucumber.#{ENV['TEST_ENV_NUMBER'].to_i}.sphinx.conf" %>
searchd_log_file: <%= "#{RAILS_ROOT}/log/searchd.#{ENV['TEST_ENV_NUMBER'].to_i}.log" %>
query_log_file: <%= "#{RAILS_ROOT}/log/searchd.query.#{ENV['TEST_ENV_NUMBER'].to_i}.log" %>
pid_file: <%= "#{RAILS_ROOT}/log/searchd.#{ENV['TEST_ENV_NUMBER'].to_i}.pid" %>
( I think searchd_log_file and query_log_file are not mandatory. )
With capybara(~>0.4.0)+selenium -- by rgo
Capybara.server_port = 9887 + ENV['TEST_ENV_NUMBER'].to_i
With capybara(=0.3.9)/Rails 2.3 -- by xunker
Add to features/support/env.rb:
if ENV['TEST_ENV_NUMBER']
class Capybara::Server
def find_available_port
@port = 9887 + ENV['TEST_ENV_NUMBER'].to_i
@port += 1 while is_port_open?(@port) and not is_running_on_port?(@port)
end
end
end
With ci_reporter for rspec -- by morganchristiansson
export CI_REPORTS=results
Add spec/parallel_specs.opts with the contents:
--format progress
--require ci/reporter/rake/rspec_loader
--format CI::Reporter::RSpec:/dev/null
Our project has the following in test/test_helper.rb
if ENV["CI_REPORTS"] == "results"
require "ci/reporter/rake/test_unit_loader"
end
Run the tasks like this: rake "parallel:features[,,--format progress --format junit --out ${CI_REPORTS} --no-profile -r features]"
Or without rake like this:
bundle exec
For more information on how to configure ci_reporter check under advanced usage on http://caldersphere.rubyforge.org/ci_reporter/
With ci_reporter for test_unit -- by phoet
See this issue 29 for more information:
# add the ci_reporter to create reports for test-runs, since parallel_tests is not invoked through rake
puts "running on #{Socket.gethostname}"
if /buildserver/ =~ Socket.gethostname
require 'ci/reporter/test_unit'
module Test
module Unit
module UI
module Console
class TestRunner
def create_mediator(suite)
# swap in ci_reporter custom mediator
return CI::Reporter::TestUnit.new(suite)
end
end
end
end
end
end
end
With DatabaseCleaner for RSpec -- by sciprog
See issue 66 for more information.
Do not use the truncation strategy in DatabaseCleaner, in your RSpec config.
This strategy seems to cause a bottleneck which will negate any gain made
through parallelization of your tests. If possible, use the transaction strategy
over the truncation strategy.
*Note: This issue does not seem to exist in relation to features, only to specs.
If you have put your features into subdirectories you may have problems running them in parallel as it will not find your step_definitions. To work around this I put all my features into the features directory.
You have to require features/ folder for cucumber in order to load step definitions.
rake "parallel:features[4, '', '-rfeatures/']"
If you want it to work with rake parallel:features
add -rfeatures/
to the end of std_opts
in config/cucumber.yml
If you do not have enough scenarios to warrant a separate instance of external service as described in sphinx section above, create a "mutex" in your env.rb file
Before("@solr") do
#we do not want solr tests to run in parallel, so let's simulate a mutex
while File.exists?("tmp/cucumber_solr")
sleep(0.2)
end
File.open("tmp/cucumber_solr", "w") {}
Sunspot.session = $original_sunspot_session
Sunspot.remove_all!
# or do other things
end
After("@solr") do
File.delete("tmp/cucumber_solr")
end
When running with cucumber + capybara + selenium-webdriver (w firefox), this error may be encountered due to firing of too many firefox instances altogether. To fix this issue, add the following to features/support/env.rb:
unless (env_no = ENV['TEST_ENV_NUMBER'].to_i).zero?
# As described in the readme
Capybara.server_port = 8888 + env_no
# Enforces a sleep time, i need to multiply by 10 to achieve consistent results on
# my 8 cores vm, may work for less though.
sleep env_no * 10
end
You may get unexpected errors like EOFError
. If so, make sure cache files differ for processes. Change you config/environment/test.rb
config.action_mailer.cache_settings = { :location => "#{Rails.root}/tmp/cache/action_mailer_cache_delivery#{ENV['TEST_ENV_NUMBER']}.cache" }
!! add your own experience / gotchas !!