Это на самом деле не модульный тест: это какой-то другой вид теста ... Это означает, что вам, вероятно, придется смотреть за пределы обычных платформ модульного тестирования - хотя, конечно, вы можете использовать существующие инструменты для создания того, что вы хотите.
Что бы я сделал, это создал новый набор тестов вдали от моих обычных тестов django и определил в каждом тесте атрибут, определяющий его «продолжительность жизни»: первую и последнюю миграции, для которых вы ожидаете, что он пройдет.
Затем напишите скрипт, который в основном делает это:
for m in range(latestMigrationNumber):
name = findNameOfMigrationNumber(m) # look in the migrations directory
executeMigration(name) # os.system(), subprocess.*, etc
runTheTests()
Вы можете использовать декоратор, чтобы указать «продолжительность жизни» для каждого теста, возможно, расширив эту концепцию декоратора «включить / отключить» , чтобы сравнить текущий номер миграции (который вы должны хранить глобально где-нибудь) с тестами, которые вы ожидаете пройти, и сделать так, чтобы он поменял результат «успешно прошел / не прошел» (поэтому, если тест проходит вне срока его службы, декоратор делает его неудачным, и наоборот).
Чтобы проверить обратную миграцию, просто используйте ту же схему, но выполните цикл в обратном направлении.