Разделы портала

Онлайн-тренинги

.
Выбор подходящего инструмента для тестирования JavaScript
20.03.2018 11:44

Автор: Гойко Адзич (Gojko Adzic)

Оригинал статьи: http://gojko.net/2018/02/25/javascript-testing-tools.html

Перевод: Ольга Алифанова

Как выбрать инструмент в экосистеме, которая генерирует фреймворки быстрее, чем плодится зерг, и убивает их с энтузиазмом Дарвина на амфетаминах?

JavaScript, возможно, неоптимален для многих команд, но для большей части нашей отрасли он неизбежное зло. StackOverflow оценивает его как наиболее популярный язык программирования в течение последних пяти лет. Лет десять назад тестирование компонентов JavaScript шло сбоку-припеку и отдавалось на ручное тестирование. Сегодня это уже не побочная платформа, крутящая веб-виджеты, а ключевая часть потока бизнес-операций. Это означает, что большинству команд нужно очень серьезно подходить к вопросу тестирования JavaScript.

Недавно я проводил опрос с целью узнать о предпочтениях и опыте разработчиков в разрезе JavaScript-тестирования. Типичная для всей экосистемы тирания выбора была довольно очевидной. Я получил 683 ответа, и оказалось, что люди пользуются более чем 50 фреймворками тест-автоматизации. При такой сборной солянке ни у кого нет времени на детальное исследование всех вариантов. Однако широта выбора также вызывает вопрос, нет ли в природе чего-то лучшего, нежели то, что мы сейчас используем. Как же выбрать правильные инструменты для так часто меняющегося фреймворка?

Платформа развивается с такой скоростью, что инструменты устаревают за несколько лет, если их не поддерживает активное сообщество. Учитывая, что инструменты и фреймворки JavaScript живут меньше бабочек, наилучшим выбором будет инструмент с активным сообществом вокруг него. Теоретически это отражается в рейтингах популярности. Популярные инструменты значительно облегчают передачу знаний и вовлечение людей в разработку – как для коммерческих проектов, так и для работы над открытым исходным кодом. Однако популярность сама по себе – это не лучший критерий выбора. Из-за сурового дарвинизма в среде инструментов JavaScript те, кто существует дольше, будут, скорее всего, популярнее молодых инструментов. В то же самое время экосистема быстро развивается, и более новые инструменты пытаются покрыть более современные варианты использования и учесть недавние изменения платформы.

В своем опросе я попросил людей оценить их опыт работы с инструментами. Некоторые вопросы рассматривали процессные выгоды – например, уверенность в частых релизах и предотвращении багов. Другие вопросы касались удобства использования – легкости работы с инструментами и простоту поддержки и понимания тест-кейсов. Комбинированные оценки этой группы вопросов неплохо демонстрируют уровень удовлетворенности инструментом. Конечно, процессные выгоды больше зависят от содержания кейсов, нежели от инструментов как таковых, однако большая разница в оценках по этому параметру может означать, что инструмент не подходит для какого-то ключевого рабочего потока.

С этой точки зрения хорошим выбором будет инструмент, который:

  • Дает возможность легко задействовать людей, и риск быстрого исчезновения которого невелик (т. е. у него достаточно высокая популярность, необязательно лидирующая).
  • Обладает основными нужными функциями, и поддерживает ключевые нужды современной платформы (процессные выгоды аналогичны лидирующим инструментам).
  • Позволяет легко писать, понимать и поддерживать тест-кейсы (наилучшая оценка по удобству использования среди инструментов, удовлетворяющих первым двум требованиям).

Немного о точности

Перед тем, как перейти к цифрам, расскажу о точности данных. Для 683 ответов и с учетом последней оценки количества разработчиков в мире погрешность результатов опроса – 4% с 95% уровнем уверенности в них. Также стоит отметить, что вопросы о выгодах и удобстве использования формулировались так, что люди оценивали картину целиком, а не отдельный инструмент, что важно в ситуациях комбинации нескольких инструментов.

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

Наиболее популярные инструменты

Если рассматривать популярность, то можно выделить тройку лидеров. Первые два инструмента не удивят никого работающего в отрасли больше пары лет, но бронзовая медаль была довольно неожиданной:


Вот как пользователи оценили свой опыт работы с тройкой лидеров:

Инструмент

Ответы

Процессы

Удобство использования

Mocha

45%

69%

62%

Jasmine

38%

66%

59%

Jest

29%

67%

63%

Mocha слегка выигрывает в плане позитивного влияния на процесс разработки, но прочие инструменты ушли недалеко – это означает, что, скорее всего, у тройки лидеров нет особых проблем. Jest лидирует по удобству использования – незначительно по сравнению с Mocha, но серьезно выигрывая у Jasmine. Прочие инструменты куда менее популярны.

Внимательные читатели заметят, что проценты в сумме дают больше ста – многие команды пользуются несколькими инструментами (мы поговорим об этом подробно чуть позже). С другой стороны, примерно 12% респондентов вообще не пользуются инструментами автоматизации тестирования JavaScript-кода!

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

Инструмент

Ответы

Процессы

Удобство использования

Mocha

16%

69%

64%

Jasmine

15%

64%

59%

Jest

10%

64%

64%

Взрыв популярности Jest вызван, возможно, быстрым взлетом React: у них один и тот же источник. Согласно опросу, 80% пользователей Jest также пользуются React.

