5.8 KiB
5.8 KiB
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 정의 내용:
{
"id": "attendance-checkin",
"url": "/ko/hr/attendance",
"menuNavigation": {
"level1": "인사관리",
"level2": "근태현황"
}
}
실제 동작 확인:
- 메뉴 경로: 인사관리 > 근태현황
- 실제 URL:
/hr/attendance - 페이지 상태: ✅ 정상 동작
- 기능: 출퇴근하기, 현재 위치 기반 출근/퇴근 기록
근본 원인:
- 테스트 러너가 시나리오 ID
attendance-checkin을 URL로 변환하여/hr/attendance-checkin접근 - JSON에 정의된
/ko/hr/attendanceURL을 사용하지 않음
해결 방안:
- 테스트 러너가 JSON의
url필드 또는menuNavigation사용하도록 수정 - 또는 시나리오 ID를 URL과 일치시킴 (예:
attendance→/hr/attendance)
2. attendance-reason (근태 사유 등록 테스트)
시나리오 파일: attendance-reason.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-managementURL을 사용하지 않음
추가 확인 필요:
- 시나리오는 "사유 등록" 버튼 클릭을 기대하지만, 현재 페이지에는 "근태 등록" 버튼만 확인됨
- "사유 등록" 기능이 "근태 등록" 모달 내부에 있는지 또는 별도 존재하는지 확인 필요
3. attendance-register (근태 등록 테스트)
시나리오 파일: attendance-register.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-managementURL을 사용하지 않음
근본 원인 (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 결정 시 다음 우선순위 적용:
menuNavigation정의 시: 메뉴 클릭으로 네비게이션url필드 정의 시: 해당 URL로 직접 이동- 둘 다 없을 경우에만: 시나리오 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 활용:
"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