Легкое сквозное тестирование с Cypress.io
Почему Кипарис?
Кипарис часто сравнивают с Селеном, однако у них есть принципиальные отличия в архитектуре. В конечном итоге Cypress - это инструмент для тестирования всего, что происходит в браузере. С его помощью вы можете писать все типы тестов: Сквозные тесты, Интеграционные тесты и Модульные тесты. Возможно, вы ищете способ легко и безболезненно писать сквозные тесты для реагирующего приложения (или, конечно, любого другого фреймворка). Возможно, вы, как и я, ищете альтернативу фреймворку Selenium. Этот короткий пример покажет вам, насколько легко создать свой первый сквозной тест с помощью Cypress.
Что такое сквозное тестирование?
Сквозное тестирование - это метод, который тестирует весь программный продукт от начала до конца, чтобы гарантировать, что поток приложения ведет себя так, как ожидалось. Он определяет зависимости системы и гарантирует, что все интегрированные компоненты работают вместе, как ожидалось.
Другими словами, цель сквозного тестирования - протестировать всю систему с точки зрения конечного пользователя. Вы моделируете поведение реального пользователя, чтобы проверить, как взаимодействуют все подсистемы. Например, взаимодействие со сторонними системами, интерфейсами, базами данных и т. Д.
Это именно тот тип теста, который находится на вершине пирамиды тестирования. Вы должны помнить, что на вершине пирамиды тесты становятся более сложными, медленными и более дорогими в обслуживании.
Создание тестового приложения
Предпосылки
Вам потребуется Node 8.16.0 или Node 10.16.0 или более поздняя версия на вашей локальной машине для разработки.
Создать приложение React
Используйте одну из этих команд, чтобы создать приложение для реагирования.
Команда npx:
npx create-react-app cypress-with-reactjs
команда пряжи:
yarn create react-app cypress-with-reactjs
команда npm:
npm init react-app cypress-with-reactjs
Вам не нужно устанавливать или настраивать такие инструменты, как Webpack или Babel. Они предварительно настроены и скрыты, поэтому вы можете сосредоточиться на коде.
Внутри только что созданного проекта вы можете запускать встроенные команды для запуска приложения:
yarn start
or
npm start
Запускает приложение в режиме разработки. Откройте http: // localhost: 3000, чтобы просмотреть его в браузере. Страница автоматически перезагрузится, если вы внесете изменения в код. Вы увидите ошибки сборки и предупреждения о ворсинах в консоли.
Установка Cypress
Давайте добавим Cypress.io в наш проект, используя одну из следующих команд
yarn add cypress --dev
or
npm install cypress --save-dev
Запускаем Cypress
Выполните одну из этих команд, чтобы открыть кипарис. Через мгновение запустится Cypress Test Runner.
yarn run cypress open
or
npx cypress open
После первого запуска Сypress создает новые папки в вашем проекте. Вы можете найти там много полезных примеров. Конечно, позже вы можете удалить ненужные файлы и папки. Теперь мы можем закрыть это всплывающее окно и перейти к Cypress Runner Ui.
Написание своего первого теста
Настройка Cypress
Чтобы упростить запуск Сypress, добавим script
к package.json
После добавления этого скрипта мы можем запустить Сypress следующим образом:
yarn cypress:open
or
npm run cypress:open
Когда проект добавляется в Cypress, в проекте создается файл cypress.json
. Этот файл используется для хранения любых предоставленных вами значений конфигурации. В нашем случае нам нужно только одно значение.
Подготовить проект
Давайте добавим простую логику, которую мы будем тестировать. А именно несколько полей для ввода и форма для отображения введенной информации. Мы также добавим bootstrap реакции, чтобы он выглядел достойно.
- Установите response-bootstrap:
yarn add react-bootstrap bootstrap
or
npm i react-bootstrap bootstrap
- Удалите все из
./src/App.js
- Вставьте следующий код в
./src/App.js
Первый тест
Создайте новый тестовый файл ./cypress/integration/form_spec.js
для проверки формы.
Напишем наш первый тест. Чтобы помочь вам правильно написать имена тестов, вы можете использовать шаблон «единица работы - сценарий / контекст - ожидаемое поведение»:
describe('[unit of work]', () => { it('should [expected behaviour] when [scenario/context]', () => { }); });
Вы можете найти полезные предложения о том, как назвать тесты в этом репозитории. Чтобы увидеть тест в действии, запустите приложение реакции:
yarn start
откройте другой терминал и запустите сценарий, который мы добавили в package.json
:
yarn cypress:open
После этого посмотрим, как заводится кипарисовик. В правом верхнем углу выберите браузер, в котором хотите протестировать. Затем выберите тест, который хотите запустить.
Вы можете увидеть результат теста с так называемым путешествием во времени.
Cypress автоматически возвращается во времени к моменту выполнения этой команды. Кроме того, поскольку cy.contains()
находит элементы DOM на странице, Cypress также выделяет элемент и прокручивает его в поле зрения (в верхнюю часть страницы).
Cypress запускает тесты в уникальном интерактивном средстве выполнения, которое позволяет вам видеть команды по мере их выполнения, а также просматривать тестируемое приложение.
Тестирование формы
Мы хотим смоделировать действия реального пользователя. Итак, давайте создадим тест, который вводит имя и адрес электронной почты в поля ввода.
Здесь мы видим несколько новых методов:
.get(selector)
- Получить один или несколько элементов DOM с помощью селектора или псевдонима.
.should(chainers, value)
- Создать утверждение. Утверждения автоматически повторяются, пока они не пройдут или не истечет время ожидания.
.type(text)
- Введите элемент DOM.
Как видите, мы создали пару локальных переменных. Этого можно избежать, используя приспособления. Для этого давайте добавим новый файл ./cypress/fixtures/form.fixtures.json
для приборов и фиктивные данные:
{ "email": "[email protected]", "name": "Max Mustermann" }
Чтобы использовать светильники, мы используем еще один новый метод:
.fixture(filePath)
- загрузить фиксированный набор данных, находящихся в файле.
Теперь наш тест выглядит следующим образом:
Подтвердить тестирование кнопки
Давайте создадим новый файл ./cypress/integration/submit.button_spec.js
для тестирования кнопки отправки. Давайте смоделируем поведение реального пользователя. Для этого введите имя и адрес электронной почты, а затем нажмите кнопку отправки. Здесь мы увидим пару новых методов:
.click()
- Щелкните элемент DOM.
.and()
- Завершить цепочку команд.
Одна интересная особенность Cypress заключается в том, что вы можете связывать вызовы методов.
И вот наш результат. Легкий лимонный сок.
Кипарисовик без головы
С помощью этой команды вы можете запускать автономные тесты.
cypress run
По умолчанию он будет запускать все тесты автоматически в браузере Electron. Однако можно передавать разные варианты.
cypress run --browser chrome
Я надеюсь, что на этом коротком примере вы убедитесь, что сквозное тестирование не должно быть трудным. Сypress делает процесс плавным и приятным. Конечно, есть огромное количество функций, о которых в статье не упоминается. Однако Сypress документация просто великолепна, в ней можно найти множество примеров и лучших практик.
Здесь вы можете найти исходный код примера.
«Качество никогда не бывает случайным; это всегда результат разумных усилий ». - Джон Раскин