CronTabManager + PHPunit (Автоматические тесты)
Всем привет.
Недавно занимался возможность интеграции PHPunit тестов со своим компонентом CrontabManager.
Сегодня удалось завершить эту разработку.
Теперь CronTabManager умеет запускать PHPunit тесты из коробки.
После установки CronTabManager как обычно создает директорию с котроллерами:
UPD: 22.03.2020: Интеграция PHPUnit в PHPStrom с помощью компонента CronTabManager
Так как из названия компонента понятно что это crontab (фоновые задания которые запускаются по расписанию)
То теперь наши тесты можно поставить на запуск, например: 1 раз в 3 часа
Добавляем задание:Производить запуск тестов 1 раз в 3 часа и отсылать уведомления на емаил если 3 попытки завершились не удачно.
Как выглядят уведомления
Это gif со всеми процессами: просмотра логов и уведомлением на email.
Ссылка на github
github.com/webnitros/CronTabManager
Ссылка на modstore
modstore.pro/packages/utilities/crontabmanager
Основная идея такой реализации — это простая интеграция тестов в Modx так как без извратов с настройками в разных IDE не обойтись.
Но даже если вам удалось интегрировать тесты, всегда остается вопросы:
UPD: 22.03.2020
И еще одна доработка для запуска из под PHPStorm с удаленным подключением к mysql
1. Копируем наш файл с конфигом core/config/config.inc.php в core/config/test.inc.php в котом настраиваем подключение к mysql (если подключение удаленное то PORT обязательно нужно указывать)
2. Создаем файл phpunit.xml с содержимым
в bootstrap указываем путь до файла core/components/crontabmanager/lib/phpunit/MODxTestHarness.php
3. Подключение нашего файл phpunit.xml в phpStorm и указываем откуда запускать PHPunit
4. Создаем папку tests с тестами в корне сайта и наш первый тест
5. Жмем play
6. Получаем результат
Вот так просто можно встроить PHPUnit в PHPStrom с помощью компонента CronTabManager
Недавно занимался возможность интеграции PHPunit тестов со своим компонентом CrontabManager.
Сегодня удалось завершить эту разработку.
Теперь CronTabManager умеет запускать PHPunit тесты из коробки.
После установки CronTabManager как обычно создает директорию с котроллерами:
core/scheduler/Controllers/
Сейчас по дефолту добавлен контроллер demophpunit.phpcore/scheduler/Controllers/demophpunit.php
Который как раз и показывает как запустить PHPunit тест.UPD: 22.03.2020: Интеграция PHPUnit в PHPStrom с помощью компонента CronTabManager
Запуск PHPunit по расписанию
Так как из названия компонента понятно что это crontab (фоновые задания которые запускаются по расписанию)
То теперь наши тесты можно поставить на запуск, например: 1 раз в 3 часа
Добавляем задание:Производить запуск тестов 1 раз в 3 часа и отсылать уведомления на емаил если 3 попытки завершились не удачно.
Демонстрация
Как выглядят уведомления
Это gif со всеми процессами: просмотра логов и уведомлением на email.
Ссылка на github
github.com/webnitros/CronTabManager
Ссылка на modstore
modstore.pro/packages/utilities/crontabmanager
Зачем все это
Основная идея такой реализации — это простая интеграция тестов в Modx так как без извратов с настройками в разных IDE не обойтись.
Но даже если вам удалось интегрировать тесты, всегда остается вопросы:
- Как запускать тесты по расписанию;
- Как получать уведомления в случае неудачного прохождения теста ❌;
- Где смотреть логи, если была ошибка;
UPD: 22.03.2020
Интеграция с PHPStorm
И еще одна доработка для запуска из под PHPStorm с удаленным подключением к mysql
1. Копируем наш файл с конфигом core/config/config.inc.php в core/config/test.inc.php в котом настраиваем подключение к mysql (если подключение удаленное то PORT обязательно нужно указывать)
// core/config/test.inc.php
<?php
/**
* MODX Configuration file
*/
$database_type = 'mysql';
$database_server = 'IP SERVER:PORT';
$database_user = '{USERNAME}';
$database_password = '{PASSWORD}';
$database_connection_charset = 'utf8';
$dbase = ''{DATABASE}';
....
2. Создаем файл phpunit.xml с содержимым
в bootstrap указываем путь до файла core/components/crontabmanager/lib/phpunit/MODxTestHarness.php
// phpunit.xml
<phpunit colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="true"
verbose="true"
bootstrap="public_html/core/components/crontabmanager/lib/phpunit/MODxTestHarness.php"
timeoutForSmallTests="5"
timeoutForMediumTests="5"
timeoutForLargeTests="10"
reportUselessTests="true"
strictCoverage="true"
disallowTestOutput="true"
enforceTimeLimit="true">
<php>
<server name="REQUEST_URI" value="/"/>
</php>
</phpunit>
3. Подключение нашего файл phpunit.xml в phpStorm и указываем откуда запускать PHPunit
4. Создаем папку tests с тестами в корне сайта и наш первый тест
// tests/Settings.php
<?php
/**
* Created by Andrey Stepanenko.
* User: webnitros
* Date: 21.03.2021
* Time: 15:34
*/
class Settings extends MODxProcessorTestCase
{
public function testSiteName()
{
$sitename = $this->modx->getOption('site_name');
self::assertEquals('MODX REVOLUTION', $sitename);
}
}
Теперь тесты готовы к запуску5. Жмем play
6. Получаем результат
Вот так просто можно встроить PHPUnit в PHPStrom с помощью компонента CronTabManager
Поблагодарить автора
Отправить деньги
Комментарии: 9
Не совсем понятно, зачем нужны тесты рабочего сайта по расписанию. Обычно тестируют разработку перед деплоем. Протестировал — замёрджил — задеплоил.
Ну и по поводу вышеописанных примеров тестов. Они нарушают все базовые правила юнит-тестирования — обращения к файловой системе и базе данных недопустимы. Их обычно мокают. Это уже больше функциональное тестирование. И для этого есть шикарный фреймворк Codeception.
Ну и по поводу вышеописанных примеров тестов. Они нарушают все базовые правила юнит-тестирования — обращения к файловой системе и базе данных недопустимы. Их обычно мокают. Это уже больше функциональное тестирование. И для этого есть шикарный фреймворк Codeception.
Есть вариант как мокнуть xpdo?
MODX плохо поддаётся юнит-тестированию. Поэтому юзаем Codeception.
Codeception — особо не знаком с ним. Можно попробовать встроить и его. Разницы то особо нету какой фреймворк запускать из под crontabmamager
MODX плохо поддаётся юнит-тестированию.
Из за этого и встроил PHPunit в Crontabmanager
Ибо чтобы настроить PHPUnit для modx мозг взорвется пока это сделаешь.
crontabmanager использует твою наработку по запуску скриптов на бэкенде (спасибо)))).
За счет чего полноценно стартуют тесты в Modx.
Ах да забыл про это написать.
Стартую изолированный Modx, а не из под того же скрипта который его запустил
Пишет все в логи, а уже из логов читаются сообщения.
Стартую изолированный Modx, а не из под того же скрипта который его запустил
Пишет все в логи, а уже из логов читаются сообщения.
Есть вариант как мокнуть xpdo?В этом как раз и жопа. Вместо дополнительного уровня абстракции (как это сделано в Evolution — $modx->db) modX тупо наследуется от xPDO. И в итоге хрен ты чего сделаешь.
То же пробовал, аналогичный вывод получился…
При интеграции с разными сервисами частенько что то ломается.
Не совсем понятно, зачем нужны тесты рабочего сайта по расписанию. Обычно тестируют разработку перед деплоем. Протестировал — замёрджил — задеплоил.Банальный ответ: Для автоматического тестирования)))))))))))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.