Transcript
Page 1: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

Захарченко Иван

Page 2: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

Enterprise разработка PHP приложений

HUDSON

Page 3: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

Материалы

1.Zend Framework2.PHPUnit3.Mercurial4.Hudson

Page 4: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

HUDSONИнструмент непрерывной интеграции (ci). 

MercurialРаспределённая система контроля версий.

PHPUnitФрэймворк, основанный на PEAR, предназначенный для модульного тестирования PHP приложений

Page 5: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

Подготовка

Установка PEAR• скачать http://pear.php.net/go-pear.phar• выполнить "php go-pear.phar" (в windows настроить переменные среды)• проверка "pear version"

Установка PHPUnit• выполнить "pear channel-discover pear.phpunit.de"• выполнить "pear install phpunit/PHPUnit"

Настройка Zend_Tool• linux: прописываем alias zf для "zend/bin/zf.sh"• windows: указываем путь к директории "zend/bin/" в переменных среды• проверка "zf"

Создание проекта• выполнить "zf create project zf-project"

Запуск теста• выполнить "phpunit --log-junit path-to-zf-project/tests/tmp.xml path-to-zf-project/tests" 

Page 6: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

Структура проектаproject|-- application|-- data|-- docs|-- library|-- public`-- tests    |-- application    |   |-- models    |   |   `-- PageTest.php    |   |-- controllers    |   |   |-- IndexControllerTest.php    |   |   `-- ErrorControllerTest.php    |   |-- ControllerTestCase.php    |   `-- bootstrap.php    |-- library    |   `-- bootstrap.php    `-- phpunit.xml

phpunit.xml - конфигурационный файл PHPUnit

bootstrap.php - загрузчик приложения, аналогичен index.php

ControllerTestCase.php - класс-предок для всех тесткейсов нашего проекта

Page 7: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

Создание тестаIndexControllerTest.php

<?phpclass IndexControllerTest extends ControllerTestCase{

    public function testTestAction(){        $this->dispatch('/');        $this->assertModule('default');        $this->assertController('index');        $this->assertAction('index');    }}

PHPUnit 3.7 by Sebastian Bergmann.Time: 0 secondsOK (3 tests, 7 assertions)Generating code coverage report, this may take a moment.

ErrorControllerTest.php

<?phpclass ErrorControllerTest extends ControllerTestCase{

    public function testErrorURL(){        $this->dispatch('foo');        $this->assertModule('default');        $this->assertController('error');        $this->assertAction('error');    }}

Смортим отчет http://%project%/tests/reports/

Page 8: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

Настройка HUDSON

1. Добавляем job2. В разделе Source Code Management указываем путь к нашему репозиторию3. Указываем расписание сборок\проверок cron строкой в разделе Build Triggers4. В разделе Build указываем вызов наших тестов "phpunit path-to-zf-project/tests/"5. В разделе Post-build Actions ставим checkbox для Public JUnit test result report, а

в Test report XMLs указываем hudson.xml6. В том же разделе Post-build Actions ставим checkbox для E-mail Notification.

Указываем получателей через пробел в строке recipients. И ставим checkbox на Send e-mail for every unstable build

З.Ы. hudson.xml генерируем из xml отчета phpunit в нужном формате, либо самописным скриптом, либо с помощью "phpunit2hudson"

Page 9: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

dev #1

dev #2

dev #3repo

tags

Page 10: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

Для чего все это?

Page 11: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

1. Во время CodeReview нет необходимости просматривать стиль, оформление кода, копипаст и т.д.2. Избавляемся от ручной рутинной работы создания билдов3. Оповещение по email4. Наглядная статистика5. Получение информации о проценте покрытия кода тестами6. Использование zend tool облегчает процесс конструирования проекта7. Использование mercurial проще чем git и имеет практически тот же функционал,

децентрализирует репозиторий, в сравнении с subversion мержи осуществляются с меньшим количеством конфликтов и есть возможность отмены коммита

Page 12: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

Источники1. http://pear.php.net/2. http://www.phpunit.de/3. http://framework.zend.com/4. http://anton.shevchuk.name/php/unit-tests-zend-framework-application/5.  http://habrahabr.ru/blogs/php/98832/6. http://www.smartyit.ru/php/

Page 13: Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко

СПАСИБО ЗА ВНИМАНИЕ!