Skip to content

Add test runtime analyzer

Dan Davison requested to merge dj-add-test-runtime-analyzer into master

What is this?

This is a ruby tool to analyzing pipelines and their test reports spit out from the GitLab API.

How to run

$ bundle install
$ bundle exec bin/test_runtime_analyzer
./qa/specs/features/api/1_manage/rate_limits_spec.rb  (924.64s)
./qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb  (110.96s)
./qa/specs/features/browser_ui/5_package/package_registry/maven_repository_spec.rb  (98.49s)
./qa/specs/features/browser_ui/1_manage/login/log_in_with_2fa_spec.rb  (86.26s)
./qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb  (80.06s)
./qa/specs/features/browser_ui/5_package/package_registry/nuget_repository_spec.rb  (78.03s)
./qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb  (77.44s)
./qa/specs/features/browser_ui/5_package/container_registry/container_registry_omnibus_spec.rb  (77.22s)
./qa/specs/features/ee/api/9_enablement/elasticsearch/index_tests/merge_request_index/merge_request_index_spec.rb  (75.93s)
./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb  (74.35s)
See tmp/longest_runtimes.json for more information

tmp/pipelines.json

This file will be generated after the binary is run, giving an aggregated GitLab Test Report API based on the last 10 pipelines.

tmp/longest_runtimes.json

Flat JSON file to show three things:

  1. Runtimes { "<test_file>": [runX...runY] }
  2. Computed Averages { "<test_file>": aggregate_averaged_runtime } (before sorting)
  3. Longest Running [ [ "<test_file>", aggregated_average_runtime ] ] sorted by longest running

The output shows the top 10 longest running tests and their average runtimes.

Show me...

The latest run of this analyzer identified these tests are the longest running:

./qa/specs/features/api/1_manage/rate_limits_spec.rb (924.64s) ./qa/specs/features/api/1_manage/rate_limits_spec.rb (922.69s)
./qa/specs/features/browser_ui/3_create/merge_request/merge_when_pipeline_succeeds_spec.rb (110.96s) ./qa/specs/features/ee/browser_ui/5_package/dependency_proxy_sso_spec.rb (127.26s)
./qa/specs/features/browser_ui/5_package/package_registry/maven_repository_spec.rb (98.49s) ./qa/specs/features/ee/api/9_enablement/elasticsearch/elasticsearch_api_spec.rb (115.50s)
./qa/specs/features/browser_ui/1_manage/login/log_in_with_2fa_spec.rb (86.26s) ./qa/specs/features/browser_ui/5_package/package_registry/maven/maven_group_level_spec.rb (106.61s)
./qa/specs/features/browser_ui/5_package/package_registry/maven_gradle_repository_spec.rb (80.06s) ./qa/specs/features/api/3_create/gitaly/backend_node_recovery_spec.rb (98.59s)
./qa/specs/features/browser_ui/5_package/package_registry/nuget_repository_spec.rb (78.03s) ./qa/specs/features/ee/api/9_enablement/elasticsearch/index_tests/merge_request_index/merge_request_index_spec.rb (97.28s)
./qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb (77.44s) ./qa/specs/features/ee/browser_ui/1_manage/ldap/admin_ldap_sync_spec.rb (95.06s)
./qa/specs/features/browser_ui/5_package/container_registry/container_registry_omnibus_spec.rb (77.22s) ./qa/specs/features/ee/api/9_enablement/elasticsearch/advanced_global_advanced_syntax_search_spec.rb (94.73s)
./qa/specs/features/ee/api/9_enablement/elasticsearch/index_tests/merge_request_index/merge_request_index_spec.rb (75.93s) ./qa/specs/features/browser_ui/5_package/package_registry/maven_repository_spec.rb (94.47s)
./qa/specs/features/browser_ui/5_package/package_registry/npm/npm_instance_level_spec.rb (74.35s) ./qa/specs/features/ee/api/9_enablement/elasticsearch/index_tests/notes_index/note_index_spec.rb (89.79s)
Edited by Dan Davison

Merge request reports