#!/bin/bash # Superport 자동화 테스트 실행 스크립트 # # 사용법: # ./test/scripts/run_all_tests.sh # 모든 테스트 실행 # ./test/scripts/run_all_tests.sh Company # 특정 화면만 테스트 # ./test/scripts/run_all_tests.sh --help # 도움말 set -e # 에러 발생 시 스크립트 중단 # 색상 정의 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 프로젝트 루트 디렉토리로 이동 cd "$(dirname "$0")/../.." echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}" echo -e "${BLUE} 🚀 SUPERPORT 자동화 테스트 실행 🚀${NC}" echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}" echo "" # 도움말 표시 if [ "$1" == "--help" ] || [ "$1" == "-h" ]; then echo "사용법:" echo " $0 # 모든 화면 테스트 실행" echo " $0 [화면명] # 특정 화면만 테스트" echo " $0 --parallel # 병렬 실행 (기본값)" echo " $0 --sequential # 순차 실행" echo "" echo "테스트 가능한 화면:" echo " - EquipmentIn : 장비 입고" echo " - EquipmentOut : 장비 출고" echo " - License : 라이선스" echo " - Overview : 대시보드" echo " - Company : 회사 관리" echo " - User : 사용자 관리" echo " - Warehouse : 창고 관리" echo "" echo "예시:" echo " $0 Company # Company 화면만 테스트" echo " $0 Company User # Company와 User 화면 테스트" exit 0 fi # 테스트 보고서 디렉토리 생성 mkdir -p test_reports # Flutter 패키지 업데이트 echo -e "${YELLOW}📦 패키지 업데이트 중...${NC}" flutter pub get # 코드 생성 (Freezed, JsonSerializable) echo -e "${YELLOW}🔧 코드 생성 중...${NC}" flutter pub run build_runner build --delete-conflicting-outputs || true # 테스트 실행 시작 시간 기록 START_TIME=$(date +%s) # 테스트 실행 echo -e "${GREEN}🧪 테스트 실행 중...${NC}" echo "" # 특정 화면 테스트 또는 전체 테스트 if [ -n "$1" ] && [ "$1" != "--parallel" ] && [ "$1" != "--sequential" ]; then # 특정 화면 테스트 echo -e "${BLUE}선택된 화면: $@${NC}" flutter test test/integration/automated/master_test_suite.dart \ --reporter expanded \ --coverage \ --timeout 10m \ -- --include-screens "$@" else # 전체 테스트 echo -e "${BLUE}모든 화면 테스트 실행${NC}" flutter test test/integration/automated/master_test_suite.dart \ --reporter expanded \ --coverage \ --timeout 10m fi # 테스트 결과 저장 TEST_EXIT_CODE=$? # 종료 시간 및 소요 시간 계산 END_TIME=$(date +%s) DURATION=$((END_TIME - START_TIME)) MINUTES=$((DURATION / 60)) SECONDS=$((DURATION % 60)) echo "" echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}" if [ $TEST_EXIT_CODE -eq 0 ]; then echo -e "${GREEN}✅ 테스트 성공!${NC}" else echo -e "${RED}❌ 테스트 실패!${NC}" fi echo -e "${BLUE}⏱️ 소요 시간: ${MINUTES}분 ${SECONDS}초${NC}" echo -e "${BLUE}📊 리포트 위치: test_reports/${NC}" echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}" # 커버리지 리포트 생성 (선택적) if [ -d "coverage" ]; then echo "" echo -e "${YELLOW}📈 커버리지 리포트 생성 중...${NC}" # HTML 커버리지 리포트 생성 (lcov 필요) if command -v genhtml &> /dev/null; then genhtml coverage/lcov.info -o coverage/html echo -e "${GREEN}✅ HTML 커버리지 리포트 생성: coverage/html/index.html${NC}" else echo -e "${YELLOW}⚠️ genhtml이 설치되지 않음. HTML 리포트를 생성하려면 lcov를 설치하세요.${NC}" echo -e "${YELLOW} brew install lcov (macOS) 또는 apt-get install lcov (Linux)${NC}" fi fi # 최근 테스트 리포트 표시 echo "" echo -e "${BLUE}📄 최근 생성된 리포트:${NC}" ls -lt test_reports/*.md 2>/dev/null | head -3 || echo " 리포트 없음" exit $TEST_EXIT_CODE