## 주요 변경사항 ### 아키텍처 개선 - Clean Architecture 패턴 적용 (Domain, Data, Presentation 레이어 분리) - Use Case 패턴 도입으로 비즈니스 로직 캡슐화 - Repository 패턴으로 데이터 접근 추상화 - 의존성 주입 구조 개선 ### 상태 관리 최적화 - 모든 Controller에서 불필요한 상태 관리 로직 제거 - 페이지네이션 로직 통일 및 간소화 - 에러 처리 로직 개선 (에러 메시지 한글화) - 로딩 상태 관리 최적화 ### Mock 서비스 제거 - MockDataService 완전 제거 - 모든 화면을 실제 API 전용으로 전환 - 불필요한 Mock 관련 코드 정리 ### UI/UX 개선 - Overview 화면 대시보드 기능 강화 - 라이선스 만료 알림 위젯 추가 - 사이드바 네비게이션 개선 - 일관된 UI 컴포넌트 사용 ### 코드 품질 - 중복 코드 제거 및 함수 추출 - 파일별 책임 분리 명확화 - 테스트 코드 업데이트 ## 영향 범위 - 모든 화면의 Controller 리팩토링 - API 통신 레이어 구조 개선 - 에러 처리 및 로깅 시스템 개선 ## 향후 계획 - 단위 테스트 커버리지 확대 - 통합 테스트 시나리오 추가 - 성능 모니터링 도구 통합
SUPERPORT 마스터 테스트 스위트
강화된 마스터 테스트 스위트는 모든 화면 테스트를 통합하여 병렬로 실행하고 상세한 리포트를 생성합니다.
주요 기능
1. 병렬 테스트 실행
- 의존성이 없는 테스트들을 동시에 실행하여 전체 실행 시간 단축
- 최대 동시 실행 수 조절 가능 (기본값: 3)
- 세마포어 기반 실행 제어로 리소스 관리
2. 실시간 진행 상황 표시
[2/5] ▶️ EquipmentIn 테스트 시작...
[2/5] ✅ License 완료 (45초)
[3/5] ❌ Company 실패 (12초)
3. 에러 복원력
- 한 테스트가 실패해도 다른 테스트는 계속 진행
- 예외 발생 시 안전한 처리
- 상세한 에러 로그 기록
4. 다양한 리포트 형식
HTML 리포트
- 시각적으로 보기 좋은 웹 기반 리포트
- 차트와 그래프로 결과 시각화
- 상세한 실패 정보 포함
Markdown 리포트
- Git 저장소에서 바로 볼 수 있는 형식
- 표와 섹션으로 구조화
- 성능 분석 및 권장사항 포함
JSON 리포트
- CI/CD 파이프라인 통합용
- 프로그래매틱 분석 가능
- Exit code 포함
5. CI/CD 통합
- Jenkins, GitHub Actions 등과 완벽 호환
- Exit code 기반 성공/실패 판단
- JSON 형식의 구조화된 결과
사용법
기본 실행
# 병렬 모드로 모든 테스트 실행
./run_master_test_suite.sh
# 또는 직접 실행
flutter test test/integration/automated/master_test_suite.dart
옵션 설정
코드에서 직접 옵션 수정:
final options = TestSuiteOptions(
parallel: true, // 병렬 실행 여부
verbose: false, // 상세 로그 출력
stopOnError: false, // 첫 에러 시 중단
generateHtml: true, // HTML 리포트 생성
generateMarkdown: true, // Markdown 리포트 생성
maxParallelTests: 3, // 최대 동시 실행 수
includeScreens: ['EquipmentIn', 'License'], // 특정 화면만
excludeScreens: ['Company'], // 특정 화면 제외
);
테스트 추가하기
1. BaseScreenTest를 상속하는 새 테스트 클래스 생성
class MyScreenTest extends BaseScreenTest {
@override
ScreenMetadata getScreenMetadata() {
return ScreenMetadata(
screenName: 'MyScreen',
// ... 메타데이터
);
}
// ... 필수 메서드 구현
}
2. MasterTestSuite에 테스트 추가
_prepareScreenTests() 메서드에 추가:
if (_shouldIncludeScreen('MyScreen')) {
screenTests.add(MyScreenTest(
apiClient: apiClient,
getIt: getIt,
testContext: TestContext(),
errorDiagnostics: errorDiagnostics,
autoFixer: autoFixer,
dataGenerator: dataGenerator,
reportCollector: ReportCollector(),
));
}
리포트 확인
생성 위치
test_reports/master_test_report_[timestamp].htmltest_reports/master_test_report_[timestamp].mdtest_reports/master_test_report_[timestamp].json
리포트 내용
- 실행 개요 (시간, 환경, 모드)
- 전체 결과 요약
- 화면별 상세 결과
- 실패 상세 정보
- 성능 분석 (가장 느린 테스트)
- 권장사항
성능 최적화
병렬 실행 효율성
- 테스트가 균등하게 분배되도록 조정
- CPU 코어 수에 맞춰
maxParallelTests설정 - 네트워크 대역폭 고려
테스트 격리
- 각 테스트는 독립적인 컨텍스트 사용
- 리소스 충돌 방지
- 테스트 간 상태 공유 없음
문제 해결
테스트가 실패하는 경우
- 개별 테스트 로그 확인
- 리포트의 실패 상세 섹션 참조
- 자동 수정 시도 확인
성능이 느린 경우
- 병렬 실행 수 증가
- 네트워크 지연 확인
- 개별 테스트 최적화
리포트가 생성되지 않는 경우
test_reports디렉토리 권한 확인- 디스크 공간 확인
- 로그에서 에러 메시지 확인
현재 포함된 테스트
- EquipmentIn - 장비 입고 프로세스
- License - 라이선스 관리
향후 추가될 테스트
- Company - 회사 관리
- User - 사용자 관리
- Warehouse - 창고 관리
이들은 현재 BaseScreenTest 형식으로 마이그레이션 중입니다.