CodeceptJS - приемочное тестирование для NodeJS

Не так давно я интересовался кто какие фреймворки использует для тестирования в NodeJS. Судя по опросам народ мало использует NodeJS для приемочных тестов. А зря, подумал я. Ведь сейчас всё стремтельно переходит на JavaScript и Node. В итоге я решил сделать хороший тестовый фреймворк взяв за основу свой PHP-фреймворк Codeception.

Изначально была одна проблемка… Я никогда не работал с NodeJS. Но за месяц проект из идеи превратился в достойный прототип и был тепло встречен сообществом. Знакомьтесь - CodeceptJS - современный фреймворк для приемочного тестирования.

Из основных особенностей:

  • синхронная запись тестов
  • высокоуровневый BDD-style DSL
  • система заменяемых модулей: тест легко портировать между WebDriverIO, Protractor, PhantomJS
  • интерактивная консоль: вы можете проверить команды и локаторы непосредственно при проходе теста.
  • везде ECMAScript6 (без всяких там Бабелей)
  • красивый сайт с документацией )

Взгляните, будут интересны ваш отзывы (и не забудьте поставить звездочку в репозитории ;)).

Самый короткий тест на CodeceptJS выглядит так:

I.amOnPage('http://codecept.io');
I.see('Modern Era Acceptance Testing');
7 лайков

Круто, попробую. А в чем заключается “система заменяемых модулей” ?

На первый взгляд - неплохо. Но вот слишком уж простые примеры рассматриваются в доках.
Чуть ли ни основной нынче проблемой является взаимодействие с динамическими элементами. Можно парочку примеров с WebDriverWait + ExpectedConditions? Каким образом можно создавать кастомные expected conditions? Насколько легко расширять имеющиеся API? Ну вот, к примеру, нужно мне взаимодействовать с Select2 или Datepicker. Каков effort? Ну и конечно же не менее актуален вопрос репортинга. С чем интегрировать или как подключать что-то свое?

В том что методы теста достаточно абстрактны, чтобы могли работать с разными движками: WebDriverIO, Protractor, … То есть вы сможете легко портировать тесты с одного на другой не меняя синтаксис.

Допустим так:

I.waitForElement('#modal');
I.waitForText('Thank you, request has been submitted');
I.waitUntil(function() { if (somethingHappened()) return true; });

Можно написать свой метод I.select2 в нем использовать нативно библиотеку WebDriverIO чтобы выполнить какое-то кастомные действия. Для этого надо будет написать свой Helper. Что впринципе достаточно несложно…

Пока с этим вообще никак… Проект только неделю живет в публичном доступе. До репортинга ещё руки не дошли ( Но, конечно, вскоре будет и HTML и JUnit и что ещё может быть актуально. Как минмум, эти штуки уже есть в Mocha, так что думаю прикрутить их не составит проблемы

3 лайка

Все это кто? И насколько стремительно?

Самое большое число проектов на гитхабе - js, самый популярный проект гитхаба angularjs (fw для ноды от разрабов гугла). js единственный язык, на котором можно написать одновременно и клиентскую и серверную логику приложения. Можно продолжать долго.

У меня один вопрос. Умеет ли этот фреймворк параллелить тесты и работать с Selenium Grid так же, как тесты, написанные, например, на java+testng? Мне нужно распараллеливание между нодами селениума, которое не работает в codeception

Пока с этим так же плохо как в Codeception, но думаю всё изменится.

Кстати, вышла новая версия, которая включает в себя

  • кучу новых методов в WebDriver хэлпер
  • хук для работы с фрагментом страницы - Within:
  • возможность включать стандартные репортеры от Mocha
  • появились тесты (по сути самая сложная часть)

И прочие нововведения

1 лайк

Небольшой вопрос - почему для бэкэнда тестов был выбран пхп, а не нода?:slight_smile: То есть чтобы прогнать тесты локально, нужно иметь сервер & пхп (понимаю что это просто, но все таки лишняя зависимость).

Потому что я портировал старые тесты с Codeception, которых накопилось весьма немало. Переписывать сайт с демками не было никакого смысла.

Чтобы прогнать локально вам таки нужен PHP.

Но по сути можете просто сделать форк и тестировать на тревисе и не парииться насчет зависимостей )

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

И запускаем его…

2 лайка

Сейчас занимаюсь автоматизацией приемочных тестов для php сайта на codeception, хотел бы узнать есть ли смысл переходить на codeceptJS? будут ли какие то фундаментальные преимущества тестов на js перед тестами на php?

С РНР смысла нет.

Кроме случаев когда вы захотите нормальную поддержку AngularJS через Protractor (PHP-версия в этом немного обрезана). Если хотите погонять тесты напрямую в Хромиум через NightmareJS (быстрее в 3 раза, но очень кастомно работает) тоже можете использовать CodeceptJS

Но вцелом для РНР проектов лучше использовать РНР версию

1 лайк

Внезапно вышел первый стабильный релиз 1.0.
В который мы постарались впихнуть максимум доступных фич. Вот только-только хотели релиз выпускать, а тут снова офигенная фича появляется и всё, откладываем пока не доделаем.

Вкратце что появилось нового:

  • улучшенная работа с промисами. Можно использовать генераторы внутри within и pageobject
  • мобильное тестирование черз Appium
  • управление тестовыми данными через REST протокол
  • SmartWait - неявные ожидания элементов, но очень избирательное, то есть не замедляет выполнение теста
  • запуск одного теста на разных наборах данных

и др…

2 лайка

А вот и версия 1.1. В ней:

  • NodeJS 8 и поддержка async/await
  • Возможность запускать тесты без селениума через Puppeteer.

Остальная инфа о релизе тут: Releases | CodeceptJS

3 лайка

возможность юзать puppeteer очень интересует, спасибо :slight_smile: Надо будет глянуть исходники

Ага, а ещё только у нас Puppeteer поддерживает XPath локаторы ) Смотрите )

1 лайк