241 lines
6.0 KiB
Markdown
241 lines
6.0 KiB
Markdown
# 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.
|
||
|