Improves specs performance
What does this MR do and why?
This MR solves the slow specs problem, namely we're using too many factories, that are not really needed.
Therefore, we're preparing integrations ahead, and re-using them.
Based on the results, we're saving around ~2 minutes for only this specs.
MR acceptance checklist
Please evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Screenshots or screen recordings
Before
[TEST PROF INFO] Time spent in factories: 01:57.613 (18.17% of total time)
[TEST PROF INFO] Factories usage
Total: 2080
Total top-level: 2069
Total time: 01:57.613 (out of 10:59.792)
Total uniq factories: 53
total top-level total time time per call top-level time name
1132 1132 12.1685s 0.0107s 12.1685s personal_access_token
185 185 35.3514s 0.1911s 35.3514s project
18 18 0.2079s 0.0115s 0.2079s emails_on_push_integration
18 18 3.9931s 0.2218s 3.9931s custom_issue_tracker_integration
16 16 0.1290s 0.0081s 0.1290s pushover_integration
16 16 1.4936s 0.0934s 1.4936s teamcity_integration
16 16 1.4814s 0.0926s 1.4814s telegram_integration
16 16 1.5165s 0.0948s 1.5165s unify_circuit_integration
16 16 1.5498s 0.0969s 1.5498s webex_teams_integration
16 16 3.1780s 0.1986s 3.1780s youtrack_integration
16 16 0.1626s 0.0102s 0.1626s apple_app_store_integration
16 16 0.1475s 0.0092s 0.1475s asana_integration
16 16 0.1188s 0.0074s 0.1188s assembla_integration
16 16 1.4613s 0.0913s 1.4613s bamboo_integration
16 16 4.2394s 0.2650s 4.2394s bugzilla_integration
16 16 2.7749s 0.1734s 2.7749s buildkite_integration
16 16 0.1166s 0.0073s 0.1166s campfire_integration
16 16 2.7905s 0.1744s 2.7905s clickup_integration
16 16 0.2606s 0.0163s 0.2606s confluence_integration
16 16 1.4750s 0.0922s 1.4750s datadog_integration
16 16 0.1606s 0.0100s 0.1606s diffblue_cover_integration
16 16 1.4019s 0.0876s 1.4019s discord_integration
16 16 2.9163s 0.1823s 2.9163s drone_ci_integration
16 16 4.0577s 0.2536s 4.0577s ewm_integration
16 16 1.4990s 0.0937s 1.4990s external_wiki_integration
16 16 0.1257s 0.0079s 0.1257s git_guardian_integration
16 16 1.4244s 0.0890s 1.4244s github_integration
16 16 0.1442s 0.0090s 0.1442s google_play_integration
16 16 1.3961s 0.0873s 1.3961s hangouts_chat_integration
16 16 2.7672s 0.1730s 2.7672s harbor_integration
16 16 0.1329s 0.0083s 0.1329s irker_integration
16 16 2.8912s 0.1807s 2.8912s jenkins_integration
16 16 1.4760s 0.0922s 1.4760s jira_integration
16 16 1.4417s 0.0901s 1.4417s mattermost_integration
16 16 0.1431s 0.0089s 0.1431s mattermost_slash_commands_integration
16 16 1.4199s 0.0887s 1.4199s microsoft_teams_integration
16 16 1.3920s 0.0870s 1.3920s mock_ci_integration
16 16 0.1176s 0.0074s 0.1176s mock_monitoring_integration
16 16 1.5104s 0.0944s 1.5104s packagist_integration
16 16 3.0004s 0.1875s 3.0004s phorge_integration
16 16 0.1500s 0.0094s 0.1500s pipelines_email_integration
16 16 0.1383s 0.0086s 0.1383s pivotaltracker_integration
16 16 1.7450s 0.1091s 1.7450s prometheus_integration
16 16 1.4369s 0.0898s 1.4369s pumble_integration
16 16 4.3199s 0.2700s 4.3199s redmine_integration
16 16 1.5051s 0.0941s 1.5051s integrations_slack
16 16 0.1327s 0.0083s 0.1327s slack_slash_commands_integration
16 16 3.1435s 0.1965s 3.1435s squash_tm_integration
9 0 0.1707s 0.0190s 0.0000s slack_integration
9 9 0.2836s 0.0315s 0.2836s gitlab_slack_application_integration
2 0 0.0429s 0.0214s 0.0000s organization
2 2 0.7122s 0.3561s 0.7122s user
1 1 0.0121s 0.0121s 0.0121s license
After
[TEST PROF INFO] Time spent in factories: 00:13.323 (2.41% of total time)
[TEST PROF INFO] Factories usage
Total: 1203
Total top-level: 1192
Total time: 00:13.323 (out of 09:22.089)
Total uniq factories: 53
total top-level total time time per call top-level time name
1132 1132 11.1628s 0.0099s 11.1628s personal_access_token
9 9 0.2394s 0.0266s 0.2394s gitlab_slack_application_integration
9 0 0.1528s 0.0170s 0.0000s slack_integration
2 0 0.0234s 0.0117s 0.0000s organization
2 2 0.6246s 0.3123s 0.6246s project
2 2 0.5834s 0.2917s 0.5834s user
1 1 0.0064s 0.0064s 0.0064s buildkite_integration
1 1 0.0061s 0.0061s 0.0061s campfire_integration
1 1 0.0079s 0.0079s 0.0079s clickup_integration
1 1 0.0237s 0.0237s 0.0237s confluence_integration
1 1 0.0071s 0.0071s 0.0071s custom_issue_tracker_integration
1 1 0.0049s 0.0049s 0.0049s datadog_integration
1 1 0.0048s 0.0048s 0.0048s diffblue_cover_integration
1 1 0.0060s 0.0060s 0.0060s discord_integration
1 1 0.0051s 0.0051s 0.0051s drone_ci_integration
1 1 0.0050s 0.0050s 0.0050s emails_on_push_integration
1 1 0.0067s 0.0067s 0.0067s ewm_integration
1 1 0.0050s 0.0050s 0.0050s external_wiki_integration
1 1 0.0048s 0.0048s 0.0048s git_guardian_integration
1 1 0.2371s 0.2371s 0.2371s github_integration
1 1 0.0143s 0.0143s 0.0143s google_play_integration
1 1 0.0061s 0.0061s 0.0061s hangouts_chat_integration
1 1 0.0058s 0.0058s 0.0058s harbor_integration
1 1 0.0061s 0.0061s 0.0061s irker_integration
1 1 0.0098s 0.0098s 0.0098s jenkins_integration
1 1 0.0243s 0.0243s 0.0243s jira_integration
1 1 0.0123s 0.0123s 0.0123s mattermost_integration
1 1 0.0064s 0.0064s 0.0064s mattermost_slash_commands_integration
1 1 0.0084s 0.0084s 0.0084s microsoft_teams_integration
1 1 0.0053s 0.0053s 0.0053s mock_ci_integration
1 1 0.0071s 0.0071s 0.0071s mock_monitoring_integration
1 1 0.0051s 0.0051s 0.0051s packagist_integration
1 1 0.0075s 0.0075s 0.0075s phorge_integration
1 1 0.0060s 0.0060s 0.0060s pipelines_email_integration
1 1 0.0056s 0.0056s 0.0056s pivotaltracker_integration
1 1 0.1168s 0.1168s 0.1168s prometheus_integration
1 1 0.0076s 0.0076s 0.0076s pumble_integration
1 1 0.0073s 0.0073s 0.0073s pushover_integration
1 1 0.0070s 0.0070s 0.0070s redmine_integration
1 1 0.0053s 0.0053s 0.0053s integrations_slack
1 1 0.0088s 0.0088s 0.0088s slack_slash_commands_integration
1 1 0.0086s 0.0086s 0.0086s squash_tm_integration
1 1 0.0054s 0.0054s 0.0054s teamcity_integration
1 1 0.0058s 0.0058s 0.0058s telegram_integration
1 1 0.0048s 0.0048s 0.0048s unify_circuit_integration
1 1 0.0054s 0.0054s 0.0054s webex_teams_integration
1 1 0.0064s 0.0064s 0.0064s youtrack_integration
1 1 0.0137s 0.0137s 0.0137s license
1 1 0.0109s 0.0109s 0.0109s apple_app_store_integration
1 1 0.0075s 0.0075s 0.0075s asana_integration
1 1 0.0075s 0.0075s 0.0075s assembla_integration
1 1 0.0068s 0.0068s 0.0068s bamboo_integration
1 1 0.0166s 0.0166s 0.0166s bugzilla_integration
How to set up and validate locally
- Run
FPROF=1 bundle exec rspec spec/requests/api/integrations_spec.rb
- Checkout this branch
- Run again
FPROF=1 bundle exec rspec spec/requests/api/integrations_spec.rb
- Compare the results
🎉
Edited by Bojan Marjanovic