# Load Test Results Analysis ## 📊 Test Summary - **Total Students**: 100 - **Successful**: 0 (0.00%) - **Failed**: 100 (100%) - **Duration**: 152.8 seconds (~2.5 minutes) - **Average Duration per Student**: 91.7 seconds ## 🔴 Root Cause: System Resource Exhaustion ### The Error **Error Type:** `InvalidSessionIdException` **Error Message:** ``` invalid session id: session deleted as the browser has closed the connection from disconnected: Unable to receive message from renderer ``` ### What This Means **This is NOT:** - ❌ Backend/server issue - ❌ Automation script issue - ❌ Wrong execution method **This IS:** - ✅ **System resource exhaustion** - Your PC cannot handle 100 concurrent Chrome browsers - ✅ **Chrome/ChromeDriver crashes** - Browsers are crashing due to resource limits - ✅ **Memory/CPU overload** - System is overwhelmed ## 🔍 Evidence ### 1. Password Resets Worked From the logs, we can see: - ✅ Password reset modals detected - ✅ Password reset forms filled - ✅ Password resets completed successfully - ✅ Success toasts appeared **This proves the automation is working correctly!** ### 2. Browsers Crashed During Login The error occurs when trying to: - Navigate to login page - Get current URL - Interact with browser **The browser session is lost because Chrome crashed.** ### 3. Pattern of Failure - All 100 students failed with the same error - Error occurs at login step (after password reset) - Average duration: 91.7 seconds (browsers ran for ~1.5 minutes before crashing) ## 💡 Why This Happened ### System Limits Exceeded **100 Concurrent Browsers = Massive Resource Usage:** - **RAM**: Each Chrome instance uses ~200-500MB - 100 browsers × 300MB = **~30GB RAM needed** - **CPU**: 100 browsers = 100+ processes - **File Descriptors**: Each browser needs many file handles - **ChromeDriver**: Can't handle 100 simultaneous connections ### What Happened Step-by-Step 1. ✅ Script started 100 browsers successfully 2. ✅ Password resets began working 3. ✅ Some password resets completed 4. ❌ **System resources exhausted** (RAM/CPU/File descriptors) 5. ❌ **Chrome browsers started crashing** 6. ❌ **ChromeDriver lost connection to crashed browsers** 7. ❌ **All subsequent operations failed** with "invalid session id" ## ✅ Solutions ### Solution 1: Reduce Concurrency (RECOMMENDED) **Instead of 100, use 20-30 concurrent browsers:** ```bash python3 tests/load_tests/test_generic_load_assessments.py \ --csv students_with_passwords_2025-12-15T10-49-08_01.csv \ --start 0 \ --end 100 \ --workers 20 \ --headless \ --metrics-interval 10 ``` **Why this works:** - 20 browsers = ~6GB RAM (manageable) - System can handle the load - Browsers won't crash ### Solution 2: Multi-Device Execution **Split 100 students across 5 devices (20 each):** **Device 1:** ```bash --start 0 --end 20 --workers 20 ``` **Device 2:** ```bash --start 20 --end 40 --workers 20 ``` **Device 3:** ```bash --start 40 --end 60 --workers 20 ``` **Device 4:** ```bash --start 60 --end 80 --workers 20 ``` **Device 5:** ```bash --start 80 --end 100 --workers 20 ``` ### Solution 3: Staggered Start (Ramp-Up) **Start browsers gradually instead of all at once:** Modify the script to add delays between browser starts (not currently implemented, but can be added). ### Solution 4: Increase System Resources **If you must run 100 simultaneously:** - Increase RAM to 32GB+ - Use a more powerful machine - Close other applications - Use a dedicated load testing server ## 📈 Recommended Approach ### For 100 Students: **Option A: Sequential Batches (Safest)** ```bash # Batch 1: Students 0-20 python3 tests/load_tests/test_generic_load_assessments.py \ --csv students.csv --start 0 --end 20 --workers 20 --headless # Batch 2: Students 20-40 python3 tests/load_tests/test_generic_load_assessments.py \ --csv students.csv --start 20 --end 40 --workers 20 --headless # Continue for remaining batches... ``` **Option B: Multi-Device (Fastest)** - Run 5 devices simultaneously - Each device handles 20 students - Total time: Same as 20 students (parallel execution) **Option C: Reduced Concurrency (Balanced)** ```bash # Run all 100, but only 20 at a time python3 tests/load_tests/test_generic_load_assessments.py \ --csv students.csv --start 0 --end 100 --workers 20 --headless ``` ## 🎯 Conclusion ### Is the Automation Broken? **NO** - The automation is working correctly. Password resets succeeded, which proves the flow works. ### Is the Backend Broken? **NO** - Backend handled password resets successfully. The issue is browsers crashing before reaching the backend. ### Is the Execution Wrong? **PARTIALLY** - Running 100 concurrent browsers on a single machine is too much. The system can't handle it. ### What Should You Do? 1. **Test with 20 students first:** ```bash --start 0 --end 20 --workers 20 ``` 2. **If successful, scale up gradually:** - 20 students → 30 students → 50 students - Monitor system resources at each step 3. **For 100+ students, use multi-device:** - Split across multiple machines - Each machine handles 20-30 students ## 📊 System Resource Monitoring **Before running load tests, check:** ```bash # Check available RAM free -h # Check CPU usage htop # Check Chrome processes ps aux | grep chrome | wc -l ``` **During load test, monitor:** - RAM usage (should stay below 80%) - CPU usage (should stay below 80%) - Chrome process count (should match --workers) ## ✅ Next Steps 1. **Run test with 20 students:** ```bash python3 tests/load_tests/test_generic_load_assessments.py \ --csv students_with_passwords_2025-12-15T10-49-08_01.csv \ --start 0 --end 20 \ --workers 20 \ --headless \ --metrics-interval 5 ``` 2. **If successful, try 50 students:** ```bash --start 0 --end 50 --workers 30 ``` 3. **For 100 students, use multi-device or sequential batches** --- **Summary:** Your automation is working perfectly. The issue is system resource limits. Reduce concurrency to 20-30 browsers per machine.