실행 컨텍스트 선택

일부 테스트는 특정 환경에서 또는 특정 파이프라인이나 작업에서 실행되도록 설계되었습니다. onlyexcept 메타데이터를 사용하여 테스트 실행 컨텍스트를 지정할 수 있습니다.

사용 가능한 스위치

스위치 기능 유형
tld 최상위 도메인 매처 설정 문자열
subdomain 서브도메인 매처 설정 배열 또는 문자열
도메인 도메인 매처 설정 문자열
production 프로덕션 환경 매치 정적
파이프라인 파이프라인 매치 배열 또는 정적
작업 작업 매치 배열 또는 정적
caution
:production{ <switch>: 'value' }를 동시에 지정할 수 없습니다. 이러한 옵션은 상호배타적입니다. 프로덕션을 지정하려면 tlddomain을 독립적으로 제어할 수 있습니다.

예시

Only

지정된 컨텍스트에서만 테스트를 실행합니다.

일치 항목:

  • 환경에 대한 정규식.
  • 파이프라인에 대한 문자열 매치.
  • 작업에 대한 정규식 또는 문자열 매치
  • 일반 조건에 대한 람다 또는 thruthy/falsey 값
테스트 실행 컨텍스트 일치 항목
gitlab.com only: :production gitlab.com
staging.gitlab.com only: { subdomain: :staging } (staging).+.com
gitlab.com and staging.gitlab.com only: { subdomain: /(staging.)?/, domain: 'gitlab' } (staging.)?gitlab.com
dev.gitlab.org only: { tld: '.org', domain: 'gitlab', subdomain: 'dev' } (dev).gitlab.org
staging.gitlab.com and domain.gitlab.com only: { subdomain: %i[staging domain] } (staging\|domain).+.com
nightly 파이프라인 only: { pipeline: :nightly } “nightly scheduled pipeline”
nightlycanary 파이프라인 only: { pipeline: [:nightly, :canary] } “nightly scheduled pipeline”“canary”
ee:instance 작업 only: { job: 'ee:instance' } 모든 파이프라인에서 ee:instance 작업
quarantine 작업 only: { job: '.*quarantine' } 모든 파이프라인에서 quarantine으로 끝나는 모든 작업
로컬 개발 환경 only: :local Runtime::Env.running_in_ci?이 false인 모든 환경
조건을 평가한 값이 thruthy인 경우 실행 only: { condition: -> { ENV['TEST_ENV'] == 'true' } } TEST_ENV가 true로 설정된 모든 실행
RSpec.describe '영역' do
  it '모든 환경 또는 파이프라인에서 실행됩니다' do; end
  it '프로덕션 환경에서만 실행', only: :production do; end
  
  it '스테이징 환경에서만 실행', only: { subdomain: :staging } do; end
  
  it 'dev 환경에서 실행', only: { tld: '.org', domain: 'gitlab', subdomain: 'dev' } do; end
  
  it '프로덕션 및 스테이징 환경에서 실행', only: { subdomain: /(staging.)?/, domain: 'gitlab' } {}
  
  it '밤간 파이프라인에서만 실행', only: { pipeline: :nightly } do; end
  
  it '밤간 및 캐너리 파이프라인에서 실행', only: { pipeline: [:nightly, :canary] } do; end
  
  it '조건에 일치하는 특정 환경에서 실행', only: { condition: -> { ENV['TEST_ENV'] == 'true' } } do; end
end

Except

지정된 것을 제외하고 일반적인 컨텍스트에서 테스트를 실행합니다.

일치 항목:

  • 환경에 대한 정규식.
  • 파이프라인에 대한 문자열 매치.
  • 작업에 대한 정규식 또는 문자열 매치.
  • 일반 조건에 대한 람다 또는 thruthy/falsey 값
테스트 실행 컨텍스트 일치 항목
gitlab.com except: :production gitlab.com
staging.gitlab.com except: { subdomain: :staging } (staging).+.com
gitlab.com and staging.gitlab.com except: { subdomain: /(staging.)?/, domain: 'gitlab' } (staging.)?gitlab.com
dev.gitlab.org except: { tld: '.org', domain: 'gitlab', subdomain: 'dev' } (dev).gitlab.org
staging.gitlab.com and domain.gitlab.com except: { subdomain: %i[staging domain] } (staging\|domain).+.com
nightly 파이프라인 only: { pipeline: :nightly } “nightly scheduled pipeline”
nightlycanary 파이프라인 only: { pipeline: [:nightly, :canary] } “nightly scheduled pipeline”“canary”
ee:instance 작업 except: { job: 'ee:instance' } 모든 파이프라인에서 ee:instance 작업
quarantine 작업 except: { job: '.*quarantine' } 모든 파이프라인에서 quarantine으로 끝나는 모든 작업
조건을 평가한 값이 thruthy인 경우 실행하지 않음 except: { condition: -> { ENV['TEST_ENV'] == 'true' } } TEST_ENV가 true로 설정되지 않은 모든 실행
RSpec.describe '영역' do
  it '프로덕션 환경을 제외한 모든 실행 컨텍스트에서 실행됩니다', except: :production do; end
  
  it '스테이징 환경을 제외한 모든 실행 컨텍스트에서 실행됩니다', except: { subdomain: :staging } do; end
  
  it '밤간 파이프라인을 제외한 모든 실행 컨텍스트에서 실행됩니다', except: { pipeline: :nightly } do; end
  
  it 'ee:instance 작업을 제외한 모든 실행 컨텍스트에서 실행됩니다', except: { job: 'ee:instance' } do; end
  
  it '조건에 일치하지 않는 특정 환경에서 실행됩니다', except: { condition: -> { ENV['TEST_ENV'] == 'true' } } do; end
end

사용 참고사항

테스트에 before 또는 after 블록이 있는 경우 외부 RSpec.describe 블록에 only 또는 except 메타데이터를 추가해야 합니다.

로컬 GitLab 인스턴스에서 only로 태그된 테스트를 실행하려면 다음 중 하나를 수행할 수 있습니다:

  • CI_PROJECT_NAME 또는 CI_JOB_NAME 환경 변수가 설정되어 있지 않도록 확인하십시오.
  • 메타데이터가 only: { pipeline: :nightly }이면 CI_PROJECT_NAME=nightly를 설정하십시오. 메타데이터가 only: { job: 'ee:instance' }인 경우 CI_JOB_NAME=ee:instance를 설정하십시오.
  • 임시로 메타데이터를 제거하십시오.

로컬에서 except로 태그된 테스트를 실행하려면 다음 중 하나를 수행할 수 있습니다:

  • CI_PROJECT_NAME 또는 CI_JOB_NAME 환경 변수가 설정되어 있지 않도록 확인하십시오.
  • 메타데이터를 임시로 제거하십시오.

특정 환경에 대한 테스트 격리

특정 환경에서만 테스트를 실행해야 한다는 것을 지정하는 것과 마찬가지로, 특정 환경에서만 실행될 때에만 해당 테스트를 격리할 수 있습니다. 구문은 정확히 같지만, only: { ... } 해시가 quarantine: { ... } 해시에 중첩되어 있습니다.

예를 들어, quarantine: { only: { subdomain: :staging } }staging에서 실행될 때에만 해당 테스트를 격리합니다.

테스트를 로컬에서 실행할 때 유용한 DISABLE_QUARANTINE 환경 변수를 사용하여 격리 기능을 명시적으로 비활성화할 수 있습니다.