4. HUDSON
Инструмент непрерывной интеграции
(ci).
Mercurial
Распределённая система контроля
версий.
PHPUnit
Фрэймворк, основанный на
PEAR, предназначенный для
модульного тестирования PHP
приложений
5. Подготовка
Установка 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"
6. Структура проекта
project phpunit.xml - конфигурационный файл PHPUnit
|-- application
|-- data
|-- docs
bootstrap.php - загрузчик приложения, аналогичен index.php
|-- library
|-- public ControllerTestCase.php - класс-предок для всех тесткейсов
`-- tests нашего проекта
|-- application
| |-- models
| | `-- PageTest.php
| |-- controllers
| | |-- IndexControllerTest.php
| | `-- ErrorControllerTest.php
| |-- ControllerTestCase.php
| `-- bootstrap.php
|-- library
| `-- bootstrap.php
`-- phpunit.xml
7. Создание теста
IndexControllerTest.php ErrorControllerTest.php
<?php <?php
class IndexControllerTest extends ControllerTestCase{ class ErrorControllerTest extends ControllerTestCase{
public function testTestAction(){ public function testErrorURL(){
$this->dispatch('/'); $this->dispatch('foo');
$this->assertModule('default'); $this->assertModule('default');
$this->assertController('index'); $this->assertController('error');
$this->assertAction('index'); $this->assertAction('error');
} }
} }
PHPUnit 3.7 by Sebastian Bergmann.
Time: 0 seconds
OK (3 tests, 7 assertions)
Generating code coverage report, this may take a moment.
Смортим отчет http://%project%/tests/reports/
8. Настройка HUDSON
• Добавляем job
• В разделе Source Code Management указываем путь к нашему репозиторию
• Указываем расписание сборокпроверок cron строкой в разделе Build Triggers
• В разделе Build указываем вызов наших тестов "phpunit path-to-zf-project/tests/"
• В разделе Post-build Actions ставим checkbox для Public JUnit test result report, а
в Test report XMLs указываем hudson.xml
• В том же разделе Post-build Actions ставим checkbox для E-mail Notification.
Указываем получателей через пробел в строке recipients. И ставим checkbox на
Send e-mail for every unstable build
З.Ы. hudson.xml генерируем из xml отчета phpunit в нужном формате, либо
самописным скриптом, либо с помощью "phpunit2hudson"
11. • Во время CodeReview нет необходимости просматривать стиль, оформление кода, копипаст и т.д.
• Избавляемся от ручной рутинной работы создания билдов
• Оповещение по email
• Наглядная статистика
• Получение информации о проценте покрытия кода тестами
• Использование zend tool облегчает процесс конструирования проекта
• Использование mercurial проще чем git и имеет практически тот же функционал,
децентрализирует репозиторий, в сравнении с subversion мержи осуществляются с меньшим
количеством конфликтов и есть возможность отмены коммита