Уже давно заметил, что юнит-тестирование через PHPUnit в Moodle бывает, что выполняется ну ОЧЕНЬ медленно - 10-15 секунд для одного теста, а порой и минуту. Поэтому решил сделать небольшую заметку по тому, как можно обойти эту проблему.
ВНИМАНИЕ: впереди жуткие костыли и хаки
Как правило тормозит очистка/создание тестовых таблиц в БД, стартуемая перед каждым тестом.
ВНИМАНИЕ: впереди жуткие костыли и хаки
Как правило тормозит очистка/создание тестовых таблиц в БД, стартуемая перед каждым тестом.
Возможно, это уже исправили, но пока это тормозит. Исправить это можно, комментированием строки, выделенной в рамку на рисунке ниже и добавлением подчеркнутой строки в файле/lib/phpunit/classes/util.php. Это отключит работу с базой данных, и если тесты её не затрагивают - то вы получите прирост производительности. Это костыль: тесты которые её затрагивают само собой сломаются. Но это плата за производительность.
Можно обойти и сам PHPUnit, если он не нравится. Например, мной для ускорения тестирования была написана небольшая замена. Но, у неё есть недостатки:
DISCLAIMER. Этот скрипт ужасен. Но хотелось бы запускать юнит-тесты 10-15 раз за несколько секунд, особенно когда тестируется логика алгоритмов. И нет, даже секунда выполнения тестов (что на деле секунд 10-15 в лучшем случае и до минуты в худшем) меня не устраивает).
- база в момент выполнения теста недоступна (само собой)
- class autoload и многие другие вещи, зависящие от инициализации самого moodle перед тестами не работают (не были нужны - у меня оно в коде не использовалось)
- из-за предыдущего пункта не работает get_string и локализация (в тестах чаще всего не нужна)
DISCLAIMER. Этот скрипт ужасен. Но хотелось бы запускать юнит-тесты 10-15 раз за несколько секунд, особенно когда тестируется логика алгоритмов. И нет, даже секунда выполнения тестов (что на деле секунд 10-15 в лучшем случае и до минуты в худшем) меня не устраивает).
Комментариев нет:
Отправить комментарий