InfoGrab DocsInfoGrab Docs

테스트 실행

요약

먼저 로컬 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 테스트를 개발할 때 유용합니다. 일반적인 워크플로 예시:

  • 테스트를 실행하지 않고 특정 구성으로 GitLab Omnibus 인스턴스를 시작합니다. 예: 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에서#

  • 아직 설치되어 있지 않다면 다음을 설치하세요:

Google Chrome

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-featurerspec 옵션이 아니라 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_HEADLESSfalse로 설정해야 합니다:

WEBDRIVER_HEADLESS=false bundle exec rspec

로그 레벨#

기본적으로 테스트는 info 로그 레벨을 사용합니다. 테스트의 로그 레벨을 변경하려면 환경 변수 QA_LOG_LEVEL을 설정할 수 있습니다:

QA_LOG_LEVEL=debug bundle exec rspec

테스트 실행

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 테스트를 개발할 때 유용합니다. 일반적인 워크플로 예시:

  • 테스트를 실행하지 않고 특정 구성으로 GitLab Omnibus 인스턴스를 시작합니다. 예: 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에서#

  • 아직 설치되어 있지 않다면 다음을 설치하세요:

Google Chrome

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-featurerspec 옵션이 아니라 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_HEADLESSfalse로 설정해야 합니다:

WEBDRIVER_HEADLESS=false bundle exec rspec

로그 레벨#

기본적으로 테스트는 info 로그 레벨을 사용합니다. 테스트의 로그 레벨을 변경하려면 환경 변수 QA_LOG_LEVEL을 설정할 수 있습니다:

QA_LOG_LEVEL=debug bundle exec rspec