# qa-testcase-writer > TestRail 호환 CSV 테스트 케이스 생성 스킬. 트리거: (1) "테스트 케이스 만들어줘/작성해줘" (2) "TestRail CSV 생성" (3) "QA 테스트 설계" (4) Figma/Axure URL과 함께 테스트 요청 (5) Jira/Confluence 문서로 테스트 케이스 요청 (6) 스크린샷/PPT/PDF 업로드 후 테스트 케이스 요청 (7) 웹사이트 URL로 테스트 케이스 요청. 입력: Figma, Axure, Jira, Confluence, PPT, PDF, 스크린샷, 웹 URL 등 요구사항 문서. 출력: - [기능명]_테스트케이스.csv - TestRail UI/UX 테스트케이스 업로드용 - [기능명]_보안테스트케이스.csv - TestRail 보안 테스트케이스 업로드용 - [기능명]_리스크분석.md - 위험 항목, 발생 가능성, 영향도, 완화 전략 - [기능명]_질문.md - 불명확한 요구사항 질문 (우선순위별), 헤더에 요청 URL 포함 - [기능명]_체크리스트.md - 커버리지 검증 체크리스트 - Author: 태진 - Repository: taejin0618/skill - Version: 20260201235049 - Stars: 5 - Forks: 2 - Last Updated: 2026-02-06 - Source: https://github.com/taejin0618/skill - Web: https://mule.run/skillshub/@@taejin0618/skill~qa-testcase-writer:20260201235049 --- --- name: qa-testcase-writer description: > TestRail 호환 CSV 테스트 케이스 생성 스킬. 트리거: (1) "테스트 케이스 만들어줘/작성해줘" (2) "TestRail CSV 생성" (3) "QA 테스트 설계" (4) Figma/Axure URL과 함께 테스트 요청 (5) Jira/Confluence 문서로 테스트 케이스 요청 (6) 스크린샷/PPT/PDF 업로드 후 테스트 케이스 요청 (7) 웹사이트 URL로 테스트 케이스 요청. 입력: Figma, Axure, Jira, Confluence, PPT, PDF, 스크린샷, 웹 URL 등 요구사항 문서. 출력: - [기능명]_테스트케이스.csv - TestRail UI/UX 테스트케이스 업로드용 - [기능명]_보안테스트케이스.csv - TestRail 보안 테스트케이스 업로드용 - [기능명]_리스크분석.md - 위험 항목, 발생 가능성, 영향도, 완화 전략 - [기능명]_질문.md - 불명확한 요구사항 질문 (우선순위별), 헤더에 요청 URL 포함 - [기능명]_체크리스트.md - 커버리지 검증 체크리스트 --- # QA 테스트 케이스 작성 스킬 요구사항 문서를 분석하여 TestRail 호환 CSV 테스트 케이스를 생성한다. ## 핵심 원칙 1. **정확성**: 불명확한 요구사항은 질문.md에 정리. 추측 금지. 2. **실행 가능성**: 누구나 동일하게 실행할 수 있도록 구체적인 값 명시. 3. **완전한 커버리지**: Happy Path + Edge Case + 보안 테스트 모두 포함. 4. **파일 분리**: UI/UX 테스트케이스와 보안 테스트케이스는 별도 CSV로 분리. --- ## 최종 출력물 (5개 파일) `[기능명]_테스트케이스/` 폴더에 아래 5개 파일 생성: | # | 파일명 | 용도 | 템플릿 참조 | |---|--------|------|-------------| | 1 | **[기능명]_테스트케이스.csv** | TestRail UI/UX 테스트케이스 업로드용 | - | | 2 | **[기능명]_보안테스트케이스.csv** | TestRail 보안 테스트케이스 업로드용 | `references/security-testcases.csv` | | 3 | **[기능명]_리스크분석.md** | 위험 항목, 발생 가능성, 영향도, 완화 전략 | `references/templates/risk-analysis-template.md` | | 4 | **[기능명]_질문.md** | 불명확한 요구사항 질문 (요청 URL 포함) | `references/templates/questions-template.md` | | 5 | **[기능명]_체크리스트.md** | 커버리지 검증 체크리스트 | `references/templates/checklist-template.md` | --- ## ⚠️ 필수 커버리지 체크 (반드시 포함) ### 1. 보안 테스트 (별도 CSV 파일로 분리, 최소 3개 이상 필수) > 📋 **참조**: `references/security-testcases.csv` - 보안 테스트 케이스 템플릿 | 필수 항목 | 테스트 내용 | Priority | | ------------------- | ----------------------------------------------- | -------- | | SQL Injection | `' OR '1'='1` 입력 시 차단 확인 | High | | XSS 공격 | `` 입력 시 차단 확인 | High | | 비로그인 접근 | 인증 필요 페이지 URL 직접 접근 시 차단 | High | | 권한 없는 접근 | 일반 사용자가 관리자 기능 접근 시 403 에러 | High | | URL 파라미터 조작 | `?user_id=999` 등 조작 시 타인 데이터 접근 차단 | High | | 타 조직 데이터 접근 | 본인 소속 외 데이터 조회 시도 시 차단 | High | ### 2. 핵심 비즈니스 기능 (UI/UX 테스트케이스에 포함) **반드시 테스트 케이스에 포함해야 할 기능:** - [ ] 모든 버튼 클릭 동작 (검색, 저장, 삭제, 수정 등) - [ ] 출력/인쇄 기능 (수료증 출력, 리포트 출력 등) - [ ] 다운로드 기능 (엑셀, PDF, 이미지 등) - [ ] 발송/전송 기능 (이메일, 알림, SMS 등) - [ ] 일괄 처리 기능 (다중 선택 후 일괄 적용) - [ ] 상태 변경 기능 (승인, 반려, 퇴사처리 등) ### 3. Preconditions 필수 포함 항목 모든 테스트 케이스의 Preconditions에 아래 항목 명시: ``` 1. 로그인 사용자 권한: [관리자/교육담당자/일반사용자] 2. 접근 경로: [메뉴 > 서브메뉴 > 화면명] 3. 테스트 데이터: [구체적 값 - 예: 이름 '홍길동', 이메일 'test@example.com'] 4. 사전 상태: [필요 시 - 예: 검색 결과 100건 이상 존재] ``` ### 4. 날짜/입력값 오류 케이스 (필수) | 케이스 | 테스트 데이터 | Expected Result | | ---------------- | ------------------ | ------------------------------ | | 날짜 역순 | 시작일 > 종료일 | 에러 메시지 표시, 검색 차단 | | 잘못된 날짜 형식 | `2025/13/45` | 에러 메시지 표시 | | 미래 날짜 | 오늘 이후 날짜 | 정책에 따라 차단 또는 0건 결과 | | 빈 값 | 필수 입력란 공백 | 에러 메시지 표시 | | 공백만 입력 | `" "` (공백 3개) | trim 처리 후 빈 값으로 처리 | ### 5. 네트워크/성능 예외 케이스 (권장) | 케이스 | 테스트 방법 | Expected Result | | ------------- | -------------------------- | ----------------------------- | | 더블클릭 | 버튼 빠르게 2회 클릭 | 중복 요청 방지, 1회만 처리 | | 타임아웃 | 개발자도구로 네트워크 지연 | 에러 메시지 + 재시도 버튼 | | 대용량 데이터 | 1000건+ 조회 | 3초 이내 로딩, UI 프리징 없음 | --- ## 작업 프로세스 ### 1단계: 문서 분석 | 입력 유형 | 도구/방법 | 추출 항목 | | ---------------- | -------------------------------------------------- | --------------------------------------------- | | Figma URL | Figma MCP | Component, Text, Input 속성, Interactive 흐름 | | Axure URL | 1순위 : chrome-in-chrome MCP, 2순위:playwright MCP | Widget Notes, Interaction, Dynamic Panel | | Jira/Confluence | Atlassian MCP | 이슈 설명, AC, 첨부파일, 연결 이슈 | | 일반 URL | 1순위 : chrome-in-chrome MCP, 2순위:playwright MCP | UI 구성요소, 라벨, 안내문구, 화면 전환 경로 | | 스크린샷/PPT/PDF | 이미지 분석 | UI 구성요소, 라벨, 화면 전환 경로 | ### 2단계: Section 구조 설계 **최대 3 depth 권장. 과도한 중첩 금지.** ``` ✅ 좋은 예: 로그인 ├── 정상 케이스 ├── 오류 케이스 └── 엣지 케이스 ❌ 나쁜 예: 회원관리 > 인증 > 로그인 > 입력검증 > 이메일 > 특수문자 ``` ### 3단계: 테스트 케이스 작성 **UI/UX 테스트케이스 (테스트케이스.csv)** 1. **정상 케이스**: Happy Path 중심, Priority High 이상 2. **엣지케이스**: `references/edge-cases.md` 체크리스트 활용 3. **테스트 기법**: `references/test-techniques.md` 참조 (경계값, 동등분할, 상태전환) 4. **UX 검증**: `references/nielsen-heuristics.md` 참조 **보안 테스트케이스 (보안테스트케이스.csv)** - `references/security-testcases.csv` 템플릿 참조하여 해당 기능에 맞게 작성 ### 4단계: 검증 및 출력 ```bash python scripts/validate_csv.py [파일명].csv # 포맷 검증 python scripts/quality_check.py [파일명].csv # 품질 체크 python scripts/testrail_upload_check.py [파일명].csv # 최종 검증 ``` --- ## CSV 형식 (TestRail 호환) ### 컬럼 구조 ```csv "Section","Section Hierarchy","Title","Preconditions","Steps","Expected Result","Priority" ``` ### Section Hierarchy 작성 규칙 | depth | Section | Section Hierarchy | 설명 | | ----- | ----------- | ---------------------------------- | ----------- | | 1 | 로그인 | (빈 값) | 최상위 폴더 | | 2 | 정상 케이스 | 로그인 > 정상 케이스 | 하위 폴더 | | 3 | 이메일 검증 | 로그인 > 오류 케이스 > 이메일 검증 | 최하위 폴더 | --- ## CSV 예시 ### UI/UX 테스트케이스 예시 (테스트케이스.csv) ```csv "Section","Section Hierarchy","Title","Preconditions","Steps","Expected Result","Priority" "로그인","","","","","","Highest" "정상 케이스","로그인 > 정상 케이스","유효한 계정으로 로그인","1. 로그인 권한: 일반 사용자 2. 접근 경로: 메인 > 로그인 3. 테스트 계정: test@example.com / Pass1234!","1. 로그인 페이지 접속 (URL: /login) 2. 이메일 입력란에 'test@example.com' 입력 3. 비밀번호 입력란에 'Pass1234!' 입력 4. '로그인' 버튼 클릭","1. 대시보드 페이지로 이동 (URL: /dashboard) 2. 우측 상단에 'test@example.com' 표시 3. '로그인 성공' 토스트 메시지 표시","High" "정상 케이스","로그인 > 정상 케이스","자동 로그인 유지 체크 후 로그인","1. 회원가입 완료된 계정 존재 2. 브라우저 쿠키 초기화 상태","1. 로그인 페이지 접속 2. 이메일/비밀번호 입력 3. '자동 로그인' 체크박스 선택 4. '로그인' 버튼 클릭 5. 브라우저 종료 후 재접속","1. 로그인 상태 유지됨 2. 자동으로 대시보드 이동","Medium" "오류 케이스","로그인 > 오류 케이스","잘못된 비밀번호 입력","1. 회원가입 완료된 계정 존재 2. 올바른 이메일: test@example.com","1. 로그인 페이지 접속 2. 이메일 입력란에 'test@example.com' 입력 3. 비밀번호 입력란에 'WrongPass123!' 입력 4. '로그인' 버튼 클릭","1. 로그인 실패 2. '비밀번호가 일치하지 않습니다' 에러 메시지 표시 3. 비밀번호 입력란 초기화","High" "오류 케이스","로그인 > 오류 케이스","존재하지 않는 계정","1. 미가입 이메일 사용","1. 로그인 페이지 접속 2. 이메일 입력란에 'nonexist@example.com' 입력 3. 비밀번호 입력란에 'AnyPass123!' 입력 4. '로그인' 버튼 클릭","1. 로그인 실패 2. '등록되지 않은 이메일입니다' 에러 메시지 표시","Medium" "엣지 케이스","로그인 > 엣지 케이스","빈 값으로 로그인 시도","1. 로그인 페이지 접속","1. 이메일, 비밀번호 입력란 비워둠 2. '로그인' 버튼 클릭","1. '이메일을 입력해주세요' 에러 메시지 표시 2. 로그인 버튼 비활성화 또는 제출 차단","Medium" ``` ### 보안 테스트케이스 예시 (보안테스트케이스.csv) ```csv "Section","Section Hierarchy","Title","Preconditions","Steps","Expected Result","Priority" "보안 테스트","","","","","","Highest" "입력값 공격","보안 테스트 > 입력값 공격","SQL Injection 공격 차단","1. 로그인 페이지 접속","1. 이메일 입력란에 '' OR '1'='1' 입력 2. 비밀번호 입력란에 'password' 입력 3. '로그인' 버튼 클릭","1. SQL Injection 공격 차단됨 2. 로그인 실패 처리 3. 에러 메시지 표시 (DB 정보 미노출)","Highest" "입력값 공격","보안 테스트 > 입력값 공격","XSS 공격 차단 (Script 태그)","1. 로그인 페이지 접속","1. 이메일 입력란에 '' 입력 2. '로그인' 버튼 클릭","1. 스크립트 실행되지 않음 2. 입력값 이스케이프 처리 3. 페이지 정상 동작","Highest" "인증/인가","보안 테스트 > 인증/인가","비로그인 사용자 페이지 직접 접근 차단","1. 로그아웃 상태 2. 인증 필요 페이지 URL 확보 (예: /mypage)","1. 브라우저 주소창에 인증 필요 페이지 URL 직접 입력 2. Enter 키 입력","1. 로그인 페이지로 리다이렉트 2. '로그인이 필요합니다' 메시지 표시","High" "인증/인가","보안 테스트 > 인증/인가","권한 없는 사용자 관리자 기능 접근 차단","1. 일반 사용자 계정으로 로그인 2. 관리자 전용 페이지 URL 확보 (예: /admin)","1. 브라우저 주소창에 관리자 페이지 URL 직접 입력 2. Enter 키 입력","1. 403 Forbidden 에러 표시 또는 권한 에러 페이지 2. '접근 권한이 없습니다' 메시지 표시","High" "데이터 접근","보안 테스트 > 데이터 접근","URL 파라미터 조작으로 타인 데이터 접근 차단","1. 사용자 A 계정으로 로그인 2. 본인 데이터 상세 페이지 접근 (예: /users/123) 3. 타인 데이터 ID 확보 (예: 456)","1. URL의 ID 파라미터를 타인 ID로 변경 (예: /users/456) 2. Enter 키 입력","1. 403 Forbidden 에러 또는 권한 에러 2. '접근 권한이 없습니다' 메시지 표시 3. 타인 데이터 미노출","Highest" ``` --- ## 필드별 작성 규칙 **Title** (최대 30자) - 동사 포함 필수: 클릭, 입력, 선택, 이동, 확인 - ✅ "유효한 이메일로 로그인 성공" / ❌ "로그인 테스트" **Preconditions** - 번호 매기기 (1. 2. 3.) - 로그인 권한, 접근 경로, 테스트 데이터 필수 포함 - 구체적 데이터 값 명시 **Steps** - 한 단계 = 하나의 행동 - 입력값은 작은따옴표로 명시: 'test@example.com' - 줄바꿈으로 구분 (\\n 문자 사용 금지) **Expected Result** - 측정 가능한 기준 명시 - UI 변화 + 데이터 변화 + 상태 변화 포함 - 구체적 메시지 텍스트 명시 (예: '저장되었습니다') **Priority** | 등급 | 기준 | 예시 | | ------- | --------------------------------- | ------------------------------- | | Highest | 서비스 중단, 데이터 손실, 보안 취약점 | 결제 실패, 개인정보 유출, SQL Injection | | High | 핵심 기능 오류 | 로그인 불가, 주문 불가 | | Medium | 일반 기능 오류 | 필터 오작동, 정렬 오류 | | Low | 경미한 UI 오류 | 버튼 색상, 간격 | | Lowest | 문구 오타 | 띄어쓰기, 오탈자 | --- ## 레퍼런스 ### 테스트 설계 참조 | 파일 | 용도 | 참조 시점 | | ----------------------------------- | ------------------------- | ------------------------------ | | `references/edge-cases.md` | 엣지케이스 체크리스트 | UI/UX 엣지케이스 작성 시 | | `references/test-techniques.md` | 경계값/동등분할/상태전환 | 테스트 설계 시 | | `references/nielsen-heuristics.md` | UX 사용성 검증 | UI/UX 테스트 케이스 작성 시 | | `references/security-testcases.csv` | 보안 테스트 케이스 템플릿 | **보안 테스트 CSV 작성 시 (필수)** | ### 출력 문서 템플릿 | 파일 | 용도 | 참조 시점 | | --------------------------------------------- | ------------------ | --------------------- | | `references/templates/risk-analysis-template.md` | 리스크 분석 템플릿 | 리스크분석.md 작성 시 | | `references/templates/questions-template.md` | 질문 템플릿 (URL 포함) | 질문.md 작성 시 | | `references/templates/checklist-template.md` | 체크리스트 템플릿 | 체크리스트.md 작성 시 | --- ## 작성 완료 전 최종 체크리스트 테스트 케이스 작성 완료 후 아래 항목 확인: ### 필수 (반드시 ✅) - [ ] **UI/UX 테스트케이스.csv**와 **보안테스트케이스.csv**가 분리되어 있는가? - [ ] 보안 테스트 3개 이상 포함되었는가? (SQL Injection, XSS, 권한) - [ ] 화면의 모든 버튼/액션에 대한 테스트가 있는가? - [ ] 출력/다운로드/발송 기능 테스트가 있는가? - [ ] Preconditions에 로그인 권한과 테스트 데이터가 명시되었는가? - [ ] Expected Result에 구체적인 메시지 텍스트가 명시되었는가? - [ ] 질문.md 헤더에 요구사항 URL이 포함되었는가? ### 권장 (가능하면 ✅) - [ ] 날짜 역순, 잘못된 형식 등 입력 오류 케이스가 있는가? - [ ] 더블클릭, 타임아웃 등 네트워크 예외 케이스가 있는가? - [ ] 대용량 데이터 조회 성능 테스트가 있는가?