Skip to content

Speed up specs for pipeline serializer

Peter Leitzen requested to merge pl-spec-speedup-serializer-pipeline into master

What does this MR do and why?

This MR improves runtime of pipeline serializer specs by using build_stubbed and before_all where needed.

Closes #374498 (closed).

See &8745.

RSpec Profiling

Here's the output from test-prof when run with FPROF=1. Note:

  • Total amount of factories created went down from 1409 to 317 🚀
  • Total events went down from 15905 to 4483
  • Queries saved: 11422

Before

Finished in 54.09 seconds (files took 6.19 seconds to load)
16 examples, 0 failures

Randomized with seed 64083

[TEST PROF INFO] Time spent in factories: 00:39.707 (72.53% of total time)
[TEST PROF INFO] Factories usage

 Total: 1409
 Total top-level: 276
 Total time: 00:39.707 (out of 00:58.551)
 Total uniq factories: 14

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

     440           0        6.2791s            0.0143s             0.0000s    ci_job_artifact
     230         230       34.4583s            0.1498s            34.4583s           ci_build
     220           0       19.4055s            0.0882s             0.0000s ci_trigger_request
     220           0       18.4981s            0.0841s             0.0000s         ci_trigger
     220           0       17.0274s            0.0774s             0.0000s              owner
      31          29        2.6659s            0.0860s             2.0371s  ci_empty_pipeline
      14           1        4.0355s            0.2882s             1.0556s            project
      14           0        1.2740s            0.0910s             0.0000s          namespace
      10           6        0.8178s            0.0818s             0.7669s        ci_pipeline
       4           4        0.6418s            0.1605s             0.6418s      merge_request
       2           2        0.6439s            0.3219s             0.6439s ci_sources_pipeline
       2           2        0.0276s            0.0138s             0.0276s        environment
       1           1        0.0123s            0.0123s             0.0123s            license
       1           1        0.0645s            0.0645s             0.0645s               user

After

Finished in 23.97 seconds (files took 6.53 seconds to load)
16 examples, 0 failures

Randomized with seed 65355

[TEST PROF INFO] Time spent in factories: 00:09.761 (39.63% of total time)
[TEST PROF INFO] Factories usage

 Total: 317
 Total top-level: 80
 Total time: 00:09.761 (out of 00:28.635)
 Total uniq factories: 14

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

      88           0        1.2821s            0.0146s             0.0000s    ci_job_artifact
      54          54        6.1946s            0.1147s             6.1946s           ci_build
      44           0        3.1312s            0.0712s             0.0000s ci_trigger_request
      44           0        2.9824s            0.0678s             0.0000s         ci_trigger
      44           0        2.7174s            0.0618s             0.0000s              owner
      14          12        0.8506s            0.0608s             0.3906s  ci_empty_pipeline
       7           3        0.6370s            0.0910s             0.5358s        ci_pipeline
       6           1        2.3487s            0.3914s             1.1811s            project
       6           0        0.7306s            0.1218s             0.0000s          namespace
       4           4        0.8631s            0.2158s             0.8631s      merge_request
       2           2        0.4710s            0.2355s             0.4710s ci_sources_pipeline
       2           2        0.0414s            0.0207s             0.0414s        environment
       1           1        0.0152s            0.0152s             0.0152s            license
       1           1        0.0682s            0.0682s             0.0682s               user

How to set up and validate locally

FOSS_ONLY=1 bin/rspec ./spec/serializers/pipeline_serializer_spec.rb
bin/rspec ./spec/serializers/pipeline_serializer_spec.rb

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 Peter Leitzen

Merge request reports

Loading