Speed up projects merge requests controller EE specs
What does this MR do?
This MR improves the performance of EE project merge requests controller specs by using let_it_be
where feasible.
Related to &3752.
Contributes to https://gitlab.com/gitlab-org/plan/-/issues/145.
Here's the output from test-prof
when run with FPROF=1
. Note:
-
Total
amount of factories created went down from 761 to 381🚀 -
Total events
went down from 33912 to 21874 - Queries saved: 12038
Before
[TEST PROF INFO] EventProf results for sql.active_record
Total time: 00:47.250 of 02:05.694 (37.59%)
Total events: 33912
Top 5 slowest suites (by time):
Projects::Mer...estsController (./ee/spec/controllers/projects/merge_requests_controller_spec.rb:50) – 00:47.250 (33912 / 148) of 02:05.694 (37.59%)
Finished in 2 minutes 13.3 seconds (files took 1.7 seconds to load)
148 examples, 0 failures
[TEST PROF INFO] Factories usage
Total: 761
Total top-level: 544
Total time: 76.7503s
Total uniq factories: 14
total top-level total time time per call top-level time name
179 166 34.0923s 0.1905s 31.8702s project
159 149 6.8935s 0.0434s 6.4739s user
150 0 7.4691s 0.0498s 0.0000s namespace
82 82 19.1385s 0.2334s 19.1385s ee_merge_request
61 50 11.0227s 0.1807s 7.7718s merge_request
30 29 0.9882s 0.0329s 0.9581s group
30 0 0.1498s 0.0050s 0.0000s namespace_settings
26 26 5.7746s 0.2221s 5.7746s merge_request_with_diffs
25 25 0.3768s 0.0151s 0.3768s approval_merge_request_rule
10 10 3.4354s 0.3435s 3.4354s approval
5 5 0.5408s 0.1082s 0.5408s description_version
2 0 0.4975s 0.2487s 0.0000s issue
1 1 0.0082s 0.0082s 0.0082s license
1 1 0.4019s 0.4019s 0.4019s approver_group
After
[TEST PROF INFO] EventProf results for sql.active_record
Total time: 00:30.870 of 01:28.052 (35.06%)
Total events: 21874
Top 5 slowest suites (by time):
Projects::Mer...estsController (./ee/spec/controllers/projects/merge_requests_controller_spec.rb:50) – 00:30.870 (21874 / 148) of 01:28.052 (35.06%)
Finished in 1 minute 34.64 seconds (files took 1.66 seconds to load)
148 examples, 0 failures
[TEST PROF INFO] Factories usage
Total: 381
Total top-level: 260
Total time: 36.2615s
Total uniq factories: 14
total top-level total time time per call top-level time name
83 70 16.0522s 0.1934s 12.2378s project
65 55 3.1525s 0.0485s 2.6440s user
61 50 15.0836s 0.2473s 9.0741s merge_request
54 0 2.6877s 0.0498s 0.0000s namespace
30 29 1.0025s 0.0334s 0.9636s group
30 0 0.1581s 0.0053s 0.0000s namespace_settings
25 25 0.3905s 0.0156s 0.3905s approval_merge_request_rule
11 11 2.9347s 0.2668s 2.9347s ee_merge_request
10 10 6.2678s 0.6268s 6.2678s approval
5 5 0.5435s 0.1087s 0.5435s description_version
3 3 0.7281s 0.2427s 0.7281s merge_request_with_diffs
2 0 0.4999s 0.2500s 0.0000s issue
1 1 0.0096s 0.0096s 0.0096s license
1 1 0.4679s 0.4679s 0.4679s approver_group
Does this MR meet the acceptance criteria?
Conformity
- [-] Changelog entry
- [-] Documentation (if required)
-
Code review guidelines -
Merge request performance guidelines -
Style guides - [-] Database guides
- [-] Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. - [-] Tested in all supported browsers
- [-] Informed Infrastructure department of a default or new setting change, if applicable per definition of done
Security
If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:
- [-] Label as security and @ mention
@gitlab-com/gl-security/appsec
- [-] The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
- [-] Security reports checked/validated by a reviewer from the AppSec team
Edited by Peter Leitzen