테스트 실행
GitLab v19.1먼저 로컬 GitLab 개발 환경으로 GDK를 설치하는 지침을 따르세요. 그런 다음 QA 폴더로 이동하여 gem을 설치하고 RSpec을 통해 테스트를 실행합니다: GDK에 대해 SSH가 필요한 테스트를 실행하려면 GDK 설정을 수정해야 합니다.
GDK 환경에서 실행#
먼저 로컬 GitLab 개발 환경으로 GDK를 설치하는 지침을 따르세요.
그런 다음 QA 폴더로 이동하여 gem을 설치하고 RSpec을 통해 테스트를 실행합니다:
cd gitlab-development-kit/gitlab/qa
bundle install
bundle exec rspec <path/to/spec.rb>
추가 사항:
-
GDK에 대해 SSH가 필요한 테스트를 실행하려면 GDK 설정을 수정해야 합니다.
-
GDK 설치에서
root에 미리 설정된 비밀번호를 사용할 수 있습니다(GDK 도움말 참조). 기본값에서root비밀번호를 변경한 경우, 해당 비밀번호를GITLAB_ADMIN_PASSWORD로 내보내세요. -
기본적으로 테스트는 헤드리스 브라우저에서 실행됩니다. 테스트 실행을 모니터링하려면
WEBDRIVER_HEADLESS=false를 내보낼 수 있습니다. -
:orchestrated태그가 붙은 테스트는 특별한 설정이 필요합니다(예: 사용자 지정 GitLab 구성 또는 LDAP 같은 추가 서비스). 모든 오케스트레이션 테스트는gitlab-qa를 통해 실행할 수 있습니다. GDK 또는 다른 로컬 GitLab 인스턴스에서 일부 테스트를 실행하기 위한 설정 지침도 있습니다.
기본적으로 GitLab 인스턴스의 URL은 config/gitlab.yml 구성 파일에 따라 설정됩니다. 이를 재정의하고 다른 URL을 사용하려면 GitLab 주소 재정의 섹션을 참조하세요.
원격 개발#
VSCode 사용자의 경우, .devcontainer는 Docker 컨테이너 내부에서 E2E 테스트를 개발하기 위한 구성을 정의하며, 기본적으로 gitlab-qa gem이 시작한 환경과 동일한 네트워크에 연결됩니다. dev containers 사용 방법에 대한 자세한 내용은 튜토리얼을 참조하세요.
이 방법은 특정 Omnibus 구성이 있는 GitLab 인스턴스가 필요한 E2E 테스트를 개발할 때 유용합니다. 일반적인 워크플로 예시:
-
테스트를 실행하지 않고 특정 구성으로
GitLabOmnibus 인스턴스를 시작합니다. 예:gitlab-qa Test::Integration::Import EE --no-tests. 사용 가능한 구성은 문서를 참조하세요. -
VSCode환경에서 dev container를 시작합니다. -
컨테이너 내에서 테스트를 개발하고 실행합니다. 이때 테스트는 시작된 GitLab 인스턴스에 대해 자동으로 실행됩니다.
일반적인 GDK 설치를 위한 범용 명령#
GDK를 기본값이 아닌 특정 IP 주소와 포트로 실행하도록 구성하고 테스트 프레임워크에서 디버그 로그를 표시하려면 다음과 같은 명령 예시를 사용할 수 있습니다:
QA_LOG_LEVEL=DEBUG \
QA_GITLAB_URL="http://{GDK IP ADDRESS}:{GDK PORT}" \
bundle exec rspec <path/to/spec.rb>
변수에 대한 설명은 아래의 추가 예시 및 지원되는 환경 변수 목록을 참조하세요.
Docker에서 GitLab 실행#
GitLab은 Docker에 설치할 수 있습니다.
아래 명령이나 GitLab 인스턴스 구성에 조정이 필요한 상황은 위 섹션을 참조하세요. 설치 문서에서 자세한 내용을 확인할 수 있습니다.
Unix 계열 운영 체제에서#
http://127.0.0.1에서 방문할 수 있는 인스턴스를 시작하려면 다음 명령을 사용하세요:
docker run \
--hostname 127.0.0.1 \
--publish 80:80 --publish 22:22 \
--name gitlab \
--shm-size 256m \
--env GITLAB_OMNIBUS_CONFIG="gitlab_rails['initial_root_password']='5iveL\!fe';" \
gitlab/gitlab-ee:nightly
Apple Silicon이 탑재된 Mac을 사용하는 경우, --platform=linux/amd64도 추가해야 합니다.
- GitLab이 실행되어
http://127.0.0.1에서 접근 가능해지면, 다른 셸 탭에서 컴퓨터에 체크아웃된 GitLab 리포지터리의qa디렉터리로 이동하여 다음 명령을 실행하세요.
bundle install
export WEBDRIVER_HEADLESS=false
export GITLAB_ADMIN_PASSWORD=5iveL\!fe
export QA_GITLAB_URL="http://127.0.0.1"
- 특별한 설정이 필요하지 않은 대부분의 테스트는 다음 명령으로 실행할 수 있습니다. 이 예시에서는
log_in_spec.rb를 실행합니다.
bundle exec rspec ./qa/specs/features/browser_ui/1_manage/login/log_in_spec.rb
Windows PC에서#
- 아직 설치되어 있지 않다면 다음을 설치하세요:
-
Ruby. 설치할 Ruby의 정확한 버전은
.ruby-version파일을 참조하세요. -
http://127.0.0.1에서 방문할 수 있는 인스턴스를 시작하려면 다음 명령을 사용하세요. 관리자 권한을 요청할 수 있습니다:
docker run --hostname 127.0.0.1 --publish 80:80 --publish 22:22 --name gitlab --shm-size 256m --env GITLAB_OMNIBUS_CONFIG="gitlab_rails['initial_root_password']='5iveL\!fe';" gitlab/gitlab-ee:nightly
- GitLab이 실행되어
http://127.0.0.1에서 접근 가능해지면, 다른 명령 프롬프트 창에서 컴퓨터에 체크아웃된 GitLab 리포지터리의qa디렉터리로 이동하여 다음 명령을 실행하세요.
bundle install
set WEBDRIVER_HEADLESS=false
set GITLAB_ADMIN_PASSWORD=5iveL\!fe
set QA_GITLAB_URL=http://127.0.0.1
- 특별한 설정이 필요하지 않은 대부분의 테스트는 다음 명령으로 실행할 수 있습니다. 이 예시에서는
log_in_spec.rb를 실행합니다.
bundle exec rspec .\qa\specs\features\browser_ui\1_manage\login\log_in_spec.rb
특정 유형의 테스트#
다른 매개변수로 실행할 특정 테스트를 지정할 수 있습니다. 예를 들어 리포지터리 관련 spec을 실행하려면 다음을 실행하세요:
bundle exec rspec qa/specs/features/browser_ui/3_create/repository
EE 테스트#
EE 테스트를 실행할 때는 라이선스가 필요합니다. GitLab 엔지니어는 라이선스를 신청할 수 있습니다.
라이선스 파일을 확보한 후 환경 변수로 내보내면 프레임워크가 이를 사용할 수 있습니다. 이렇게 하면 라이선스가 자동으로 설치됩니다.
export QA_EE_LICENSE=$(cat /path/to/gitlab_license)
격리된 테스트#
테스트에 :quarantine 메타데이터를 할당하여 격리할 수 있습니다. 이는 --tag quarantine으로 실행하지 않는 한 해당 테스트가 건너뛰어진다는 의미입니다. 이 기능은 수정이 진행 중인 동안 실패가 예상되는 테스트에 사용할 수 있습니다(skip 또는 pending 사용 방법과 유사).
bundle exec rspec --tag quarantine
또는 GLCI_DISABLE_QUARANTINE 변수를 사용할 수 있습니다.
GLCI_DISABLE_QUARANTINE=true bundle exec bin/qa Test::Instance::All http://localhost:3000
사용자 지정 bin/qa 테스트 러너#
bin/qa는 일부 테스트에서 필요한 복잡한 설정을 추상화하는 추가적인 사용자 지정 래퍼 스크립트입니다. 이 옵션은 명령에 테스트 시나리오와 테스트 인스턴스의 GitLab 주소를 지정해야 합니다. 예를 들어 Instance 시나리오 테스트를 실행하려면 다음 명령을 사용할 수 있습니다:
bundle exec bin/qa Test::Instance::All http://localhost:3000
기능 플래그#
명령줄 옵션 --enable-feature FEATURE_FLAG 또는 --disable-feature FEATURE_FLAG를 사용하여 기능 플래그가 활성화 또는 비활성화된 상태로 테스트를 실행할 수 있습니다.
예를 들어, Gitaly 요청 제한을 적용하는 기능 플래그를 활성화하려면 다음 명령을 사용합니다:
bundle exec bin/qa Test::Instance::All http://localhost:3000 --enable-feature gitaly_enforce_requests_limits
이 명령은 QA 프레임워크에 gitaly_enforce_requests_limits 기능 플래그를 활성화(API를 통해)하고, Test::Instance::All 시나리오의 모든 테스트를 실행한 후 기능 플래그를 다시 비활성화하도록 지시합니다.
마찬가지로, Gitaly 요청 제한을 적용하는 기능 플래그를 비활성화하려면 다음 명령을 사용합니다:
bundle exec bin/qa Test::Instance::All http://localhost:3000 --disable-feature gitaly_enforce_requests_limits
이 명령은 QA 프레임워크에 gitaly_enforce_requests_limits 기능 플래그가 아직 비활성화되지 않은 경우 비활성화(API를 통해)하고, Test::Instance::All 시나리오의 모든 테스트를 실행한 후 이전에 활성화되어 있었다면 기능 플래그를 다시 활성화하도록 지시합니다.
테스트 자체에서 기능 플래그를 전환할 수도 있습니다.
--enable-feature와 --disable-feature는 rspec 옵션이 아니라 QA 프레임워크 옵션이므로 -- 구분자는 사용하지 않습니다.
테스트 구성#
GitLab 주소 재정의#
GDK에 대해 테스트를 실행할 때 기본 주소는 http://127.0.0.1:3000입니다. 이 값은 환경 변수 QA_GITLAB_URL을 제공하여 재정의할 수 있습니다:
QA_GITLAB_URL=https://gdk.test:3000 bundle exec rspec
인증된 사용자 재정의#
기본적으로 GDK가 시드한 root 사용자가 모든 테스트에서 각 테스트마다 새로운 고유한 테스트 사용자를 생성하는 데 사용됩니다.
테스트는 또한 시드된 관리자 사용자의 개인 액세스 토큰을 사용합니다.
다른 관리자 자격 증명으로 인증해야 하는 경우 GITLAB_ADMIN_USERNAME, GITLAB_ADMIN_PASSWORD 환경 변수를 제공하고, 관리자 사용자에게 생성된 토큰이 있는 경우 추가로 GITLAB_QA_ADMIN_ACCESS_TOKEN도 설정할 수 있습니다:
GITLAB_ADMIN_USERNAME=admin GITLAB_ADMIN_PASSWORD=myadminpassword GITLAB_QA_ADMIN_ACCESS_TOKEN=token bundle exec rspec
모든 지원되는 환경 변수는 여기에서 확인할 수 있습니다.
추가 쿠키 전송#
환경 변수 QA_COOKIES를 설정하면 모든 요청에 추가 쿠키를 전송할 수 있습니다. 이는 gitlab.com에서 카나리 플릿으로 트래픽을 보내기 위해 필요합니다. 이를 위해 QA_COOKIES="gitlab_canary=true"를 설정하세요.
여러 쿠키를 설정하려면 ; 문자로 구분합니다. 예: QA_COOKIES="cookie1=value;cookie2=value2"
헤드리스 브라우저#
기본적으로 테스트는 헤드리스 브라우저를 사용합니다. 이를 재정의하려면 WEBDRIVER_HEADLESS를 false로 설정해야 합니다:
WEBDRIVER_HEADLESS=false bundle exec rspec
로그 레벨#
기본적으로 테스트는 info 로그 레벨을 사용합니다. 테스트의 로그 레벨을 변경하려면 환경 변수 QA_LOG_LEVEL을 설정할 수 있습니다:
QA_LOG_LEVEL=debug bundle exec rspec