math-solver-worker / run_api_test.sh
Cuong2004
Deploy Worker from GitHub Actions
25d12dc
#!/bin/bash
LOG_FILE="api_test_results.log"
echo "=== Starting API E2E Test Suite ($(date)) ===" > $LOG_FILE
# 1. Start BE Server in background
echo "[INFO] Starting Backend Server..." | tee -a $LOG_FILE
export ALLOW_TEST_BYPASS=true
export LOG_LEVEL=info
PYTHONPATH=. venv/bin/python -m uvicorn app.main:app --port 8000 > server_debug.log 2>&1 &
SERVER_PID=$!
# 2. Wait for server to be ready
echo "[INFO] Waiting for server (PID: $SERVER_PID) on port 8000..." | tee -a $LOG_FILE
MAX_RETRIES=15
READY=0
for i in $(seq 1 $MAX_RETRIES); do
if curl -s http://localhost:8000/ > /dev/null; then
READY=1
break
fi
sleep 2
done
if [ $READY -eq 0 ]; then
echo "[ERROR] Server failed to start in time. Check server_debug.log" | tee -a $LOG_FILE
kill $SERVER_PID
exit 1
fi
echo "[INFO] Server is READY." | tee -a $LOG_FILE
# 3. Prepare Test Data
echo "[INFO] Preparing fresh test data..." | tee -a $LOG_FILE
PREP_OUTPUT=$(PYTHONPATH=. venv/bin/python scripts/prepare_api_test.py)
echo "$PREP_OUTPUT" >> $LOG_FILE
export TEST_USER_ID=$(echo "$PREP_OUTPUT" | grep "RESULT:USER_ID=" | cut -d'=' -f2)
export TEST_SESSION_ID=$(echo "$PREP_OUTPUT" | grep "RESULT:SESSION_ID=" | cut -d'=' -f2)
if [ -z "$TEST_USER_ID" ] || [ -z "$TEST_SESSION_ID" ]; then
echo "[ERROR] Failed to prepare test data." | tee -a $LOG_FILE
kill $SERVER_PID
exit 1
fi
echo "[INFO] Test Data: User=$TEST_USER_ID, Session=$TEST_SESSION_ID" | tee -a $LOG_FILE
# 4. Run Pytest
echo "[INFO] Running API E2E Tests..." | tee -a $LOG_FILE
PYTHONPATH=. venv/bin/python -m pytest tests/test_api_real_e2e.py -s >> $LOG_FILE 2>&1
TEST_EXIT_CODE=$?
# 5. Cleanup
echo "[INFO] Shutting down Server..." | tee -a $LOG_FILE
kill $SERVER_PID
echo "==========================================" | tee -a $LOG_FILE
if [ $TEST_EXIT_CODE -eq 0 ]; then
echo "FINAL RESULT: ✅ ALL API TESTS PASSED" | tee -a $LOG_FILE
else
echo "FINAL RESULT: ❌ SOME API TESTS FAILED (Code: $TEST_EXIT_CODE)" | tee -a $LOG_FILE
fi
echo "==========================================" | tee -a $LOG_FILE
exit $TEST_EXIT_CODE