Что такое фикстуры и миграции?
Фикстуры - это по сути тестовые данные. Они нужны для unit-тестирования. Это могут быть как данные в базе, так и обычные файлы (обычно 2 варианта, до и после обработки так скажем). Каждый раз когда запускаются тесты, эти данные используются для установления начального состояния системы, что бы тесты всегда выполнялись предсказуемо.
Для функционального тестирования (тестрирование контроллеров, интаграционных тестов) фикстуры не применяются, хотя суть там так же сходна. Если честно, то тут мнение расходится. Одни говорят что при функциональных тестах нельзя использовать даже моки, то есть система в процессе выполнения тестов полностью создает то состояние которое необходимо для других тестов. Например последовательное выполнение тестов на добавление статьи и ее просмотр. Другие же предпочитают для каждого тесткейса выставлять состояние с нуля. По сути это схоже с использованием фикстур, но реализация различается. У вас есть некое api для заполнения данными (скажем метод добавляющий пользователя), и перед выполнением тест-кейса происходит ресет данных и заполнение их новыми. Плюсы так же есть - можно распаралелить выполнение тестов. (но не верьте мне на слово)
Миграции - механизм организации версионности структуры проекта. Вы можете написать миграцию для изменения местоположения статики (картинки, поменять ссылки в базе и т.д.), или же у вас добавляется новая таблица/поле. Обычно дополняется обратной миграцией, которая восстанавливает исходную структуру. Обязательно для работы в команде или при частом изменении организации данных в проекте, вообще я бы посоветовал использовать их всегда.
Миграции необходимы для внесения изменений в структуру базы данных. Это удобно, когда вы работаете в команде, и вам нужно изменить базу данных. Вы описываете в миграциях изменения, которые хотите внести. После этого другой разработчик может просто запустить эту миграцию на своем сервере, и все ваши изменения будут применены к его базе данных.
Про фикстуры не расскажу. Нет достаточного опыта.