# 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이 포함되었는가?
### 권장 (가능하면 ✅)
- [ ] 날짜 역순, 잘못된 형식 등 입력 오류 케이스가 있는가?
- [ ] 더블클릭, 타임아웃 등 네트워크 예외 케이스가 있는가?
- [ ] 대용량 데이터 조회 성능 테스트가 있는가?