E2E тест

Тест E2E (End to End) - обычная практика для проверки качества вашего программного обеспечения. Веб-разработчики хотят убедиться, что API-интерфейсы работают через пользовательский интерфейс, и проверить, работает ли пользовательский интерфейс должным образом после изменений API / пользовательского интерфейса. Также полезно убедиться, что ваш сервис / веб-сайт поддерживает несколько браузеров, особенно если вы ожидаете, что пользователи могут использовать действительно старые браузеры, такие как IE7, 8 или 9, даже несмотря на то, что Microsoft официально объявила о прекращении их поддержки (я вас слышу плач.)

Разработчики не могут винить пользователей за то, что они просматривают эти старые браузеры. Мой дед, например, долгое время пользовался очень старым компьютером. Я могу представить, что он почти не использовал свой компьютер, понятия не имел, как обновить ОС, и никогда не понимал необходимости такого изменения. Я знаю многих таких, как он, и считаю, что технологии не должны их ослаблять. Скорее, он должен помочь людям в этой ситуации: для них должны поддерживаться различные браузеры.

Селен

Для поддержки нескольких браузеров мы использовали Selenium, де-факто стандартную среду E2E, которая долгое время поддерживала жизнь веб-разработчиков (через стороннюю облачную службу). Через их API мы можем запускать тесты в разных типах браузеров на базе Selenium. Это полезно.

С другой стороны, по моему опыту, поддержка тестов Selenium занимает слишком много времени. Когда вы изменяете одну часть пользовательского интерфейса, вам нужно запустить тест Selenium, изменить код теста, если он не удался, а затем повторно запустить, если необходимо. Кроме того, запускать тест на Selenium неинтересно. На самом деле, это очень медленно, журнал ошибок не всегда легко читать (по крайней мере, для меня), и он не описывает, что вызывает ошибку - не совсем поддается отладке. Этот опыт делает людей слишком ленивыми, чтобы писать тесты E2E, хотя на самом деле у нас их не так много, как следовало бы.

В последнее время у нас возникли проблемы с тестами Selenium. Тесты, которые мы проводили каждый раз, внезапно начинали давать сбой. Мы не вносили никаких изменений в код, связанных с ошибками, и в журналах ошибок не было указано, что именно произошло. Мы обратились в центр поддержки стороннего поставщика услуг (который должен быть группой профессионалов по тестированию Selenium), однако они не смогли найти ничего из журналов тестирования. Нам нужно было найти альтернативный способ ... потом мы открыли для себя Cypress.

Кипарис

Cypress - это новый фреймворк для тестирования E2E с открытым исходным кодом. Он поддерживает только браузеры Chrome и позволяет писать тесты только на JavaScript. Хотя кажется, что он не так хорош, как Selenium, мы обнаружили множество преимуществ, в том числе:

  1. Быстро повторить. После запуска браузера тест проходит очень быстро.
  2. Легко писать. Синтаксис такой же, как и у других тестовых платформ JavaScript. Также у него есть полезные и простые в использовании API.
  3. Легко отлаживать. В нем есть функция «Путешествие во времени», поэтому вы можете вернуться к любой точке, увидеть состояние элемента и трассировку стека ошибок JS. Также доступны инструменты разработчика Chrome.
  4. Быстрая установка. Он выполняет тесты, генерирует видео и скриншоты практически без каких-либо настроек.

Это быстро, но иногда бывает слишком много. Это даже напоминает нам, насколько медленно наше приложение. Например, он щелкает элемент до того, как будет прикреплен обработчик событий. В качестве патча мы добавили атрибут к элементу при прикреплении события. Что-то вроде этого:

Затем мы заставили тест ждать, пока этот атрибут не будет выглядеть следующим образом:

Это не то, что мы открыли бы с Selenium. Возможно, у некоторых пользователей возникла бы проблема, например, щелкнув сразу после того, как кнопка была отрисована, и ничего не произошло. Это исправление - всего лишь патч, поэтому со временем мы сможем его ускорить.

Селен * И * Кипарис

Мы портировали некоторые из наших тестов Selenium на тесты Cypress, но прежде, чем мы это сделали, мы обсудили, какие тесты должны быть в какой структуре. Вот идеи о том, как мы собираемся переносить наши тесты E2E в ближайшем будущем:

  • Мы хотим минимизировать количество тестов Selenium, чтобы не тратить слишком много времени на проверку неизвестных сбоев.
  • Мы хотим, чтобы тесты сохраняли свою функциональность в старых браузерах.

Хорошо иметь две среды тестирования E2E, поскольку одна закрывает слабые места другой. Добавление Cypress не заняло много времени, поскольку нам пришлось бы потратить на поддержку тестов Selenium. Я очень рад, что наши тесты E2E станут более надежными.

Удачного кодирования!