Дамп файлов БД во время тестирования или очень медленные тесты

286
30 сентября 2017, 20:41

У меня есть проект на PHP с использованием Yii2 и тестирую я все это дело Codeception.

Все бы ничего, но тесты с использованием БД выполняются нереально долго. В частности, по причине большого количества фикстур с большим количеством данных.

Я даже разделил тесты на unit и integration -- с без БД и с ним. Посмотрите на разницу:

$ time ./vendor/bin/codecept run unit
Tests.unit Tests (67) 
Time: 4.22 seconds, Memory: 71.25MB
OK (67 tests, 380 assertions)
real    0m6.044s
user    0m1.292s
sys     0m0.208s

Интеграционные:

$ time ./vendor/bin/codecept run integration
Tests.integration Tests (35) 
Time: 4.76 minutes, Memory: 54.25MB
Tests: 35, Assertions: 58, Failures: 1.
real    4m46.052s
user    4m35.880s
sys     0m0.584s

То есть где-то в 50 раз дольше.

Вопрос вот в чем: вместо того, чтобы загружать и выгружать из БД строки, может быть можно как-то выгрузить в БД все данные, сохранить файл таблицы со всеми этими данными и перед каждым тестом копировать этот файл, восстанавливая набор тестовых данных. В SQLite с этим проще, но в моем случае подменить не получится.

Если это не возможно или не имеет смысла, то как я могу ускорить выполнение тестов с использованием БД?

Дополнительная информация:

  • Я использую официальный метод загрузки фикстур в Yii2 через метод _fixtures
  • Данных в фикстурах может быть много и обычно они все нужны для сохранения целостности и эмуляции боевых условий.
  • БД для тестов лежит внутри vagrant окружения. Возможно, проблема кроется именно в этом. Но я бы не хотел выносить БД из гостевой системы в хост. Выполнение тестов внутри Vagrant машины не дает никакого прироста.
  • Возможно кто-то посоветует Docker, но не получается у меня как-то с ним. Может быть нужна практика, но пока что у меня с ним даже не на "Вы", а на "Оно"
  • Используемая БД -- MySQL
  • Моки -- это круто. До тех пор, пока они актуальны. Но проблема в том, что в этом случае очень важно, чтобы все вместе работало хорошо, а не только отдельный модуль. К тому же нельзя отрицать, что создание большого количества моков делает тесты практически нечитабельными.
READ ALSO
Запрос с order by

Запрос с order by

Всем привет, пытаюсь данный запрос

223
Ввод текста java android

Ввод текста java android

Создаю свое простенькое приложениеВозникла проблема

335
Сохранить Timestamp в SharedPreferences Android

Сохранить Timestamp в SharedPreferences Android

Как можно сохранить значение типа Timestamp в Shared Preferences? Насколько я знаю, у Editor есть только методы для int, string, boolean, long, float

313
JavaFX. Как сделать модальное окно для получения папки удаленного ПК

JavaFX. Как сделать модальное окно для получения папки удаленного ПК

Как в JavaFX реализовать модальное окно для получения папки удаленного компьютера? Для получения папки на самом компьютере делал через DirectoryChooserМожет...

247