실행 컨텍스트 선택
일부 테스트는 특정 환경에서 또는 특정 파이프라인이나 작업에서 실행되도록 설계되었습니다. only
및 except
메타데이터를 사용하여 테스트 실행 컨텍스트를 지정할 수 있습니다.
사용 가능한 스위치
스위치 | 기능 | 유형 |
---|---|---|
tld
| 최상위 도메인 매처 설정 | 문자열
|
subdomain
| 서브도메인 매처 설정 |
배열 또는 문자열
|
도메인
| 도메인 매처 설정 | 문자열
|
production
| 프로덕션 환경 매치 | 정적
|
파이프라인
| 파이프라인 매치 |
배열 또는 정적
|
작업
| 작업 매치 |
배열 또는 정적
|
:production
및 { <switch>: 'value' }
를 동시에 지정할 수 없습니다.
이러한 옵션은 상호배타적입니다. 프로덕션을 지정하려면 tld
및 domain
을 독립적으로 제어할 수 있습니다.예시
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” |
nightly 와 canary 파이프라인
| 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” |
nightly 와 canary 파이프라인
| 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
환경 변수를 사용하여 격리 기능을 명시적으로 비활성화할 수 있습니다.