Не так давно я интересовался кто какие фреймворки использует для тестирования в 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');
На первый взгляд - неплохо. Но вот слишком уж простые примеры рассматриваются в доках.
Чуть ли ни основной нынче проблемой является взаимодействие с динамическими элементами. Можно парочку примеров с 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, так что думаю прикрутить их не составит проблемы
Самое большое число проектов на гитхабе - js, самый популярный проект гитхаба angularjs (fw для ноды от разрабов гугла). js единственный язык, на котором можно написать одновременно и клиентскую и серверную логику приложения. Можно продолжать долго.
У меня один вопрос. Умеет ли этот фреймворк параллелить тесты и работать с Selenium Grid так же, как тесты, написанные, например, на java+testng? Мне нужно распараллеливание между нодами селениума, которое не работает в codeception
Небольшой вопрос - почему для бэкэнда тестов был выбран пхп, а не нода? То есть чтобы прогнать тесты локально, нужно иметь сервер & пхп (понимаю что это просто, но все таки лишняя зависимость).
У нас появилась крутая фича с переводами. Идея не моя, реализация тоже, потому первый перевод доступен для португальского, а второй для русского языков. Выглядит это так: мы пишем код на JavaScript
Сейчас занимаюсь автоматизацией приемочных тестов для php сайта на codeception, хотел бы узнать есть ли смысл переходить на codeceptJS? будут ли какие то фундаментальные преимущества тестов на js перед тестами на php?
Кроме случаев когда вы захотите нормальную поддержку AngularJS через Protractor (PHP-версия в этом немного обрезана). Если хотите погонять тесты напрямую в Хромиум через NightmareJS (быстрее в 3 раза, но очень кастомно работает) тоже можете использовать CodeceptJS
Но вцелом для РНР проектов лучше использовать РНР версию
Внезапно вышел первый стабильный релиз 1.0.
В который мы постарались впихнуть максимум доступных фич. Вот только-только хотели релиз выпускать, а тут снова офигенная фича появляется и всё, откладываем пока не доделаем.
Вкратце что появилось нового:
улучшенная работа с промисами. Можно использовать генераторы внутри within и pageobject
мобильное тестирование черз Appium
управление тестовыми данными через REST протокол
SmartWait - неявные ожидания элементов, но очень избирательное, то есть не замедляет выполнение теста