Skip to content

Improves specs performance

Bojan Marjanovic requested to merge bojan/specs-cleanup-refactor into master

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

  1. Run FPROF=1 bundle exec rspec spec/requests/api/integrations_spec.rb
  2. Checkout this branch
  3. Run again FPROF=1 bundle exec rspec spec/requests/api/integrations_spec.rb
  4. Compare the results 🎉
Edited by Bojan Marjanovic

Merge request reports