понедельник, 12 декабря 2016 г.

Ускоряем юнит-тестирование в Moodle

Уже давно заметил, что юнит-тестирование через PHPUnit в Moodle бывает, что выполняется ну ОЧЕНЬ медленно - 10-15 секунд для одного теста, а порой и минуту.  Поэтому решил сделать небольшую заметку по тому, как можно обойти эту проблему.

ВНИМАНИЕ: впереди жуткие костыли и хаки

Как правило тормозит очистка/создание тестовых таблиц в БД, стартуемая перед каждым тестом.

Возможно, это уже исправили, но пока это тормозит. Исправить это можно, комментированием строки, выделенной в рамку на рисунке ниже и добавлением подчеркнутой строки в файле/lib/phpunit/classes/util.php. Это отключит работу с базой данных, и если тесты её не затрагивают - то вы получите прирост производительности. Это костыль: тесты которые её затрагивают само собой сломаются. Но это плата за производительность.



Можно обойти и сам PHPUnit, если он не нравится. Например, мной для ускорения тестирования была написана небольшая замена. Но, у неё есть недостатки:

  • база в момент выполнения теста недоступна (само собой)
  • class autoload и многие другие вещи, зависящие от инициализации самого moodle перед тестами не работают (не были нужны - у меня оно в коде не использовалось)
  • из-за предыдущего пункта не работает get_string и локализация (в тестах чаще всего не нужна)

DISCLAIMER. Этот скрипт ужасен. Но хотелось бы запускать юнит-тесты 10-15 раз за несколько секунд, особенно когда тестируется логика алгоритмов. И нет, даже секунда выполнения тестов (что на деле секунд 10-15 в лучшем случае и до минуты в худшем) меня не устраивает).




Комментариев нет:

Отправить комментарий