CP_AUTOMATION/tests/load_tests/MACHINE_SPEED_OPTIMIZATION.md
2025-12-16 17:43:41 +05:30

5.6 KiB

Machine-Speed Optimization - World Class Automation

🚀 Objective

Transform the automation from human-like behavior to machine-speed execution while maintaining 100% reliability.


Optimizations Applied

1. Removed Human-Like Delays (Major Impact)

  • Removed: RandomizedWait.wait_for_question_answer() - was adding 2-6 seconds
  • Replaced: Minimal 0.1s wait for click to register
  • Savings: ~2-6 seconds per question

2. Smart Page Load Check (Major Impact)

  • Optimized: wait_for_page_load() now checks if page is already loaded
  • Returns immediately if document.readyState == "complete"
  • Reduced timeout: 15s → 3s (with early return)
  • Savings: ~10-12 seconds per question (when page already loaded)

3. Minimal Loading Indicator Wait (Medium Impact)

  • Reduced: wait_for_loading_to_disappear() timeout: 2s → 0.5s
  • Reason: Loading indicators disappear instantly or don't exist
  • Savings: ~1.5 seconds per question

4. Fast Question Type Detection (Medium Impact)

  • Reduced: All question detection timeouts: 2-3s → 0.5s
  • Optimized: Smart wait returns immediately if element already visible
  • Savings: ~1-2 seconds per question

5. Reduced Element Wait Timeouts (Small Impact)

  • Reduced: All WebDriverWait timeouts: 10s → 2s
  • Reason: Elements should be ready quickly after page load
  • Savings: ~0.5-1 second per question (when elements are ready)

📊 Performance Comparison

Before Optimization:

  • Per Question: ~25 seconds (observed)
  • 100 Questions: ~42 minutes (observed)
  • Wait Strategy: Human-like, realistic delays

After Machine-Speed Optimization:

  • Per Question: ~3-8 seconds (estimated)
  • 100 Questions: ~5-13 minutes (estimated)
  • Wait Strategy: Machine-speed, minimal delays
  • Improvement: 70-80% faster (30+ minutes saved!)

Breakdown (Machine-Speed):

  1. Get question type: 0.1-0.5s (was 0.5-3s)
  2. Answer question: 0.5-2s (was 2-6s)
  3. Click registration: 0.1s (was 2-6s)
  4. Click Next + page load: 0.5-2s (was 15-30s)
  5. Total: ~1.2-4.5s per question

🔧 Technical Changes

Files Modified:

  1. tests/load_tests/test_generic_load_assessments.py

    • Removed RandomizedWait.wait_for_question_answer()
    • Added minimal 0.1s wait for click registration
  2. utils/wait_helpers.py

    • wait_for_page_load(): Smart check, returns immediately if ready
    • wait_for_loading_to_disappear(): Reduced timeout 2s → 0.5s
  3. utils/question_answer_helper.py

    • All _element_exists() timeouts: 2-3s → 0.5s
    • All WebDriverWait timeouts: 10s → 2s
    • Smart wait for question container (0.5s instead of hardcoded sleep)
  4. pages/domain_assessment_page.py

    • Optimized click_next() with smart waits
  5. pages/base_page.py

    • Optimized wait_for_page_load() with smart waits

Key Optimizations

1. Early Return Pattern

# Before: Always waits full timeout
WebDriverWait(driver, 15).until(condition)

# After: Returns immediately if ready
if condition_met():
    return
WebDriverWait(driver, 3).until(condition)

2. Minimal Timeouts

  • Question detection: 0.5s (was 2-3s)
  • Element waits: 2s (was 10s)
  • Loading indicator: 0.5s (was 2s)
  • Page load: 3s with early return (was 15s)

3. Removed Human-Like Delays

  • No "thinking time" after answering
  • No "reading time" for options
  • No "navigation delay" after clicking
  • Minimal wait only for click registration (0.1s)

🎯 Expected Results

Single Student (100 Questions):

  • Before: ~42 minutes
  • After: ~5-13 minutes
  • Improvement: 70-80% faster

Load Test (100 Students):

  • Before: ~42 minutes per student (sequential)
  • After: ~5-13 minutes per student (sequential)
  • With 30 workers: ~20-40 minutes total (was 2+ hours)

⚠️ Safety Considerations

  1. Explicit Waits Preserved: Still using explicit waits for reliability
  2. Smart Waits: Return immediately when ready, don't wait unnecessarily
  3. Minimum Timeouts: Reduced but not eliminated (still safe)
  4. No Logic Changes: Only wait-time optimizations, no functional changes

🧪 Testing Recommendations

Phase 1: Single Student Test

python3 tests/load_tests/test_generic_load_assessments.py \
  --csv students_with_passwords_2025-12-15T10-49-08_01.csv \
  --start 0 --end 1 --workers 1 --headless

Expected: Should complete in ~5-13 minutes (was 42 minutes)

Phase 2: Small Batch Test

python3 tests/load_tests/test_generic_load_assessments.py \
  --csv students_with_passwords_2025-12-15T10-49-08_01.csv \
  --start 0 --end 10 --workers 5 --headless

Expected: Should complete in ~10-20 minutes (was 42 minutes per student)

Phase 3: Full Load Test

./scripts/PC1_100_students.sh

Expected: Should complete in ~20-40 minutes (was 2+ hours)


📈 Success Metrics

  • Target: <8 seconds per question (average)
  • Target: <15 minutes for 100 questions
  • Target: 0% increase in failure rate
  • Target: Maintain 100% reliability
  • Target: Machine-speed execution (no human-like delays)

💡 Philosophy

Before: "Simulate human behavior with realistic delays" After: "Machine-speed execution with minimal necessary waits"

The automation now:

  • Returns immediately when conditions are met
  • Uses minimal timeouts (not excessive)
  • Removes all "thinking time" delays
  • Optimizes for speed while maintaining reliability

Status: Ready for Testing - Machine-Speed Optimized