tree: 75e296013bd9672580ccf17031407e72d3ef39a5
  1. copy_data_to_experimental_db/
  2. add_demo_alert_to_demo_db.sh
  3. BUILD.bazel
  4. multigraph_monkey_test.js
  5. README.md
  6. run_monkey_test.js
  7. upload_extracted_json_files.sh
perf/scripts/README.md

Perf Scripts & Tools

This directory contains utility scripts for development, testing, and debugging the Perf application.

MultiGraph Monkey Test

A stress-testing tool for the MultiGraph UI (/m/) that automates user interactions to find bugs, crashes, and regressions.

Files

  • multigraph_monkey_test.js: The core test logic. It's a standalone JavaScript file designed to run inside the browser context.
  • run_monkey_test.js: A Node.js runner that launches Chrome (via Puppeteer), handles Google Login, and injects the monkey test script automatically.

How to Run

Option 1: Automated Runner (Recommended)

Use the provided runner to launch a headful Chrome instance and run the test automatically.

# From the repository root
node perf/scripts/run_monkey_test.js

Configuration:

  • Headless Mode: HEADLESS=true node perf/scripts/run_monkey_test.js (Default: false to allow login).
  • Chrome Path: The script automatically detects Chrome at /usr/bin/google-chrome. Set CHROME_BIN env var to override.

Option 2: Manual (DevTools Snippet)

  1. Open Chrome DevTools (F12).
  2. Go to Sources > Snippets.
  3. Create a new snippet and paste the content of multigraph_monkey_test.js.
  4. Right-click the snippet and select Run.

Option 3: Tampermonkey (Browser Extension)

  1. Install the Tampermonkey extension.
  2. Create a new script and paste the content of multigraph_monkey_test.js.
  3. Navigate to any MultiGraph page (https://chrome-perf.corp.goog/m/).
  4. The script will load automatically (check console for “SUPER MONKEY” logs).

What it Tests

The monkey test performs the following actions:

  1. Dynamic Discovery: Drills down through filter options to find a dataset with ~50 traces.
  2. Graph Rendering: Verifies graphs are drawn and layout is valid.
  3. URL State: Checks if URL parameters match the current selection.
  4. Split/Unsplit: Enables “Split by” mode and verifies graph multiplication.
  5. Trace Manipulation: Removes/Adds traces and checks graph count.
  6. Sidebar Sync: Verifies sidebar rows match displayed traces.
  7. Overflow: Triggers “Too many traces” warning and verifies recovery.
  8. Pagination: Iterates through all pages of a large dataset.
  9. Subset Recovery: Restores state after overflow test.
  10. Pagination Stress: Backtracks to find a high-cardinality field and iterates through pages.
  11. Chrome Internal Scenario: (Env specific) Tests Speedometer3 split view.
  12. Load All Charts: Verifies functionality of the “Load All” button for large datasets.
  13. Primary Checkbox: Verifies splitting works when “Primary” filter is active.
  14. Select All Sync: Verifies “Select All” checkbox state syncs with manual item selection.