- 모든 서비스 메서드 시그니처를 실제 구현에 맞게 수정 - TestDataGenerator 제거하고 직접 객체 생성으로 변경 - 모델 필드명 및 타입 불일치 수정 - 불필요한 Either 패턴 사용 제거 - null safety 관련 이슈 해결 수정된 파일: - test/integration/screens/company_integration_test.dart - test/integration/screens/equipment_integration_test.dart - test/integration/screens/user_integration_test.dart - test/integration/screens/login_integration_test.dart
165 lines
4.2 KiB
Markdown
165 lines
4.2 KiB
Markdown
# 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 형식의 구조화된 결과
|
|
|
|
## 사용법
|
|
|
|
### 기본 실행
|
|
```bash
|
|
# 병렬 모드로 모든 테스트 실행
|
|
./run_master_test_suite.sh
|
|
|
|
# 또는 직접 실행
|
|
flutter test test/integration/automated/master_test_suite.dart
|
|
```
|
|
|
|
### 옵션 설정
|
|
|
|
코드에서 직접 옵션 수정:
|
|
|
|
```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를 상속하는 새 테스트 클래스 생성
|
|
|
|
```dart
|
|
class MyScreenTest extends BaseScreenTest {
|
|
@override
|
|
ScreenMetadata getScreenMetadata() {
|
|
return ScreenMetadata(
|
|
screenName: 'MyScreen',
|
|
// ... 메타데이터
|
|
);
|
|
}
|
|
|
|
// ... 필수 메서드 구현
|
|
}
|
|
```
|
|
|
|
### 2. MasterTestSuite에 테스트 추가
|
|
|
|
`_prepareScreenTests()` 메서드에 추가:
|
|
|
|
```dart
|
|
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].html`
|
|
- `test_reports/master_test_report_[timestamp].md`
|
|
- `test_reports/master_test_report_[timestamp].json`
|
|
|
|
### 리포트 내용
|
|
- 실행 개요 (시간, 환경, 모드)
|
|
- 전체 결과 요약
|
|
- 화면별 상세 결과
|
|
- 실패 상세 정보
|
|
- 성능 분석 (가장 느린 테스트)
|
|
- 권장사항
|
|
|
|
## 성능 최적화
|
|
|
|
### 병렬 실행 효율성
|
|
- 테스트가 균등하게 분배되도록 조정
|
|
- CPU 코어 수에 맞춰 `maxParallelTests` 설정
|
|
- 네트워크 대역폭 고려
|
|
|
|
### 테스트 격리
|
|
- 각 테스트는 독립적인 컨텍스트 사용
|
|
- 리소스 충돌 방지
|
|
- 테스트 간 상태 공유 없음
|
|
|
|
## 문제 해결
|
|
|
|
### 테스트가 실패하는 경우
|
|
1. 개별 테스트 로그 확인
|
|
2. 리포트의 실패 상세 섹션 참조
|
|
3. 자동 수정 시도 확인
|
|
|
|
### 성능이 느린 경우
|
|
1. 병렬 실행 수 증가
|
|
2. 네트워크 지연 확인
|
|
3. 개별 테스트 최적화
|
|
|
|
### 리포트가 생성되지 않는 경우
|
|
1. `test_reports` 디렉토리 권한 확인
|
|
2. 디스크 공간 확인
|
|
3. 로그에서 에러 메시지 확인
|
|
|
|
## 현재 포함된 테스트
|
|
|
|
1. **EquipmentIn** - 장비 입고 프로세스
|
|
2. **License** - 라이선스 관리
|
|
|
|
## 향후 추가될 테스트
|
|
|
|
- Company - 회사 관리
|
|
- User - 사용자 관리
|
|
- Warehouse - 창고 관리
|
|
|
|
이들은 현재 BaseScreenTest 형식으로 마이그레이션 중입니다. |