테스트 스위트 구성하기
프로젝트가 성장함에 따라 필연적으로 더 많은 통합 테스트가 추가됩니다. 이는 빌드 시간을 증가시키고 생산성을 저하시킵니다.
이를 방지하기 위해, 테스트를 병렬로 실행해야 합니다. WebdriverIO는 이미 각 스펙(또는 Cucumber에서의 feature file)을 단일 세션 내에서 병렬로 테스트합니다. 일반적으로 스펙 파일당 하나의 기능만 테스트하려고 노력하세요. 한 파일에 너무 많거나 너무 적은 테스트를 넣지 마세요. (그러나 여기에는 황금 규칙이 없습니다.)
테스트가 여러 스펙 파일을 가지게 되면, 테스트를 동시에 실행하기 시작해야 합니다. 이렇게 하려면 구성 파일에서 maxInstances 속성을 조정하세요. WebdriverIO를 사용하면 최대 동시성으로 테스트를 실행할 수 있습니다. 즉, 파일과 테스트 수에 관계없이 모두 병렬로 실행될 수 있습니다. (이는 여전히 컴퓨터의 CPU, 동시성 제한 등과 같은 특정 제한에 따라 달라집니다.)
예를 들어, 3개의 다른 기능(Chrome, Firefox 및 Safari)이 있고
maxInstances를1로 설정했다고 가정해 보겠습니다. WDIO 테스트 러너는 3개의 프로세스를 생성합니다. 따라서 10개의 스펙 파일이 있고maxInstances를10으로 설정하면, 모든 스펙 파일이 동시에 테스트되고 30개의 프로세스가 생성됩니다.
모든 브라우저에 대한 속성을 설정하기 위해 maxInstances 속성을 전역적으로 정의할 수 있습니다.
자체 WebDriver 그리드를 실행하는 경우, 한 브라우저가 다른 브라우저보다 더 많은 용량을 가질 수 있습니다. 이 경우, 기능 객체에서 maxInstances를 _제한_할 수 있습니다:
// wdio.conf.js
export const config = {
// ...
// set maxInstance for all browser
maxInstances: 10,
// ...
capabilities: [{
browserName: 'firefox'
}, {
// maxInstances can get overwritten per capability. So if you have an in-house WebDriver
// grid with only 5 firefox instance available you can make sure that not more than
// 5 instance gets started at a time.
browserName: 'chrome'
}],
// ...
}
메인 구성 파일에서 상속하기
여러 환경(예: 개발 및 통합)에서 테스트 스위트를 실행하는 경우, 여러 구성 파일을 사용하여 관리하기 쉽게 만드는 것이 도움이 될 수 있습니다.
페이지 객체 개념과 유사하게, 먼저 필요한 것은 메인 구성 파일입니다. 여기에는 환경 간에 공유하는 모든 구성이 포함되어 있습니다.
그런 다음 각 환경에 대한 다른 구성 파일을 만들고, 환경별 구성으로 메인 구성을 보완하세요:
// wdio.dev.config.js
import { deepmerge } from 'deepmerge-ts'
import wdioConf from './wdio.conf.js'
// have main config file as default but overwrite environment specific information
export const config = deepmerge(wdioConf.config, {
capabilities: [
// more caps defined here
// ...
],
// run tests on sauce instead locally
user: process.env.SAUCE_USERNAME,
key: process.env.SAUCE_ACCESS_KEY,
services: ['sauce']
}, { clone: false })
// add an additional reporter
config.reporters.push('allure')
테스트 스펙을 스위트로 그룹화하기
테스트 스펙을 스위트로 그룹화하고 모든 테스트 대신 특정 스위트만 실행할 수 있습니다.
먼저 WDIO 구성에서 스위트를 정의하세요:
// wdio.conf.js
export const config = {
// define all tests
specs: ['./test/specs/**/*.spec.js'],
// ...
// define specific suites
suites: {
login: [
'./test/specs/login.success.spec.js',
'./test/specs/login.failure.spec.js'
],
otherFeature: [
// ...
]
},
// ...
}
이제 단일 스위트만 실행하려면 CLI 인수로 스위트 이름을 전달할 수 있습니다:
wdio wdio.conf.js --suite login
또는 한 번에 여러 스위트를 실행할 수 있습니다:
wdio wdio.conf.js --suite login --suite otherFeature