Автоматическое модульное тестирование SQL Server - PullRequest
6 голосов
/ 28 июля 2010

Я знаю, что есть способы автоматизации модульных тестов SQL Server.Но мой вопрос немного другой.

При проверке требований мы пишем серию SQL-скриптов, которые в принципе ничего не возвращают в случае успеха.

В общем, это похоже на

  1. Выполнение запроса
  2. Выполнение другого запроса
  3. Запуск пакета служб SSIS
  4. Выполнение запроса.

И пример с немного большим контекстом

Требование # 1 Описание: Показать SO my проблему

  1. Запрос, чтобы проверить, существует ли целевая таблица и пуста ли
  2. Запрос, чтобы проверить, существует ли исходная таблица и содержит ли данные
  3. Запустить пакет ETIS SSIS
  4. Запрос Проверить правильность передачи данных
  5. Запрос на утверждение бизнес-правил

Мы нашли способ автоматизировать этот процесс, написав специальную программу для анализа выполнения SQL-запросов, загрузки необходимых данных, запуска пакетов служб SSIS и т. Д., А затем сообщать о наличии результата (который показывает сбой теста).,

Это похоже на изобретение колеса заново ... но я не смог найти ничего подобного.Особенно тот, который интегрируется с SSIS.

РЕДАКТИРОВАТЬ:

Кто-то предложил SSISunit, и практически нет документации по нему.Если бы мы использовали модуль служб SSIS, было бы больше похоже на то, как процесс установки подтвердит , что существуют необходимые условия, шаги 1 и 2 выше?Я всегда думал, что процессы установки не делают проверки?

Ответы [ 3 ]

1 голос
/ 31 июля 2010

Мне неясно, касается ли ваш вопрос о модульном тестировании ssis бизнес-правил внутри пакета ssis или это просто средство для достижения цели, возможно, это полезно:

http://ssisunit.codeplex.com/

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

Я бы посмотрел на это как на отправную точку, так как он построенв визуальную студию.

http://msdn.microsoft.com/en-us/library/bb381703(VS.80).aspx

Итак, чтобы ответить на ваш вопрос, да, я думаю, вы изобретаете колесо;но, возможно, существующее колесо не подходит для вашей проблемы;)

0 голосов
/ 04 августа 2010

После месяца исследований не осталось ни одной OTS-программы, которая бы отвечала на этот вопрос.

Мы искали набор инструментов, который позволил бы вам определить, как проверить требование.В нашем случае нам понадобилась общая подпрограмма для выполнения сценариев SQL, загрузки данных и запуска служб SSIS, и единственный способ сделать это в настоящее время - написать собственный инструмент оркестровки.Сэм предоставил полезный способ сделать это с помощью SSIS.Благодаря совету @JasonHorner мы теперь стремимся сделать его похожим на SSISUnit, но на более организованном уровне.

0 голосов
/ 29 июля 2010

Вы можете написать пакет служб SSIS, который выполняет все эти шаги.

Создайте переменную с именем myResult. Вид >> Другие окна >> переменные. Убедитесь, что вы находитесь на уровне потока управления пакета и не нажали на какое-то задание / шаг. Вы хотите, чтобы эта переменная находилась на уровне пакета. Задайте ему тип данных Int32 и установите значение по умолчанию в качестве кода ошибки.

Выполнить задачу SQL, установить для свойства набора результатов значение «Одна строка». Поместите результат в переменную на панели Result Set. Установите имя результата = 0 и имя переменной = пользователь :: myResult.

Проверьте результат, дважды щелкнув строку между этими двумя задачами SQL. Установите для оценки выражения и установите выражения следующим образом: @myResult == 0

Выполнить следующую задачу SQL, поместив результат в ту же переменную

Результат проверки, как и раньше

Выполнить пакетную задачу (выполнить SSIS)

Продолжать по мере необходимости ...

Вы можете запускать пакеты служб SSIS с помощью DTEXEC.exe среды выполнения . Там указаны коды возврата, так что вы можете интегрировать их в другой процесс.


- Дополнительные вещи -

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

В SSIS вы можете создать контейнер цикла по каждому элементу, который будет работать с результирующим набором ADO, хранящимся в переменной. В зависимости от «типа шага» - SQLCMD или пакета служб SSIS, вы можете перейти к выполнению пакета или выполнить инструкцию SQL, используя выражения для изменения соответствующей информации, такой как путь к пакету или инструкция sql. Для простоты вам понадобится поле для сервера, sqlcmd и packagename для каждого шага - для задачи SQL не требуется имя пакета, а для задачи ssis не требуется sqlcmd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...