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