MAO Prompt Ops 테스트 전략
1. Scope
- Prompt Library/Detail/Editor
- LLM Model Profile Drawer & Provider/Fallback 헬퍼
- Deployment Center & Guardrail 흐름
- Experiments 화면
- Observability 대시보드
2. 테스트 피라미드
- Unit Tests (Jest)
- Slot Checklist validation (Zod schema)
- Prompt Lint 함수(필수 토큰, Data Readiness 슬롯)
- Deployment metrics gate evaluator
- Model Profile Schema(validation of provider/model/parameters/fallback)
- Integration Tests (Jest + Next.js Route Handler)
/api/admin/prompt-console/templates→ Mock Prompt Service/api/admin/prompt-console/deployments→ Guardrail stub/api/admin/prompt-console/metrics→ SSE stream mock/api/admin/prompt-console/model-profiles→ Provider Router mock (Vertex/OpenAI/Anthropic)/api/admin/prompt-console/model-quotas→ 토큰 한도 mock
- E2E Tests (Cypress Admin)
- Prompt 작성 → Review → Deploy → Guardrail pause → Rollback
- Deployment 실패 후 알림 표시
- Observability 차트/Guardrail Feed 렌더링
- Model Profile 생성 → Agent 바인딩 → Guardrail Simulation 결과 확인 → 롤백
3. 자동화 체크리스트
| 케이스 | 유형 | 설명 |
|---|---|---|
| Prompt Draft 저장 | Unit | editor form validation |
| Review Approve flow | Integration | reviewer scope 필요 |
| Deploy canary success | Integration | metrics gate satisfied |
| Guardrail pause & rollback | E2E | severity HIGH 시 Pause 표시 |
| Experiment bucket editing | E2E | bucket 비율 합 100% 검사 |
| Observability SSE reconnect | Unit/Integration | 503 후 자동 재연결 |
| Model Profile fallback chain | Integration | fallback 순서 변경 시 API payload 검증 |
| Model Quota alert | E2E | 한도 80% 이상일 때 경고 배지 노출 |
4. Test Data & Fixtures
fixtures/templates.json: 대표 Supervisor/CBTI 템플릿fixtures/deployments.json: state 변환 시나리오fixtures/metrics-stream.ndjson: SSE replayfixtures/model-profiles.json: Vertex/OpenAI/Anthropic profile 샘플 + fallback/파라미터fixtures/model-quotas.json: Provider별 토큰 한도/사용량
5. QA 프로세스
- Feature flag ON 상태에서 Staging에 배포
- QA가 Cypress 스모크 테스트 실행 (
yarn test:admin-mao-e2e) - Guardrail 정책 팀이 승인 후 Prod 롤아웃
- 회귀 테스트: Prompt Ops 관련 PR은 최소 Unit + Integration + Cypress smoke를 통과해야 merge
테스트 전략은 Iteration마다 업데이트하며, 새로운 API/화면 추가 시 표에 케이스를 더한다.