Обновите sql fixture с другими sql

Для списка автоматизированных тестов мы используем sql-фикстуры для подготовки базы данных в нужном состоянии. Проблема, однако, в том, что база данных часто обновляется, где столбцы могут быть добавлены или удалены из разных таблиц. Это делается с другими файлами sql. Возможно, что измененные таблицы упоминаются в таблицах sql.

Есть ли какой-нибудь способ обновить существующие светильники sql обновлениями базы данных sql. Возможно, что несколько приборов перекрываются в таблицах, поэтому каждый прибор должен обновляться независимо.

1 ответ

Прежде всего, я постараюсь разобраться в процессе миграции, если дела действительно идут слишком быстро. Схемы действительно меняются, но если вы тратите значительное время на то, чтобы не отставать от этого, стоит сделать шаг назад, чтобы попытаться стабилизировать ситуацию.

Следующее, что нужно сделать, это минимизировать влияние изменений схемы: если у вас есть серия монолитных приборов, которые устанавливают целые состояния данных за один раз, разбейте их на части и используйте композиционный подход. Например, если у вас есть users Таблица, должен быть только один прибор, который вставляет новых пользователей. Другие приборы, которые зависят от пользовательских данных, должны полагаться на пользовательские приборы, чтобы позаботиться об этом, прежде чем вставлять то, что им нужно. Помните принцип единой ответственности и составьте состояние данных для данного теста, вызвав цепочку дискретных, четко определенных приборов. Таким образом, если столбец добавлен или удален из usersВам нужно всего лишь заменить один прибор.

Наконец, если вы действительно хотите автоматизировать вещи, вы начинаете создавать код. Здесь есть одно важное предостережение: очень трудно генерировать тестовые данные, с которыми люди могут легко работать во время отладки. Если вы хорошо понимаете бессмысленную тарабарщину во всех ваших текстовых полях, то это не нарушитель правил, но это то, о чем нужно знать.

Реляционные базы данных предоставляют структуру и метаданные в информационной схеме, поэтому вы можете запрашивать их точно так же, как и свои собственные таблицы. Вам нужно будет обратиться к документации для вашего конкретного поставщика базы данных, так как между ними есть различия, но вы можете, например, перечислить таблицы в вашей базе данных с запросом SELECT * FROM information_schema.tables, Аналогично для information_schema.columns; другие таблицы описывают первичные и внешние ключи и ограничения; и так далее. Используйте эту информацию для создания запросов, которые вставляют правильно сформированные данные, и вы готовы к гонкам. Это почти наверняка больше проблем, чем оно того стоит.

Другие вопросы по тегам