Files
sam-hotfix/skip_scenario_analysis_2026-01-27.md

200 lines
5.8 KiB
Markdown
Raw Normal View History

2026-01-29 11:02:37 +09:00
# SKIP 시나리오 근본 원인 분석 리포트
**분석 일시**: 2026-01-27 07:45:00 KST
**분석 대상**: 3개 SKIP 시나리오
**테스트 서버**: https://dev.codebridge-x.com
---
## 요약
| 시나리오 | 테스트 시도 URL | 실제 동작 URL | 근본 원인 |
|----------|----------------|---------------|-----------|
| attendance-checkin | `/hr/attendance-checkin` ❌ | `/hr/attendance` ✅ | URL 구성 오류 |
| attendance-reason | `/hr/attendance-reason` ❌ | `/hr/attendance-management` ✅ | URL 구성 오류 |
| attendance-register | `/hr/attendance-register` ❌ | `/hr/attendance-management` ✅ | URL 구성 오류 |
**공통 근본 원인**: 테스트 실행 시 시나리오 ID를 URL 경로로 사용함 (JSON에 정의된 URL 무시)
---
## 상세 분석
### 1. attendance-checkin (근태현황 출퇴근 테스트)
**시나리오 파일**: `attendance-checkin.json`
**JSON 정의 내용**:
```json
{
"id": "attendance-checkin",
"url": "/ko/hr/attendance",
"menuNavigation": {
"level1": "인사관리",
"level2": "근태현황"
}
}
```
**실제 동작 확인**:
- 메뉴 경로: 인사관리 > 근태현황
- 실제 URL: `/hr/attendance`
- 페이지 상태: ✅ 정상 동작
- 기능: 출퇴근하기, 현재 위치 기반 출근/퇴근 기록
**근본 원인**:
- 테스트 러너가 시나리오 ID `attendance-checkin`을 URL로 변환하여 `/hr/attendance-checkin` 접근
- JSON에 정의된 `/ko/hr/attendance` URL을 사용하지 않음
**해결 방안**:
- 테스트 러너가 JSON의 `url` 필드 또는 `menuNavigation` 사용하도록 수정
- 또는 시나리오 ID를 URL과 일치시킴 (예: `attendance``/hr/attendance`)
---
### 2. attendance-reason (근태 사유 등록 테스트)
**시나리오 파일**: `attendance-reason.json`
**JSON 정의 내용**:
```json
{
"id": "attendance-reason",
"url": "/ko/hr/attendance-management",
"menuNavigation": {
"level1": "인사관리",
"level2": "근태관리"
}
}
```
**실제 동작 확인**:
- 메뉴 경로: 인사관리 > 근태관리
- 실제 URL: `/hr/attendance-management`
- 페이지 상태: ✅ 정상 동작
- 기능: 직원 출퇴근 및 근태 정보 관리
**근본 원인**:
- 테스트 러너가 시나리오 ID `attendance-reason`을 URL로 변환하여 `/hr/attendance-reason` 접근
- JSON에 정의된 `/ko/hr/attendance-management` URL을 사용하지 않음
**추가 확인 필요**:
- 시나리오는 "사유 등록" 버튼 클릭을 기대하지만, 현재 페이지에는 "근태 등록" 버튼만 확인됨
- "사유 등록" 기능이 "근태 등록" 모달 내부에 있는지 또는 별도 존재하는지 확인 필요
---
### 3. attendance-register (근태 등록 테스트)
**시나리오 파일**: `attendance-register.json`
**JSON 정의 내용**:
```json
{
"id": "attendance-register",
"url": "/ko/hr/attendance-management",
"menuNavigation": {
"level1": "인사관리",
"level2": "근태관리"
}
}
```
**실제 동작 확인**:
- 메뉴 경로: 인사관리 > 근태관리
- 실제 URL: `/hr/attendance-management`
- 페이지 상태: ✅ 정상 동작
- "근태 등록" 버튼: ✅ 존재 확인
**근본 원인**:
- 테스트 러너가 시나리오 ID `attendance-register`을 URL로 변환하여 `/hr/attendance-register` 접근
- JSON에 정의된 `/ko/hr/attendance-management` URL을 사용하지 않음
---
## 근본 원인 (Root Cause)
### 문제점
```
시나리오 ID 기반 URL 생성 로직:
scenario.id = "attendance-checkin"
→ URL = "/hr/" + scenario.id
→ URL = "/hr/attendance-checkin" ❌ (존재하지 않음)
JSON에 정의된 URL 무시:
scenario.url = "/ko/hr/attendance"
→ 사용되지 않음 ❌
```
### 올바른 동작
```
JSON URL 또는 메뉴 네비게이션 사용:
scenario.url = "/ko/hr/attendance"
→ URL = "/hr/attendance" ✅
또는 menuNavigation 사용:
인사관리 클릭 → 근태현황 클릭
→ 실제 URL로 이동 ✅
```
---
## 권장 해결 방안
### 방안 1: 테스트 러너 수정 (권장)
테스트 러너가 URL 결정 시 다음 우선순위 적용:
1. `menuNavigation` 정의 시: 메뉴 클릭으로 네비게이션
2. `url` 필드 정의 시: 해당 URL로 직접 이동
3. 둘 다 없을 경우에만: 시나리오 ID 기반 URL 생성
### 방안 2: 시나리오 파일명/ID 수정
시나리오 ID를 실제 URL 경로와 일치시킴:
```
attendance-checkin.json → attendance.json (id: "attendance")
attendance-reason.json → attendance-management-reason.json
attendance-register.json → attendance-management-register.json
```
### 방안 3: fallbackUrls 활용
시나리오 JSON에 이미 정의된 `fallbackUrls` 활용:
```json
"fallbackUrls": [
"/ko/hr/attendance",
"/hr/attendance"
]
```
---
## 실제 메뉴 구조 (확인됨)
```
인사관리/
├── 사원관리
├── 부서관리
├── 카드관리
├── 근태현황 → /hr/attendance (출퇴근 체크인/아웃)
├── 근태관리 → /hr/attendance-management (근태 등록/관리)
├── 급여관리
└── 휴가관리
```
**참고**: "근태체크인", "근태사유", "근태등록"이라는 별도 메뉴는 존재하지 않음.
해당 기능들은 "근태현황"과 "근태관리" 페이지 내에 통합되어 있음.
---
## 결론
| 시나리오 | 페이지 존재 | 기능 동작 | 수정 필요 |
|----------|-------------|-----------|-----------|
| attendance-checkin | ✅ `/hr/attendance` | ✅ 출퇴근하기 | URL 경로만 수정 |
| attendance-reason | ✅ `/hr/attendance-management` | ⚠️ 확인 필요 | URL + 기능 확인 |
| attendance-register | ✅ `/hr/attendance-management` | ✅ 근태 등록 | URL 경로만 수정 |
**최종 판정**: 3개 시나리오 모두 **미구현이 아닌 URL 구성 오류**
---
*Generated by Claude Code E2E Test Analyzer*