Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Примитивный инструмент для тестирования PHP приложений

Anna | 31.05.2014 | нет комментариев

Скорее каждого для тех, кто ещё не начал тестировать, но имеет такое желание. Опытных в этом деле разработчиков поразить не получится, но тех кто ещё не перешел на сторону света, испробую подтолкнуть на данный шаг.

Предыстория

Решил разобраться с механическим тестированием. Прежде этого делать не доводилось, да и тогда не было особенно необходимо. Но было свободное время, которое решил потратить с пользой на грядущее.
Почитав теорию, начал искать инструмент для этого. Предсказуемо первым на горизонте показался PhpUnit. Но он показался каким-то массивным, что ли.
Больше комфортным показался Codeception — различные виды тестов, колоритный синтаксис. Но, посмотрев зависимости, я осознал, что мне столько каждого не необходимо.
Двигаясь в сторону простоты, я обнаружил atoum, а потом вообще изумительную вещь под наименованиемTestify.php. Здесь-то я подумал, что наконец обнаружил то, что мне необходимо.

Но я рано радовался. Testify.php не подошел при написании первого же теста. Тестировался класс кэширования, тот, что в зависимости от того, включена отладка либо нет, мог обрабатывать либо игнорировать вызовы. Так как режим отладки полагал присутствие константы DEBUG со значением true/false— переопределить её в одном процессе не получится.

Требования

Позже этих поисков я осознал, что необходим легкой инструмент, тот, что:

  • Будет тестировать в различных процессах, Дабы определять надобные константы, mock-ать одни и те же классы для различных тестов по различному, и т.д.
  • Будет максимально простым в применении
  • Сумеет трудиться как через браузер, так и с командной строки
  • Дозволено будет применять совместно с Travis CI (консольный вариант — в случае удачного тестирования должен воротить ранг 0)

 

Реализация

Был написан маленький скрипт, тот, что открывал тесты по http, собирал итоги, и выдавал в презентабельном HTML виде. Для того, Дабы сделать аналогичным процесс тестирования и для консольного варианта — было решено применять встроенный в PHP 5.4 веб-сервер. Запускается он так:

//Запуск
$web_server_pid = exec("php -S localhost:$this->port >/dev/null 2>/dev/null & echo $!");
//Тестирование
//...
//Остановка
exec("kill $web_server_pid");

И оно заработало как положено. Так, как аналогичного инструмента не обнаружил — решил оформить в виде независимого composer пакета, добавил интерактивности (прогресс выполнения комплектов тестов отображается в настоящем времени как в HTML, так и в консольном варианте).

Запуск тестов:

// test.php
require __DIR__.'/vendor/autoload.php';
(new nazarpcCSTester(__DIR__.'/tests'))->run();

Сейчас данный файл дозволено открыть либо в браузере, либо в консоли

php test.php

Сами тесты не на много труднее:

return 5 != 3 ? 0 : 'Strange PHP';

То есть, всякий обособленный тест являет собой файл, тот, что возвращает 0 позже удачного тестирования либо текст ошибки, если она появилась.

Пример итога консольного варианта:

Есть вероятность исполнить всеобщие команды как перед всеми комплектами тестов, так и перед всеми тестами одного комплекта.

Уверен, что дозволено сделать еще отменнее, следственно ожидаю конструктивной критики и предложений.
Зависимостей никаких, нагой PHP 5.4 подойдёт.

GitHub репозиторий: github.com/nazar-pc/CSTester
Composer пакет: packagist.org/packages/nazar-pc/cstester

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB