테스트 실행 프로세스
개요
이 문서는 QA Agent를 통한 테스트 실행의 전체 프로세스를 설명합니다. 효율적인 테스트 실행을 위한 단계별 가이드와 모범 사례를 제공합니다.
테스트 실행 워크플로우
1단계: 테스트 환경 준비
1.1 환경 설정 확인
# 환경 변수 확인
echo $DEPLOY_ENV # dev, stage, prod
echo $RUNTIME_ENV # local, cloudrun
# QA Agent 상태 확인
curl https://qa-agent-dev.sleepq.ai/v1/health
1.2 필수 권한 확인
- 테스트 실행 권한
- 데이터 접근 권한
- 리소스 사용 권한
1.3 의존성 검증
- 외부 서비스 연결 상태
- 데이터베이스 접근성
- 네트워크 연결성
2단계: 테스트 계획 수립
2.1 테스트 범위 정의
{
"testPlan": {
"name": "User Flow Regression Test",
"scope": {
"features": ["authentication", "questionnaire", "sleep-logging"],
"platforms": ["iOS", "Android"],
"environments": ["dev", "stage"]
}
}
}
2.2 테스트 우선순위 설정
- P0: 핵심 기능 (로그인, 주요 워크플로우)
- P1: 중요 기능 (데이터 저장, 알림)
- P2: 보조 기능 (설정, 프로필)
- P3: 부가 기능 (테마, 언어)
2.3 리소스 할당
- 병렬 실행 수준 결정
- 테스트 실행 시간 예측
- 시스템 부하 고려
3단계: 테스트 실행
3.1 테스트 실행 요청
POST /v1/test-execution/run
{
"testSuite": "regression-suite-v1",
"environment": "dev",
"configuration": {
"parallel": true,
"maxParallel": 5,
"retryFailedTests": true,
"maxRetries": 2,
"timeout": 300000,
"tags": ["smoke", "regression"]
}
}
3.2 실행 모니터링
GET /v1/test-execution/runs/{runId}/status
Response:
{
"runId": "run-12345",
"status": "running",
"progress": {
"total": 150,
"completed": 75,
"passed": 70,
"failed": 3,
"skipped": 2,
"running": 5
},
"estimatedCompletion": "2024-01-15T10:30:00.000Z"
}
3.3 실시간 로그 스트리밍
# 실시간 로그 조회
curl -N https://qa-agent-dev.sleepq.ai/v1/test-execution/runs/{runId}/logs/stream
4단계: 결과 분석
4.1 테스트 결과 조회
GET /v1/test-execution/runs/{runId}/results
Response:
{
"summary": {
"total": 150,
"passed": 140,
"failed": 8,
"skipped": 2,
"duration": 1800000,
"passRate": 93.33
},
"failedTests": [
{
"testId": "auth-001",
"name": "Login with invalid credentials",
"error": "Assertion failed: Expected status 401, got 500",
"duration": 2341,
"retries": 2
}
]
}
4.2 에러 분석
MCP Tools를 활용한 상세 분석:
{
"tool": "analyze-error-patterns",
"arguments": {
"startTime": "2024-01-15T09:00:00.000Z",
"endTime": "2024-01-15T10:00:00.000Z",
"serviceName": "dta-wide-api"
}
}
4.3 성능 메트릭 분석
- 평균 응답 시간
- 최대 응답 시간
- 리소스 사용률
- 에러율
5단계: 보고 및 후속 조치
5.1 테스트 리포트 생성
POST /v1/results-reporting/generate
{
"runId": "run-12345",
"format": "html",
"includeScreenshots": true,
"includeVideos": false,
"recipients": ["qa-team@example.com", "dev-team@example.com"]
}
5.2 이슈 트래킹
실패한 테스트에 대한 이슈 생성:
POST /v1/issue-tracking/create
{
"testRunId": "run-12345",
"failedTestId": "auth-001",
"priority": "high",
"assignee": "dev-team",
"labels": ["regression", "authentication"]
}
5.3 재실행 전략
POST /v1/test-execution/rerun
{
"originalRunId": "run-12345",
"scope": "failed-only",
"configuration": {
"debugMode": true,
"captureNetworkTraffic": true
}
}
고급 실행 시나리오
시나리오 1: 병렬 실행 최적화
{
"configuration": {
"parallel": true,
"parallelStrategy": "feature-based",
"groups": [
{
"name": "auth-tests",
"maxParallel": 2,
"tags": ["authentication"]
},
{
"name": "data-tests",
"maxParallel": 5,
"tags": ["questionnaire", "sleep"]
}
]
}
}
시나리오 2: 조건부 실행
{
"configuration": {
"conditionalExecution": {
"skipIf": {
"environment": "prod",
"time": "outside-business-hours"
},
"runOnlyIf": {
"previousRunPassed": true,
"servicesHealthy": ["api", "database"]
}
}
}
}
시나리오 3: 데이터 주도 테스트
{
"configuration": {
"dataSource": {
"type": "csv",
"path": "test-data/users.csv",
"parallel": true
},
"parameterization": {
"userId": "${data.userId}",
"platform": "${data.platform}"
}
}
}
모범 사례
1. 테스트 격리
- 각 테스트는 독립적으로 실행 가능해야 함
- 테스트 간 데이터 공유 최소화
- 테스트 후 정리(cleanup) 철저히 수행
2. 실행 최적화
- 빠른 테스트를 먼저 실행(fail-fast)
- 중요한 테스트 우선 실행
- 리소스 집약적 테스트는 별도 그룹화
3. 에러 처리
- 명확한 에러 메시지 제공
- 스크린샷/비디오 캡처 활성화
- 충분한 재시도 설정
4. 모니터링
- 실시간 진행 상황 추적
- 리소스 사용률 모니터링
- 이상 징후 조기 감지
문제 해결 가이드
일반적인 문제
-
테스트 타임아웃
- 타임아웃 값 증가
- 네트워크 상태 확인
- 리소스 부족 여부 확인
-
간헐적 실패
- 재시도 로직 추가
- 대기 시간 조정
- 환경 안정성 확인
-
병렬 실행 충돌
- 테스트 격리 강화
- 리소스 경합 해결
- 실행 순서 조정