AI 기능 테스트
이 문서는 GitLab 표준 테스트 가이드라인을 보완하는 AI 관련 테스트 고려사항을 강조합니다. AI 기반 기능은 AI Gateway 및 IDE 확장 프로그램과 같이 GitLab 모노리스 외부의 시스템 구성 요소에 의존합니다.
이 문서는 GitLab 표준 테스트 가이드라인을 보완하는 AI 관련 테스트 고려사항을 강조합니다. 제3자 제공자의 비결정론적 응답과 같이 AI 기능이 테스트에 가져오는 과제에 초점을 맞춥니다. 각 테스트 수준에 대한 예시가 포함됩니다.
AI 기반 기능은 AI Gateway 및 IDE 확장 프로그램과 같이 GitLab 모노리스 외부의 시스템 구성 요소에 의존합니다. 이러한 가이드라인 외에도 각 구성 요소 프로젝트에 문서화된 테스트 가이드라인을 참조하십시오.
단위 테스트#
표준 단위 테스트 가이드라인을 따르십시오. AI 기능의 경우 빠르고 신뢰할 수 있는 테스트를 보장하기 위해 항상 제3자 AI 제공자 호출을 모킹하십시오.
단위 테스트 예시#
- GitLab:
ee/spec/lib/code_suggestions/tasks/code_completion_spec.rb - VS Code 확장 프로그램:
code_suggestions/code_suggestions.test.ts
통합 테스트#
AI 제공자에 대한 요청 구성 및 응답 처리를 확인하려면 통합 테스트를 사용하십시오. 다양한 응답, 오류 및 상태 코드를 처리하는 예측 가능하고 빠른 테스트를 보장하기 위해 AI 제공자 응답을 모킹하십시오.
통합 테스트 예시#
- GitLab:
ee/spec/requests/api/code_suggestions_spec.rb - VS Code 확장 프로그램:
main/test/integration/chat.test.js
프론트엔드 기능 테스트#
최종 사용자 관점에서 AI 기능을 검증하려면 프론트엔드 기능 테스트를 사용하십시오. 속도와 안정성을 유지하기 위해 AI 제공자를 모킹하십시오. 고위험 시나리오에 대한 선택적 부정 경로 테스트와 함께 행복한 경로에 집중하십시오.
프론트엔드 기능 테스트 예시#
- GitLab Duo Chat:
ee/spec/features/duo_chat_spec.rb
핵심 기능 페이지의 DAP 기능 테스트#
핵심 기능 페이지에서 DAP 기능이 작동하는지 그리고 DAP 구성 요소로 핵심 기능이 작동하는지 테스트하려면 기능 사양에서 다음 공유 컨텍스트 및 예시를 사용하십시오:
- 공유 컨텍스트
include_context 'with duo features enabled and agentic chat available for group on SaaS'를 포함하여 기본적으로 기능 페이지에 DAP 구성 요소를 로드합니다. - 공유 예시
it_behaves_like 'user can use agentic chat'를 포함하여 기능 페이지에서 DAP 기능을 테스트합니다.
예를 들어, ee/spec/features/epic_boards/epic_boards_spec.rb는 다음 시나리오를 검증합니다:
- 에픽 보드가 사이드바에서 DAP 구성 요소를 로드하는 페이지에서 작동합니다.
- DAP 기능이 에픽 보드가 렌더링되는 페이지에서 작동합니다.
- 사용자가 핵심 기능 페이지를 방문하고 사이드바에서 GitLab Duo Chat(에이전틱)을 엽니다.
- 사용자가 채팅에서 질문을 합니다.
- 프론트엔드 JS/Vue가 Workhorse와 websocket 연결을 시작합니다(이 Workhorse 인스턴스는 테스트 환경에서 로컬로 실행됩니다).
- 프론트엔드 JS/Vue가 Workhorse를 통해 DWS에 gRPC 요청을 보냅니다(이 DWS 인스턴스는 테스트 환경에서 로컬로 실행됩니다). LLM 응답은 명시적인 검증을 위해 모킹되어 테스트 실패를 재현할 수 있습니다.
AI Gateway에서 변경 시 DAP 기능 테스트 실행#
이 기능 테스트는 AI Gateway 리포지토리에 변경 사항을 적용할 때도 실행되어 MR이 DAP 기능을 실수로 중단하지 않는지 확인합니다. 예를 들어:
- 개발자가 AI Gateway 프로젝트에서 MR을 엽니다.
- MR에 대한 파이프라인이 실행되며, 이는
aigw/test-branch테스트 브랜치에 대해 GitLab 프로젝트에서 다운스트림 파이프라인을 트리거합니다. 이 브랜치는 마스터와 동일한 SHA를 가리킵니다. - 파이프라인이 실패하면 개발자는 제안된 변경 사항이 실수로 회귀를 도입하지 않는지 조사해야 합니다.
aigw/test-branch 브랜치는 AIGW 및 DWS 관리자가 GitLab 프로젝트에서 다운스트림 파이프라인을 트리거할 수 있도록 기본적으로 보호되지 않습니다.
DWS/AIGW 변경 사항으로 기능 사양 로컬 실행#
gdk start를 실행하여 DWS를 포함한 서비스를 시작합니다.<gdk-root>/gitlab에서 터미널을 열고 다음 옵션 중 하나를 사용하십시오:export TEST_AI_GATEWAY_REPO_REF=<your-remote-feature-branch>를 실행하고<gitlab-rails-root>/tmp/tests/gitlab-ai-gateway/캐시 디렉토리를 삭제하거나,export TEST_DUO_WORKFLOW_SERVICE_ENABLED="false" && export TEST_DUO_WORKFLOW_SERVICE_PORT=<your-local-dws-port>를 실행합니다. 이를 통해 기능 테스트가 로컬 DWS 인스턴스에 요청할 수 있습니다. 로컬 DWS에 다음 구성이 설정되고 실행 중인지 확인하십시오:AIGW_MOCK_MODEL_RESPONSES를true로 설정AIGW_USE_AGENTIC_MOCK을true로 설정
- 기능 사양을 실행합니다. 예:
bundle exec rspec ee/spec/features/epic_boards/epic_boards_spec.rb.
테스트 케이스의 로그 확인#
DAP는 여러 서비스와 API 호출로 구성됩니다. 테스트 케이스 실패를 디버깅하려면 근본 원인을 파악하기 위해 서비스 로그를 검사해야 할 수 있습니다. 다음 몇 가지 포인터가 있습니다:
-
GitLab-Rails REST API ...
log/api_json.log -
GitLab-Rails GraphQL API ...
log/graphql_json.log -
GitLab-Workhorse ...
log/workhorse-test.log -
DWS ... stdout 또는
gitlab-ai-gateway리포지토리의DUO_WORKFLOW_LOGGING__TO_FILE. -
JS 콘솔 로그 출력을 사용하여 VueJS 앱 상태를 검사할 수도 있습니다:
it 'runs a test' do ... # 브라우저 로그를 출력합니다. JavaScript의 console.log()와 결합하십시오. browser_logs.each do |log| puts "#{log.level}: #{log.message}" end ... end
엔드투엔드 테스트#
실제 제공자 응답으로 AI 기능이 작동하는지 확인하기 위해 엔드투엔드 테스트를 드물게 사용하십시오. 주요 고려사항:
- 느린 실행과 잠재적인 제공자 중단으로 인해 테스트를 최소화합니다.
- 테스트 설계에서 비결정론적 AI 응답을 고려하십시오. 예를 들어, AI 생성 콘텐츠가 아닌 챗봇 이름과 같이 제어 가능한 요소에 대한 결정론적 검증을 사용하십시오.
E2E 테스트 예시#
- GitLab:
specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb - JetBrains:
test/kotlin/com/gitlab/plugin/e2eTest/tests/CodeSuggestionTest.kt
라이브 환경 테스트#
- GitLab.com: 스테이징 및 프로덕션 환경에서 최소한의 E2E 테스트를 지속적으로 실행합니다. 예를 들어 코드 제안 스모크 테스트.
- GitLab Self-Managed:
gitlab-qa오케스트레이터를 AI Gateway 시나리오와 함께 사용하여 GitLab Self-Managed 인스턴스에서 AI 기능을 테스트합니다.
탐색적 테스트#
예상치 못한 워크플로와 UX 문제 외의 버그를 발견하기 위해 중요한 마일스톤 이전에 탐색적 테스트를 수행하십시오. 이는 AI 기능이 실험, 베타, GA 단계를 거치면서 특히 중요합니다.
독식#
독식은 모든 것에 적용됩니다. 이는 빠르게 변화하는 분야의 특성을 고려할 때 AI 기능에 특히 중요합니다. 자세한 내용은 독식 프로세스를 참조하십시오.
