Speed up commits spec using let_it_be
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.
-
I have evaluated the MR acceptance checklist for this MR.
Edited by Brian Williams