Конечно, тип ПО, над которым вы работаете, очень значим для выбора инструментария. В области JavaScript это часто тесно связано с фреймворком фронт-энда. Вот список фрейморков, которыми пользуются респонденты:


Вот как изменились цифры, если сфокусироваться на популярных типах приложений:

React

Примерно 43% респондентов используют React в работе. Jest и Mocha примерно одинаково популярны в этом случае, но Jest лидирует по удобству использования при тестировании React-приложений:

Инструмент

Ответы

Процессы

Удобство использования

Jest

24%

67%

65%

Mocha

24%

70%

63%

Jasmine

13%

67%

60%

Angular

Около 34% респондентов пользуются той или иной версией Angular. В разработке Angular Jest исчезает с радаров, а бронзу берет другой инструмент: Cucumber JS. Jasmine – наиболее популярный вариант. Пользователи Cucumber выше оценивают его настройку, но в целом выводы по этим различиям делать рановато – мне понадобится больше данных, прежде чем что-либо тут

Инструмент

Ответы

Процессы

Удобство использования

Jasmine

21%

66%

59%

Mocha

14%

66%

58%

Cucumber JS

6%

67%

62%

Приложения бэкэнда

20% ответивших работают только с бэкэндом. К сожалению, тут цифрам уже нельзя на сто процентов доверять, но Mocha кажется значительнее популярнее остальных инструментов, и ее лучше оценивают. Прежде чем делать выводы, мне понадобится больше данных – возможно, вы сможете поучаствовать?

Инструмент

Ответы

Процессы

Удобство использования

Mocha

7%

72%

63%

Jasmine

3%

64%

59%

Jest

2%

65%

54%

Комбинации инструментов

Как я уже говорил, цифры в сумме дают больше ста процентов, потому что множество команд пользуется несколькими инструментами. Всего половина респондентов пользуется одним-единственным.


Меня очень удивили результаты по популярным комбинациям:

Инструмент

Ответы

Процессы

Удобство использования

Jasmine + Mocha

18%

67%

59%

Jest + Mocha

14%

69%

61%

Jasmine + Jest

10%

68%

59%

Cucumber JS + Mocha

7%

74%

65%

Cucumber JS + Jasmine

6%

71%

64%

Cucumber JS + Jest

4%

72%

70%

Наиболее популярная комбинация – это, по всей видимости, Jasmine и Mocha. Это любопытно, потому что оба они решают одну и ту же проблему. Могу только предположить, что это связано с тем, что вначале люди пользовались одним из них, а потом подключили другой, и разные части приложения покрыты разными инструментами. Другой вариант (основанный на предыдущих наблюдениях за бэкэнд-тестированием и Angular) – это использование Mocha для бэкэнда, а Jasmine для фронтэнда. Однако это не самый интересный вывод из таблицы комбинирования инструментов.

Смотрите, какая картина вырисовывается, если проранжировать инструменты по процессным выгодам:


Cucumber JS сам по себе недостаточно популярен для тройки лидеров, но комбинация Cucumber с одним из более популярных инструментов, видимо, сильно влияет на предотвращение багов и уверенность в релизе. Cucumber + Mocha набрали 74% по шкале выгоды – выше, чем любой изолированный инструмент или любая другая комбинация.

Похожая картина наблюдается при ранжировании по удобству использования:


В плане поддержки, создания и понимания автотестов Cucumber и Jest совместно выигрывают с большим отрывом. Они набрали 70% - больше, чем любой отдельный инструмент и любая комбинация.

Выводы

Мы не пользуемся React, поэтому лично я раньше не рассматривал Jest, однако результаты опроса заставят меня подумать дважды, выбирая инструмент для последующих проектов. Jest выглядит как инструмент более общего назначения – 20% его пользователей не используют React. Этот инструмент довольно молод, но, учитывая корпоративную поддержку Facebook, он, скорее всего, метит в долгожители.

Другой интересный вывод – комбинация Cucumber с любым популярным инструментом юнит-тестов повышает общий рейтинг значительным образом. Предположу, что Cucumber решает проблемы, отличающиеся от задач Jasmine, Mocha и Jest. Тройка наиболее популярных инструментов рассчитана на разработчиков, а Cucumber – на кросс-функциональную работу и взгляд на качество с более высокого уровня. Возможно, вынос более высокоуровневых тестов за рамки инструмента, ориентированного на разработчиков делает обе эти части чище и проще для работы. Многие ошибочно связывают Cucumber с тестированием интерфейса на уровне браузера – однако этот инструмент очень хорош для извлечения бизнес-сценариев, которые могут валидироваться доменными экспертами, поэтому он отлично подходит и для бэкэнда.

Я делаю вывод, что комбинация Jest и Cucumber дает наилучший баланс между процессными выгодами и удобством использования. Если вы начинаете новый проект с чистого листа, это кажется неплохим выбором фреймворка. Сразу следом идут Mocha + Cucumber.

Приведенные числа, однако, лишь немногим превышают погрешность результатов, поэтому я с удовольствием соберу больше данных, чтобы подтвердить свои предположения. Если вы работаете с JavaScript и не участвовали в исходном опросе, пожалуйста, помогите дополнить картину, заполнив небольшую форму.

Обсудить в форуме