From c13ac5c2d70ac3a75208d4d1389a5b0649ebd4f3 Mon Sep 17 00:00:00 2001 From: Florian Braun <5863788+FloThinksPi@users.noreply.github.com> Date: Fri, 29 Sep 2023 13:33:44 +0200 Subject: [PATCH] Add rspec-benchmark capabilities to test performance in rspecs --- Gemfile | 1 + Gemfile.lock | 9 +++++++++ spec/spec_helper.rb | 4 ++++ spec/unit/controllers/v3/app_features_controller_spec.rb | 6 ++++++ spec/unit/controllers/v3/apps_controller_spec.rb | 6 ++++++ 5 files changed, 26 insertions(+) diff --git a/Gemfile b/Gemfile index afa6bad56fd..7b59825aa23 100644 --- a/Gemfile +++ b/Gemfile @@ -84,6 +84,7 @@ group :test do gem 'rack-test' gem 'rspec', '~> 3.12.0' gem 'rspec_api_documentation', '>= 6.1.0' + gem 'rspec-benchmark', '~> 0.6.0' gem 'rspec-collection_matchers' gem 'rspec-instafail' gem 'rspec-its' diff --git a/Gemfile.lock b/Gemfile.lock index 673de178c62..389878e1741 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -103,6 +103,9 @@ GEM base64 (0.1.1) beefcake (1.0.0) benchmark (0.2.1) + benchmark-malloc (0.2.0) + benchmark-perf (0.6.0) + benchmark-trend (0.4.0) bigdecimal (3.1.4) bit-struct (0.17) builder (3.2.4) @@ -415,6 +418,11 @@ GEM rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) rspec-mocks (~> 3.12.0) + rspec-benchmark (0.6.0) + benchmark-malloc (~> 0.2) + benchmark-perf (~> 0.6) + benchmark-trend (~> 0.4) + rspec (>= 3.0) rspec-collection_matchers (1.2.0) rspec-expectations (>= 2.99.0.beta1) rspec-core (3.12.2) @@ -630,6 +638,7 @@ DEPENDENCIES rfc822 roodi rspec (~> 3.12.0) + rspec-benchmark (~> 0.6.0) rspec-collection_matchers rspec-instafail rspec-its diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index f75814a2fcf..3466d23e26b 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -79,6 +79,7 @@ require 'rspec/collection_matchers' require 'rspec/its' require 'rspec/wait' + require 'rspec-benchmark' end each_run_block = proc do @@ -93,6 +94,7 @@ mocks.verify_partial_doubles = true end rspec_config.filter_run_excluding :stepper + rspec_config.filter_run_excluding :perf rspec_config.expose_dsl_globally = false rspec_config.backtrace_exclusion_patterns = [%r{/gems/}, %r{/bin/rspec}] @@ -127,6 +129,8 @@ rspec_config.include SpaceRestrictedResponseGenerators + rspec_config.include RSpec::Benchmark::Matchers + rspec_config.before(:all) { WebMock.disable_net_connect!(allow: %w[codeclimate.com fake.bbs]) } rspec_config.before(:all, type: :integration) do WebMock.allow_net_connect! diff --git a/spec/unit/controllers/v3/app_features_controller_spec.rb b/spec/unit/controllers/v3/app_features_controller_spec.rb index 9cfa39ecb5e..5c09d29425c 100644 --- a/spec/unit/controllers/v3/app_features_controller_spec.rb +++ b/spec/unit/controllers/v3/app_features_controller_spec.rb @@ -36,6 +36,12 @@ end end + describe 'performance', :perf do + it 'returns in reasonable time' do + expect { get :index, params: { app_guid: app_model.guid } }.to perform_under(10).ms + end + end + it 'returns app features' do get :index, params: { app_guid: app_model.guid } expect(parsed_body).to eq( diff --git a/spec/unit/controllers/v3/apps_controller_spec.rb b/spec/unit/controllers/v3/apps_controller_spec.rb index 4b022c59ffe..070c25dfab6 100644 --- a/spec/unit/controllers/v3/apps_controller_spec.rb +++ b/spec/unit/controllers/v3/apps_controller_spec.rb @@ -11,6 +11,12 @@ set_current_user_as_admin(user:) end + context 'performance', :perf do + it 'returns in reasonable time' do + expect { get :index, params: {} }.to perform_under(10).ms + end + end + context 'query params' do context 'invalid param format' do it 'returns 400' do