Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AMS Benchmark tests #832 #872

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,15 @@ install:
- bundle install --retry=3

env:
- "RAILS_VERSION=4.0"
- "RAILS_VERSION=4.1"
- "RAILS_VERSION=4.2"
- "RAILS_VERSION=master"
global:
- JRUBY_OPTS=-Xcext.enabled=true
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😢
I'll find a workaround

matrix:
- "RAILS_VERSION=4.0"
- "RAILS_VERSION=4.1"
- "RAILS_VERSION=4.2"
- "RAILS_VERSION=master"

matrix:
allow_failures:
- rvm: ruby-head
- env: "RAILS_VERSION=master"
- env: "RAILS_VERSION=master"
3 changes: 2 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ source 'https://rubygems.org'
# Specify your gem's dependencies in active_model_serializers.gemspec
gemspec

gem "minitest"
gem 'minitest'
gem 'git'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe you should use the gemspec's development_dependency method, no?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😅 yeap


version = ENV["RAILS_VERSION"] || "4.2"

Expand Down
40 changes: 37 additions & 3 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,12 +1,46 @@
require "bundler/gem_tasks"

require 'bundler/gem_tasks'
require 'git'
require 'benchmark'
require 'rake/testtask'

task :default => :test

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

task :default => :test
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
@git = Git.init('.')
ref = @git.current_branch

actual = run_benchmark_spec ref
master = run_benchmark_spec 'master'

@git.checkout(ref)

puts "\n\nResults ============================\n"
puts "------------------------------------~> (Branch) MASTER"
puts master
puts "------------------------------------\n\n"

puts "------------------------------------~> (Actual Branch) #{ref}"
puts actual
puts "------------------------------------"
end

def run_benchmark_spec(ref)
@git.checkout(ref)
response = Benchmark.realtime { Rake::Task['benchmark_tests'].invoke }
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, when you switch to a branch, do you run the tests only once? Given there's warm up and all that, would it make sense to run it 2 or 3 times each branch in order to get a better average?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I made some tests and there was no huge difference, anyway, I'll give it a try again after made the updates required 😄

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool. Just remember that tests are usually very fast, but when in production and getting hit by thousands of users, the minor difference can make a huge difference.

Rake::Task['benchmark_tests'].reenable
response
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
7 changes: 0 additions & 7 deletions test/serializers/generators_test.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,3 @@
class Foo < Rails::Application
if Rails.version.to_s.start_with? '4'
config.eager_load = false
config.secret_key_base = 'abc123'
end
end

Rails.application.load_generators

require 'generators/serializer/serializer_generator'
Expand Down
2 changes: 2 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ class Foo < Rails::Application
config.action_controller.perform_caching = true
config.active_support.test_order = :random
ActionController::Base.cache_store = :memory_store
config.eager_load = false
config.secret_key_base = 'abc123'
end
end

Expand Down