|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- ---
- name: 'step-03e-subagent-performance'
- description: 'Subagent: Check test performance (speed, efficiency, parallelization)'
- subagent: true
- outputFile: '/tmp/tea-test-review-performance-{{timestamp}}.json'
- ---
-
- # Subagent 3E: Performance Quality Check
-
- ## SUBAGENT CONTEXT
-
- This is an **isolated subagent** running in parallel with other quality dimension checks.
-
- **Your task:** Analyze test files for PERFORMANCE violations only.
-
- ---
-
- ## MANDATORY EXECUTION RULES
-
- - ✅ Check PERFORMANCE only (not other quality dimensions)
- - ✅ Output structured JSON to temp file
- - ❌ Do NOT check determinism, isolation, maintainability, or coverage
-
- ---
-
- ## SUBAGENT TASK
-
- ### 1. Identify Performance Violations
-
- **HIGH SEVERITY Violations**:
-
- - Tests not parallelizable (using test.describe.serial unnecessarily)
- - Slow setup/teardown (creating fresh DB for every test)
- - Excessive navigation (reloading pages unnecessarily)
- - No fixture reuse (repeating expensive operations)
-
- **MEDIUM SEVERITY Violations**:
-
- - Hard waits >2 seconds (waitForTimeout(5000))
- - Inefficient selectors (page.$$ instead of locators)
- - Large data sets in tests without pagination
- - Missing performance optimizations
-
- **LOW SEVERITY Violations**:
-
- - Could use parallelization (test.describe.configure({ mode: 'parallel' }))
- - Minor inefficiencies
- - Excessive logging
-
- ### 2. Calculate Performance Score
-
- ```javascript
- const severityWeights = { HIGH: 10, MEDIUM: 5, LOW: 2 };
- const totalPenalty = violations.reduce((sum, v) => sum + severityWeights[v.severity], 0);
- const score = Math.max(0, 100 - totalPenalty);
- ```
-
- ---
-
- ## OUTPUT FORMAT
-
- ```json
- {
- "dimension": "performance",
- "score": 80,
- "max_score": 100,
- "grade": "B",
- "violations": [
- {
- "file": "tests/e2e/search.spec.ts",
- "line": 10,
- "severity": "HIGH",
- "category": "not-parallelizable",
- "description": "Tests use test.describe.serial unnecessarily - reduces parallel execution",
- "suggestion": "Remove .serial unless tests truly share state",
- "code_snippet": "test.describe.serial('Search tests', () => { ... });"
- },
- {
- "file": "tests/api/bulk-operations.spec.ts",
- "line": 35,
- "severity": "MEDIUM",
- "category": "slow-setup",
- "description": "Test creates 1000 records in setup - very slow",
- "suggestion": "Use smaller data sets or fixture factories",
- "code_snippet": "beforeEach(async () => { for (let i=0; i<1000; i++) { ... } });"
- }
- ],
- "passed_checks": 13,
- "failed_checks": 2,
- "violation_summary": {
- "HIGH": 1,
- "MEDIUM": 1,
- "LOW": 0
- },
- "performance_metrics": {
- "parallelizable_tests": 80,
- "serial_tests": 20,
- "avg_test_duration_estimate": "~2 seconds",
- "slow_tests": ["bulk-operations.spec.ts (>30s)"]
- },
- "recommendations": [
- "Enable parallel mode where possible",
- "Reduce setup data to minimum needed",
- "Use fixtures to share expensive setup across tests",
- "Remove unnecessary .serial constraints"
- ],
- "summary": "Good performance with 2 violations - 80% tests can run in parallel"
- }
- ```
-
- ---
-
- ## EXIT CONDITION
-
- Subagent completes when JSON output written to temp file.
-
- **Subagent terminates here.**
|