Codeception — новости проекта

    imageЯ уже писал на Хабре о Codeception — фреймворке для тестирования приложений на PHP. Если вы никогда раньше не писали тестов для вашего приложения, вам обязательно стоит взглянуть на Codeception. Он очень прост в использовании и сделан специально, чтобы уберечь разработчиков от рутины.

    Сегодня я хотел бы рассказать, какие фичи появились в проекте в последнее время, а также отвечу на пару популярных вопросов.

    Инсталляция через Composer

    Теперь для установки вам больше не нужен PEAR. С ним часто возникает много разных проблем, требующих бубна и шаманских песен. Если вы современный человек и забыли все ритуальные песни древних предков, попробуйте Composer. С его помощью вы легко можете установить сам Codeception, а также все необходимые библиотеки, в том числе Mink и PHPUnit.

    Инструкции тут.

    Поддержка фреймворков

    Сейчас вы можете писать функциональные тесты для следующих фреймворков: Symfony2, Zend Framework, symfony, Kohana, SocialEngine. Последние два модуля, кстати, сделаны сторонними разработчиками, за что им отдельное спасибо. Их пример показывает, что сделать модуль под свой любимый фреймворк не так и сложно.

    Генерация документации

    Многие говорят, что тесты — лучшая документация. Но не всегда тесты пишутся с расчетом на чтение. В Codeception всё иначе, в Cest-тестах вы описываете свои действия и желаемый результат.

    $I->testMethod('\Service\Group::create');
    $I->wantTo('create a group');
    $I->executeTestedMethodWith('DemoGroup', 1)
    	->seeInRepository('Model\Group', array('name' => 'DemoGroup', 'user_id' => 1, 'type' => 'group'))
        ->seeResultIs('int');
    


    Если вы используете систему генерации документации phpDocumentor2 (бывший DocBlox), то с помощью встроенного в Codeception плагина этот тест будет добавлен к описанию метода. Он будет преобразован в текст и примет такой вид:

    With this method I can create group

    If I execute \Service\Group::create(«DemoGroup»,1)
    I will see in repository «Model\Group»,{«name»:«DemoGroup»,«user_id»: 1, «type»: «group» }
    I will see result is «int»

    Теперь в документации будет информация о том как ведет себя тот или иной метод в зависимости от параметров. Как подключать плагин — читайте здесь.

    Базовая поддержка CI систем

    Теперь Codeception можно подключить к Continious Integration серверам, таким как Jenkins и Bamboo. К сожалению, протестировать интеграцию удалось пока только с Bamboo. Но результат пишется в XML и по идее должен легко подхватываться другими CI системами. Если с ними будут проблемы — сообщайте, всё оперативно подправим.

    Всё это, а также много других вкусностей доступно в последней версии Codeception 1.0.8.
    Устанавливайте, используйте.

    А теперь ответы на популярные вопросы:

    Зачем Codeception, если есть PHPUnit?

    Открою секрет: Сodeception это не велосипед, а надстройка над PHPUnit. Она позволяет выполнять сценарные тесты на движке PHPUnit. При этом все ваши существующие тесты для PHPUnit Codeception сможет подхватит без каких-либо проблем. К ним вы сможете легко добавить функциональные и приемочные тесты. Очень многие задачи, требующие костылей (например, интеграция с Selenium, с БД) в Codeception уже решены.

    Зачем Codeception, если есть Selenium?

    Codeception умеет выполнять тесты для Selenium. Но тесты в Codeception легче поддерживать, они более гибкие. Например, вы можете часть тестов выполнять не в браузере, а через его эмулятор Goutte. Или вообще не использовать веб-сервер для тестирования, а обращаться к приложению напрямую. Это значительно уменьшит время выполнения ваших тестов. Кроме того, Codeception берет на себя все проблемы связанные с очисткой данных между тестами.

    Зачем Codeception, если есть Behat?

    Вопрос в стиле: зачем Linux, если есть Windows. Наличие альтернатив это всегда хорошо. Как минимум, система позволяющая писать приемочные тесты на PHP будет в экосистеме не лишней.

    Планы на будущее

    В ближайшем будущем добавиться покрытие кода и увеличиться количество поддерживаемых фреймворков. Но предлагайте и свои идеи. Что бы вы хотели видеть в Codeception?
    Поделиться публикацией

    Похожие публикации

    Комментарии 12
      +2
      А как в codeception сделать, чтобы selenium ждал окончания загрузки страницы? например тут
      $I = new WebGuy($scenario);
      $I->wantTo('log in as regular user');
      $I->amOnPage('/login');
      $I->fillField('Username','davert');
      $I->fillField('Password','qwerty');
      $I->click('Login');
      $I->see('Hello, davert');

      Если WebGuy это селениум, то будет сразу ошибка тк codeception не найдет Hello, davert те страница еще не загрузилась. Можно натыкать wait, но наверно есть лучше способ?
        +1
        Я достаточно мало работал с Selenium, потому не могу предложить «лучший способ». Но если такой найдется — смогу реализовать.
          0
          deanhume.com/Home/BlogPost/selenium-webdriver---wait-for-an-element-to-load/64
          Собственно проблема больше не в том, что нужно wait напихивать, а в том, что если если сделал тест для phpBrowser то для selenium его нужно изменять. Можно например настройку задержки регулировать в WebGuy?
            +1
            Да, можно добавить такую опцию. Спасибо. Наверняка сделаю её к следующему релизу )
        0
        PhpDocumentator2 нет. Есть phpDocumentor2.
          0
          Спасибо, поправил. Для меня он навсегда останется DocBlox`ом (скупая мужская слеза).
          +4
          Планируется ли модуль для Yii?
            +1
            Я не работаю с Yii. Если кто-то готов сделать его и протестировать — буду всячески помогать в этом деле.
            Сделать модуль несложно. А вот убедиться, что он нормально работает на реальных проектах — таки сложно.
            0
            Всем понятны эти Ай хэв, Ай си? По моему, автор в погоне за изюминкой и читабельностью синтаксиса намудрил субъективных абстракций.

            В любом случае, строчки в sample code надо «по-русски» объяснить коментами. Так сказать, обучить других своим условностям.
              0
              Насчет «по-русски» не знаю, но есть обширная документация. Вцелом, как могу так и объясняю.

              В любом случае, объективные абстракции, которые начинаются со слов «зис ассерт» намного сложнее в понимании, даже с каментами, чем «ай си» =)
                0
                А по моему $this->assert привычнее и понятнее :) Хозяин барин конечно, но, воистину, чем больше тех или иных проектов, тем больше вариантов синтаксиса делающих примерно одно и тоже.
                  0
                  Вы ещё phpspec не видели =)

                  Вам привычный assert, ибо вы уже работали с тестами. Ничего не имею против такой конструкции, но целью было писать такой код, чтобы я мог даже заказчику и тестеру его показывать и говорить: ничо не знаю, вот вчера тест всё гонял, всё работало :)

                  Альтернативный вариант синтаксиса это PHPUnit + Mink. Там всё привычно.

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

            Самое читаемое