Организация тестовых наборов
С ростом проектов количество интеграционных тестов неизбежно увеличивается. Это увеличивает время сборки и замедляет продуктивность.
Чтобы предотвратить это, вы должны запускать тесты параллельно. WebdriverIO уже тестирует каждую спецификацию (или feature file в Cucumber) параллельно в рамках одной сессии. В общем, старайтесь тестировать только одну функцию в каждом файле спецификации. Не делайте слишком много или слишком мало тестов в одном файле. (Однако здесь нет золотого правила.)
Как только у вас появится несколько файлов спецификаций, вы должны начать запускать тесты параллельно. Для этого настройте свойство maxInstances
в вашем конфигурационном файле. WebdriverIO позволяет запускать тесты с максимальным параллелизмом — это означает, что независимо от количества файлов и тестов, все они могут выполняться параллельно. (Это все еще подчиняется определенным ограничениям, таким как CPU вашего компьютера, ограничения параллелизма и т.д.)
Допустим, у вас есть 3 разных capabilities (Chrome, Firefox и Safari), и вы установили
maxInstances
в1
. Тестовый запускатель WDIO создаст 3 процесса. Поэтому, если у вас 10 файлов спецификаций и вы установитеmaxInstances
в10
, все файлы спецификаций будут тестироваться одновременно, и будет создано 30 процессов.
Вы можете определить свойство maxInstances
глобально, чтобы установить атрибут для всех браузеров.
Если вы используете собственную сетку WebDriver, у вас может быть (например) больше мощностей для одного браузера, чем для другого. В этом случае вы можете ограничить maxInstances
в вашем объекте capability:
// 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'
}],
// ...
}
Наследование от основного конфигурационного файла
Если вы запускаете свой набор тестов в нескольких средах (например, dev и integration), может быть полезно использовать несколько конфигурационных файлов для удобства управления.
Аналогично концепции объектов страниц, сначала вам понадобится основной конфигурационный файл. Он содержит все конфигурации, которые вы используете во всех средах.
Затем создайте другой конфигурационный файл для каждой среды и дополните основную конфигурацию специфичными для среды:
// 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
Группировка спецификаций тестов для последовательного выполнения
Как описано выше, существуют преимущества в параллельном запуске тестов. Однако существуют случаи, когда было бы полезно сгруппирова ть тесты для последовательного выполнения в одном экземпляре. Примеры этого — в основном случаи, когда существуют высокие затраты на настройку, например, транспиляция кода или подготовка облачных экземпляров, но есть также продвинутые модели использования, которые выигрывают от этой возможности.
Чтобы сгруппировать тесты для запуска в одном экземпляре, определите их как массив в определении specs.
"specs": [
[
"./test/specs/test_login.js",
"./test/specs/test_product_order.js",
"./test/specs/test_checkout.js"
],
"./test/specs/test_b*.js",
],
В примере выше тесты 'test_login.js', 'test_product_order.js' и 'test_checkout.js' будут запущены последовательно в одном экземпляре, а каждый из тестов "test_b*" будет выполняться параллельно в отдельных экземплярах.
Также возможно группировать спецификации, определенные в наборах, поэтому теперь вы также можете определять наборы следующим образом:
"suites": {
end2end: [
[
"./test/specs/test_login.js",
"./test/specs/test_product_order.js",
"./test/specs/test_checkout.js"
]
],
allb: ["./test/specs/test_b*.js"]
},
и в этом случае все тесты набора "end2end" будут выполнены в одном экземпляре.
При последовательном запуске тестов с использованием шаблона они будут выполняться в алфавитном порядке
"suites": {
end2end: ["./test/specs/test_*.js"]
},
Это запустит файлы, соответствующие вышеуказанному шаблону, в следующем порядке:
[
"./test/specs/test_checkout.js",
"./test/specs/test_login.js",
"./test/specs/test_product_order.js"
]
Запуск выбранных тестов
В некоторых случаях вы можете захотеть выполнить только один тест (или подмножество тестов) из ваших наборов.
С помощью параметра --spec
вы можете указать, какой набор (Mocha, Jasmine) или функционал (Cucumber) следует запустить. Путь разрешается относительно вашего текущего рабочего каталога.
Например, чтобы запустить только ваш тест входа:
wdio wdio.conf.js --spec ./test/specs/e2e/login.js
Или запустить несколько спецификаций одновременно:
wdio wdio.conf.js --spec ./test/specs/signup.js --spec ./test/specs/forgot-password.js
Если значение --spec
не указывает на конкретный файл спецификации, оно используется для фильтрации имен файлов спецификаций, определенных в вашей конфигурации.
Чтобы запустить все спецификации со словом "dialog" в именах файлов спецификаций, вы можете использовать:
wdio wdio.conf.js --spec dialog
Обратите внимание, что каждый тестовый файл работает в отдельном процессе тестового запускателя. Поскольку мы не сканируем файлы заранее (см. следующий раздел для получения информации о передаче имен файлов в wdio
), вы не можете использовать (например) describe.only
в верхней части вашего файла спецификации, чтобы проинструктировать Mocha запустить только этот набор.
Эта функция поможет вам достичь той же цели.
Когда предоставляется опция --spec
, она переопределит любые шаблоны, определенные параметром specs
на уровне конфигурации или capability.
Исключение выбранных тестов
При необходимости, если вам нужно исключить определенные файлы спецификаций из запуска, вы можете использовать параметр --exclude
(Mocha, Jasmine) или функционал (Cucumber).
Например, чтобы исключить ваш тест входа из тестового запуска:
wdio wdio.conf.js --exclude ./test/specs/e2e/login.js
Или исключить несколько файлов спецификаций:
wdio wdio.conf.js --exclude ./test/specs/signup.js --exclude ./test/specs/forgot-password.js
Или исключить файл спецификации при фильтрации с использованием набора:
wdio wdio.conf.js --suite login --exclude ./test/specs/e2e/login.js
Если значение --exclude
не указывает на конкретный файл спецификации, оно используется для фильтрации имен файлов спецификаций, определенных в вашей конфигурации.
Чтобы исключить все спецификации со словом "dialog" в именах файлов спецификаций, вы можете использовать:
wdio wdio.conf.js --exclude dialog
Когда предоставляется опция --exclude
, она переопределит любые шаблоны, определенные параметром exclude
на уровне конфигурации или capability.
Запуск наборов и спецификаций тестов
Запустите весь набор вместе с отдельными спецификациями.
wdio wdio.conf.js --suite login --spec ./test/specs/signup.js
Запуск нескольких конкретных спецификаций тестов
Иногда необходимо—в контексте непрерывной интеграции и в других случаях—указать несколько наборов спецификаций для запуска. Утилита командной строки wdio
от WebdriverIO принимает переданные через пайп имена файлов (от find
, grep
или других).
Имена файлов, переданные через пайп, переопределяют список глобов или имен файлов, указанных в списке spec
конфигурации.
grep -r -l --include "*.js" "myText" | wdio wdio.conf.js
Примечание: Это не переопределит флаг --spec
для запуска одной спецификации.
Запуск конкретных тестов с MochaOpts
Вы также можете фильтровать конкретные suite|describe
и/или it|test
, которые вы хотите запустить, передав специфический для mocha аргумент: --mochaOpts.grep
в CLI wdio.
wdio wdio.conf.js --mochaOpts.grep myText
wdio wdio.conf.js --mochaOpts.grep "Text with spaces"
Примечание: Mocha будет фильтровать тесты после того, как тестовый запускатель WDIO создаст экземпляры, поэтому вы можете увидеть несколько создаваемых экземпляров, которые фактически не выполняются.
Исключение конкретных тестов с MochaOpts
Вы также можете фильтровать конкретные suite|describe
и/или it|test
, которые вы хотите исключить, передав специфический для mocha аргумент: --mochaOpts.invert
в CLI wdio. --mochaOpts.invert
выполняет противоположное тому, что делает --mochaOpts.grep
wdio wdio.conf.js --mochaOpts.grep "string|regex" --mochaOpts.invert
wdio wdio.conf.js --spec ./test/specs/e2e/login.js --mochaOpts.grep "string|regex" --mochaOpts.invert
Примечание: Mocha будет фильтровать тесты после того, как тестовый запускатель WDIO создаст экземпляры, поэтому вы можете увидеть несколько создаваемых экземпляров, которые фактически не выполняются.