Skip to content

Speed up commits spec using let_it_be

Brian Williams requested to merge bwill/speed-up-commits-spec into master

What does this MR do and why?

Describe in detail what your merge request does and why.

This MR refactors spec/requests/api/commits_spec.rb to use let_it_be for factories, where possible. These greatly speeds up the specs by removing redundant factory initializations.

This reduces the time taken to run the tests from ~40 minutes to ~11 minutes

Before

FPROF=1 bundle exec rspec spec/requests/api/commits_spec.rb 
[TEST PROF INFO] FactoryProf enabled (simple mode)
warning: parser/current is loading parser/ruby27, which recognizes2.7.6-compliant syntax, but you are running 2.7.5.
Please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
[TEST PROF INFO] FactoryProf enabled (simple mode)
[TEST PROF INFO] No factories detected
Run options: include {:focus=>true}

All examples were filtered out; ignoring {:focus=>true}
[TEST PROF INFO] No factories detected
[TEST PROF INFO] No factories detected
[TEST PROF INFO] No factories detected
[TEST PROF INFO] No factories detected
[TEST PROF INFO] No factories detected
==> GitLab Workhorse set up in 22.574208 seconds...
[TEST PROF INFO] No factories detected

Test environment set up in 31.604982 seconds
.................................................................................................................................................................................................................................................................

Finished in 44 minutes 25 seconds (files took 43.93 seconds to load)
257 examples, 0 failures

[TEST PROF INFO] Factories usage

 Total: 1116
 Total top-level: 832
 Total time: 40:02.278 (out of 45:02.385)
 Total uniq factories: 14

   total   top-level     total time      time per call      top-level time               name

     295         290       38.1278s            0.1292s            37.6486s               user
     270         270     2355.2841s            8.7233s          2355.2841s            project
     259           0       38.8686s            0.1501s             0.0000s          namespace
     223         223        2.2500s            0.0101s             2.2500s personal_access_token
      13          13        0.5020s            0.0386s             0.5020s     note_on_commit
      13          13        0.3137s            0.0241s             0.3137s  ci_empty_pipeline
       9           0        0.0446s            0.0050s             0.0000s namespace_settings
       9           0        0.0329s            0.0037s             0.0000s namespace_ci_cd_settings
       9           9        4.5606s            0.5067s             4.5606s      merge_request
       9           9        1.0976s            0.1220s             1.0976s              group
       2           2        0.0754s            0.0377s             0.0754s   protected_branch
       2           2        0.5333s            0.2666s             0.5333s diff_note_on_commit
       2           0        0.0010s            0.0005s             0.0000s text_diff_position
       1           1        0.0135s            0.0135s             0.0135s            license

After

$ FPROF=1 bundle exec rspec spec/requests/api/commits_spec.rb     
[TEST PROF INFO] FactoryProf enabled (simple mode)
warning: parser/current is loading parser/ruby27, which recognizes2.7.6-compliant syntax, but you are running 2.7.5.
Please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
Run options: include {:focus=>true}

All examples were filtered out; ignoring {:focus=>true}
[TEST PROF INFO] No factories detected
[TEST PROF INFO] No factories detected
[TEST PROF INFO] No factories detected
[TEST PROF INFO] No factories detected
[TEST PROF INFO] No factories detected
[TEST PROF INFO] No factories detected

Test environment set up in 8.184992 seconds
.........................................................................................................................................................................................................................................................

Finished in 14 minutes 9 seconds (files took 18.09 seconds to load)
249 examples, 0 failures

[TEST PROF INFO] Factories usage

 Total: 526
 Total top-level: 401
 Total time: 11:08.208 (out of 14:19.495)
 Total uniq factories: 14

   total   top-level     total time      time per call      top-level time               name

     216         216        1.8753s            0.0087s             1.8753s personal_access_token
     126         126      656.1012s            5.2072s           656.1012s            project
     115           0       11.4956s            0.1000s             0.0000s          namespace
      18          18        2.4524s            0.1362s             2.4524s               user
      13          13        0.6789s            0.0522s             0.6789s     note_on_commit
      10          10        0.1642s            0.0164s             0.1642s  ci_empty_pipeline
       9           9        5.8051s            0.6450s             5.8051s      merge_request
       4           0        0.0138s            0.0034s             0.0000s namespace_settings
       4           0        0.0140s            0.0035s             0.0000s namespace_ci_cd_settings
       4           4        0.2930s            0.0732s             0.2930s              group
       2           2        0.0886s            0.0443s             0.0886s   protected_branch
       2           2        0.7417s            0.3709s             0.7417s diff_note_on_commit
       2           0        0.0009s            0.0005s             0.0000s text_diff_position
       1           1        0.0082s            0.0082s             0.0082s            license

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Brian Williams

Merge request reports