CP_AUTOMATION/tests/load_tests/LOAD_TEST_ANALYSIS.md
2025-12-15 17:15:08 +05:30

241 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.