Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

nodejs
framework
webdriver
testng
javascript
Теги: #<Tag:0x00007fedbbcc3750> #<Tag:0x00007fedbbcc3610> #<Tag:0x00007fedbbcc34d0> #<Tag:0x00007fedbbcc3368> #<Tag:0x00007fedbbcc3200>

(Michael Bodnarchuk) #1

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

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

http://codecept.io

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

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

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

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

I.amOnPage('http://codecept.io');
I.see('Modern Era Acceptance Testing');

Selenium JS, "cant find element". Пути решения.
Selenium + JavaScript тестирование UI , с чего начать, куда пойти, что искать (спрашивает полный ноль в автоматизации)
(Stan) #2

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


(Sergey Korol) #3

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


(Michael Bodnarchuk) #4

В том что методы теста достаточно абстрактны, чтобы могли работать с разными движками: 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, так что думаю прикрутить их не составит проблемы


(ByteSurfer) #5

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


(Stan) #6

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


(Andrey Kurilov) #7

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


(Michael Bodnarchuk) #8

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

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

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

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


(Stan) #9

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


(Michael Bodnarchuk) #10

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

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

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


(Michael Bodnarchuk) #11

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

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


(Vadim) #12

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


(Michael Bodnarchuk) #13

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

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

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


(Michael Bodnarchuk) #14

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

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

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

и др…


(Michael Bodnarchuk) #15

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

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

Остальная инфа о релизе тут: http://codecept.io/changelog/


(Sergei Chipiga) #16

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


(Michael Bodnarchuk) #17

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