Skip to content

Commit

Permalink
AMS Benchmark tests rails-api#832
Browse files Browse the repository at this point in the history
Adding a benchmak test structure to help contributors to keep track
of how their PR will impact overall performance.

It enables developers to create test inside of tests/benchmark.

This implementation adds a rake task: ```rake benchmark``` that checkout
one commit before, run the test of  tests/benchmark, then mover back to
the last commit and run it again. By comparing the benchmark results between
both commits the contributor will notice if and how much  his contribution
will impact overall performance.
  • Loading branch information
joaomdmoura authored and bf4 committed Dec 23, 2015
1 parent d8b2b94 commit 2df41b4
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 0 deletions.
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,5 @@ end

group :development, :test do
gem 'rubocop', '~> 0.34.0', require: false
gem 'rugged'
end
35 changes: 35 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,38 @@ task default: [:test, :rubocop]

desc 'CI test task'
task :ci => [:default]

require 'rugged'
require 'benchmark'
Rake::TestTask.new :benchmark_tests do |t|
t.libs << "test"
t.test_files = FileList['test/**/*_benchmark.rb']
t.ruby_opts = ['-r./test/test_helper.rb']
t.verbose = true
end

task :benchmark do
@repo = Rugged::Repository.new('.')
ref = @repo.head

actual_branch = ref.name

set_commit('master')
old_bench = Benchmark.realtime { Rake::Task['benchmark_tests'].execute }

set_commit(actual_branch)
new_bench = Benchmark.realtime { Rake::Task['benchmark_tests'].execute }

puts 'Results ============================'
puts "------------------------------------~> (Branch) MASTER"
puts old_bench
puts "------------------------------------"

puts "------------------------------------~> (Actual Branch) #{actual_branch}"
puts new_bench
puts "------------------------------------"
end

def set_commit(ref)
@repo.checkout ref
end
50 changes: 50 additions & 0 deletions test/benchmark/serialization_benchmark.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
require 'test_helper'

module ActionController
module Serialization
class SerializerTest < ActionController::TestCase
class PostController < ActionController::Base

def render_with_cache_enable
comment = Comment.new({ id: 1, body: 'ZOMG A COMMENT' })
author = Author.new(id: 1, name: 'Joao Moura.')
post = Post.new({ id: 1, title: 'New Post', blog:nil, body: 'Body', comments: [comment], author: author })

render json: post
end
end

tests PostController

def test_render_with_cache_enable
ActionController::Base.cache_store.clear
get :render_with_cache_enable

expected = {
id: 1,
title: 'New Post',
body: 'Body',
comments: [
{
id: 1,
body: 'ZOMG A COMMENT' }
],
blog: {
id: 999,
name: 'Custom blog'
},
author: {
id: 1,
name: 'Joao Moura.'
}
}

assert_equal 'application/json', @response.content_type
assert_equal expected.to_json, @response.body

get :render_with_cache_enable
assert_equal expected.to_json, @response.body
end
end
end
end

0 comments on commit 2df41b4

Please sign in to comment.