CP_StressTest_data
This commit is contained in:
parent
a6736372dc
commit
c163bd9c06
1504
student_test_large_dataset.csv
Normal file
1504
student_test_large_dataset.csv
Normal file
File diff suppressed because it is too large
Load Diff
@ -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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user