19893a1c10
This benchmark suite uses benchmark-ips (https://github.com/evanphx/benchmark-ips) behind the scenes. Specs can be turned into benchmark specs by setting "benchmark" to "true" in the top-level describe block like so: describe SomeClass, benchmark: true do end Writing benchmarks can be done using custom RSpec matchers, for example: describe MaruTheCat, benchmark: true do describe '#jump_in_box' do it 'should run 1000 iterations per second' do maru = described_class.new expect { maru.jump_in_box }.to iterate_per_second(1000) end end end By default the "iterate_per_second" expectation requires a standard deviation under 30% (this is just an arbitrary default for now). You can change this by chaining "with_maximum_stddev" on the expectation: expect { maru.jump_in_box }.to iterate_per_second(1000) .with_maximum_stddev(10) This will change the expectation to require a maximum deviation of 10%. Alternatively you can use the it block style to write specs: describe MaruTheCat, benchmark: true do describe '#jump_in_box' do subject { -> { described_class.new } } it { is_expected.to iterate_per_second(1000) } end end Because "iterate_per_second" operates on a block, opposed to a static value, the "subject" method must return a Proc. This looks a bit goofy but I have been unable to find a nice way around this.
54 lines
1.1 KiB
Ruby
54 lines
1.1 KiB
Ruby
Rake::Task["spec"].clear if Rake::Task.task_defined?('spec')
|
|
|
|
namespace :spec do
|
|
desc 'GitLab | Rspec | Run request specs'
|
|
task :api do
|
|
cmds = [
|
|
%W(rake gitlab:setup),
|
|
%W(rspec spec --tag @api)
|
|
]
|
|
run_commands(cmds)
|
|
end
|
|
|
|
desc 'GitLab | Rspec | Run feature specs'
|
|
task :feature do
|
|
cmds = [
|
|
%W(rake gitlab:setup),
|
|
%W(rspec spec --tag @feature)
|
|
]
|
|
run_commands(cmds)
|
|
end
|
|
|
|
desc 'GitLab | Rspec | Run benchmark specs'
|
|
task :benchmark do
|
|
cmds = [
|
|
%W(rake gitlab:setup),
|
|
%W(rspec spec --tag @benchmark)
|
|
]
|
|
run_commands(cmds)
|
|
end
|
|
|
|
desc 'GitLab | Rspec | Run other specs'
|
|
task :other do
|
|
cmds = [
|
|
%W(rake gitlab:setup),
|
|
%W(rspec spec --tag ~@api --tag ~@feature --tag ~@benchmark)
|
|
]
|
|
run_commands(cmds)
|
|
end
|
|
end
|
|
|
|
desc "GitLab | Run specs"
|
|
task :spec do
|
|
cmds = [
|
|
%W(rake gitlab:setup),
|
|
%W(rspec spec),
|
|
]
|
|
run_commands(cmds)
|
|
end
|
|
|
|
def run_commands(cmds)
|
|
cmds.each do |cmd|
|
|
system({'RAILS_ENV' => 'test', 'force' => 'yes'}, *cmd) or raise("#{cmd} failed!")
|
|
end
|
|
end
|