Условный пропуск тестов в Cypress

Перевод статьи «Skip test conditionally with Cypress».

В этой статье я хотел бы показать вам различные стратегии и инструменты, позволяющие пропускать тесты или запускать их по условию.

Содержание

Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ

.skip и .only

Самый простой способ пропустить или отфильтровать тест – применить функции .only и .skip. Их можно использовать с несколькими тестами в одной спецификации, чтобы запускать только те тесты, которые вам нужны.

Этот код запустит только первый и третий тесты:

it.only('test #1', () => {
  // ...
})
it('test #2', () => {
  // ...
})
it.only('test #3', () => {
  // ...
})

А тут будет выполняться только первый тест:

it('test #1', () => {
  // ...
})
it.skip('test #2', () => {
  // ...
})
it.skip('test #2', () => {
  // ...
})

Эти функции работают независимо от того, где используются – в GUI или в CI. Кстати, чтобы случайно не оставить .only в тесте, обязательно установите precommit hook, который предотвратит это, или просто установите этот хороший плагин. 

Вы также можете использовать эти ключевые слова для блоков describe. В этом случае тесты будут выглядеть следующим образом:

describe.only('suite #1', () => {

  it('test #1', () => {
    // this test will run
  });

})

describe('suite #2', () => {

  it('test #2', () => {
    // this test will not run
  })

})

Конфигурационный файл

Вы можете указать, какие тесты следует запускать или пропускать, в файле cypress.json. При этом можно использовать имена тестов или применить minimatch для выбора тестов.

Допустим, у вас есть три теста: test1.ts, test2.ts и test.smoke.ts.

Чтобы просто запустить test1, нужно указать его в файле cypress.json:

{
  "testFiles": "test1.ts"
}

Если в папке integration используются вложенные папки, то можно выбрать все тесты с одинаковыми именами внутри всех этих папок, указав  **/test.ts в качестве значения.

Более того, если вы используете соглашение об именовании для ваших smoke-тестов, например test.smoke.ts, вы можете отфильтровать их, передав *.smoke.ts в testFiles. Так, например, эта конфигурация будет запускать только наш файл test.smoke.ts:

{
  "testFiles": "*.smoke.ts"
}

Все эти принципы применимы и к пропуску тестов. Для игнорирования тестовых файлов используйте ignoreTestFiles. В качестве атрибутов можно передавать массивы. Они могут содержать как имя теста, так и minimatch, поэтому можно делать такие вещи:

{
  "ignoreTestFiles": ["test1.ts", "*.smoke.ts"]
}

При такой конфигурации будет выполняться только наш файл test2.ts. Чтобы лучше понять, как работает minimatch, можно поэкспериментировать на globster.xyz или на этом небольшом сайте.

Тестовая конфигурация

Если вы хотите добавить в тесты более сложные условия, можно использовать конфигурацию spec. Например, можно настроить тест на выполнение только в определенном браузере.

it('will run only on chrome', { browser: 'chrome' }, () => {
    // ...
  });

it('will run only on firefox', { browser: 'firefox' }, () => {
  // ...
});

Эта конфигурация тестов позволяет сделать гораздо больше, но что касается пропуска и фильтрации тестов, то это все. Впрочем, все тесты Cypress написаны на JavaScript. Ничто не мешает вам написать условие прямо в файле спецификации:

if (Cypress.config('viewportWidth') > 350) {

  it('does not run on mobile viewports', () => {
    // ...
  });

}

Этот тест будет выполняться только в том случае, если установленное окно просмотра больше 350 пикселей.

Плагин

Существует очень хороший плагин который позволяет пропускать тесты на основе различных условий. С его помощью можно запускать определенные тесты только на Mac или только на Windows, а также пропускать их по этим условиям. Выглядит это примерно так:

it('runs only on mac', () => {
  cy.onlyOn('mac')
  // ...
})

На странице с описанием (readme) есть ещё несколько крутых примеров – непременно посмотрите их. Что ещё круче, с помощью этого плагина вы можете устанавливать любое условие, которое вам нравится, так что наш пример, ориентированный только на мобильные устройства, будет выглядеть так:

it('does not run on mobile viewports', () => {
  cy.skipOn(Cypress.config('viewportWidth') < 350);
  // ...
})

Использование CLI

Аналогично нашей конфигурации cypress.json, мы можем передавать CLI-аргументы для запуска только тех тестов, которые нам нужны. Для запуска только smoke-тестов мы выполним:

npx cypress run --spec 'cypress/integration/*.smoke.ts'

Чтобы запустить все тесты, кроме smoke, выполним такую команду:

npx cypress run --spec 'cypress/integration/*[!.smoke].ts'

Ваша собственная логика

Есть множество вариантов, которые вы можете использовать. Я описал лишь некоторые из них. Есть также опция для выполнения поиска всех ваших тестов через плагин. Выбирайте то, что вам больше нравится!

🔥 Какой была ваша первая зарплата в QA и как вы искали первую работу? 

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Читать в телеграм

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *