CP_StressTest_data

This commit is contained in:
Kenil Bhikadiya 2025-12-17 10:30:52 +05:30
parent a6736372dc
commit c163bd9c06
2 changed files with 1525 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -262,6 +262,9 @@ def complete_assessment_flow_for_student(
questions_answered = 0
start_time = time.time()
# Live logging
print(f"🚀 [Student {user_id}] Starting flow for {cpid}...")
try:
# Step 1: Setup WebDriver
options = Options()
@ -293,6 +296,7 @@ def complete_assessment_flow_for_student(
raise
steps_completed.append(f"WebDriver created")
print(f" ✅ [Student {user_id}] WebDriver created")
# Step 2: Smart Login (Excel password → Admin@123)
login_page = LoginPage(driver)
@ -321,6 +325,7 @@ def complete_assessment_flow_for_student(
raise Exception(f"Login failed with both passwords: {e}")
steps_completed.append(f"Login successful (password: {'Excel' if actual_password_used != TEST_NEW_PASSWORD else 'Admin@123'})")
print(f" ✅ [Student {user_id}] Login successful ({'Excel' if actual_password_used != TEST_NEW_PASSWORD else 'Admin@123'})")
# Step 3: Password Reset if needed
# CRITICAL: If Admin@123 was used for login, password is already reset - skip entirely
@ -341,10 +346,15 @@ def complete_assessment_flow_for_student(
time.sleep(SmartWaitOptimizer.ANIMATION_NORMAL + SmartWaitOptimizer.SAFETY_PADDING)
actual_password_used = TEST_NEW_PASSWORD
steps_completed.append("Password reset completed")
print(f" ✅ [Student {user_id}] Password reset completed")
else:
steps_completed.append("Password reset skipped (modal not present)")
print(f" ⏭️ [Student {user_id}] Password reset skipped (not needed)")
else:
steps_completed.append("Password reset skipped (already reset per tracker)")
print(f" ⏭️ [Student {user_id}] Password reset skipped (already reset)")
else:
print(f" ⏭️ [Student {user_id}] Password reset skipped (Admin@123 used)")
# Step 4: Profile Completion if needed
profile_incomplete = ProfileIncompletePage(driver)
@ -358,10 +368,13 @@ def complete_assessment_flow_for_student(
profile_editor.complete_profile_to_100(student_cpid=cpid)
time.sleep(SmartWaitOptimizer.ANIMATION_NORMAL + SmartWaitOptimizer.SAFETY_PADDING)
steps_completed.append("Profile completed to 100%")
print(f" ✅ [Student {user_id}] Profile completed to 100%")
else:
steps_completed.append("Profile completion skipped (not required)")
print(f" ⏭️ [Student {user_id}] Profile completion skipped (not required)")
else:
steps_completed.append("Profile completion skipped (already complete)")
print(f" ⏭️ [Student {user_id}] Profile completion skipped (already complete)")
# Step 5: Navigate to Assessments
assessments_page = AssessmentsPage(driver)
@ -378,6 +391,7 @@ def complete_assessment_flow_for_student(
assessments_page.click_begin_assessment(assessment_ids[0])
RandomizedWait.wait_for_page_load('navigation')
steps_completed.append(f"Started assessment: {assessment_ids[0]}")
print(f" ✅ [Student {user_id}] Started assessment: {assessment_ids[0]}")
# Step 7: Navigate to Domains
domains_page = DomainsPage(driver)
@ -404,6 +418,7 @@ def complete_assessment_flow_for_student(
domains_page.click_domain_action(unlocked_domain_id)
RandomizedWait.wait_for_page_load('navigation')
steps_completed.append(f"Started domain: {unlocked_domain_id}")
print(f" ✅ [Student {user_id}] Started domain: {unlocked_domain_id}")
# Step 9: Handle instructions modal if present
domain_assessment_page = DomainAssessmentPage(driver)
@ -469,6 +484,9 @@ def complete_assessment_flow_for_student(
consecutive_failures = 0
# Machine-speed: Minimal wait for click to register (0.1s instead of 2-6s)
time.sleep(0.1)
# Live log every 10 questions
if questions_answered % 10 == 0:
print(f" 📝 [Student {user_id}] Answered {questions_answered} questions...")
except Exception as e:
consecutive_failures += 1
if consecutive_failures >= max_consecutive_failures:
@ -576,6 +594,7 @@ def complete_assessment_flow_for_student(
performance_metrics['completed_students'] += 1
performance_metrics['total_durations'].append(duration)
performance_metrics['questions_answered'].append(questions_answered)
print(f" ✅ [Student {user_id}] COMPLETED in {duration:.1f}s ({questions_answered} questions)")
# Note: Driver cleanup is handled by LoadTestBase
# Temp directory cleanup will be done after driver.quit() in LoadTestBase
@ -596,6 +615,8 @@ def complete_assessment_flow_for_student(
with progress_lock:
performance_metrics['failed_students'] += 1
duration = time.time() - start_time if 'start_time' in locals() else 0
print(f" ❌ [Student {user_id}] FAILED after {duration:.1f}s: {str(e)[:80]}")
# Always cleanup driver and temp directory on error
if driver: