Skip to content

AlexandrMov/sqlbehave

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sqlbehave

Testing SQL by BDD method.

Установка осуществляется из pypi-репозитория:

pip install sqlbehave

После установки будет доступен скрипт для управления sqlbehave проектами sqlbehave-admin.py. Также он формирует python-скрипты для behave из файлов .sql, которые являются тестами.

Для того, чтобы начать проект создайте директорию проекта и настройте подключение к серверу(-ам):

mkdir AdWorks
cd AdWorks

cat >> settings.py
link_config = {
  'adworks': "mssql+pymssql://login:password@mssqlserver/AdventureWorks",
}

Весь код разбивается на модули. Чтобы создать новый модуль выполните команды:

sqlbehave-admin.py startmodule -m NewModule
cd NewModule

Далее можно приступать к написанию feature-файлов и их реализации в директории steps в файлах с расширением .sql. Например, простой тест калькулятора будет выглядеть следующим образом:

cd features

cat >> calc.feature
Scenario: Сложение двух целых чисел
Given Значение х = 2
And Значение y = 2
When Вызывается процедура test.binary_sum с результатом z
Then Результат z = 4

Реализация тестов выполняется в файлах .sql. Предикаты "Given Значение х = 2":

cat >> steps/"given Значение {var} = {value}.sql"
--!connect=adworks
--линк из settings.py

IF @context IS NULL
	SET @context = '<context />'

SET @context.modify('insert <alias></alias> as first into (/context[1])')
SET @context.modify('insert attribute name {sql:variable("@var")} into (/context[1]/alias[1])')
SET @context.modify('insert attribute value {sql:variable("@value")} into (/context[1]/alias[1])')

Предикат "When Вызывается процедура test.binary_sum с результатом z":

cat >> steps/"when Вызывается процедура test.binary_sum с результатом {var}.sql"
--!connect=adworks

DECLARE @x INT,
        @y INT,
        @z INT
        
SELECT @x = @context.value('/context[1]/alias[@name="x"][1]/@value[1]', 'INT')
SELECT @y = @context.value('/context[1]/alias[@name="y"][1]/@value[1]', 'INT')

EXEC test.binary_sum
  @x = @x,
  @y = @y,
  @z = @z OUTPUT

SET @context.modify('insert <alias></alias> as first into (/context[1])')
SET @context.modify('insert attribute name {sql:variable("@var")} into (/context[1]/alias[1])')
SET @context.modify('insert attribute value {sql:variable("@z")} into (/context[1]/alias[1])')

Предикат "Then Результат z = 4":

cat >> steps/"Then Результат {var} = {val}.sql"
--!connect=adworks

DECLARE @z INT,
        @res INT
        
SELECT @res = CAST(@val AS INT)
SELECT @z = @context.value('/context[1]/alias[@name=sql:variable("@var")][1]/@value[1]', 'INT')

IF @z != @res
  RAISERROR('Ошибка в сложении!', 16, 1);

При выполнении кода будут доступы дополнительные переменные:

  • @context XML - содержит данные контекста, которые отображены в виде XML. Используется для передачи информации от одних предикатов к другим предикатам и имеет произвольную форму, которая определяется нуждами автора тестов.
  • @table XML - содержит XML-представление таблицы после объявления предиката. Таблица для данного предиката будет выглядеть следующим образом:
<context>
    <table>
        <!-- param_name - наименование столбца; param_value - значение в столбце -->
        <row param_name="custom_field" param_value="3">
        <row param_name="other_field" param_value="Тестовая запись">
        <!-- и так далее... -->
    </table>
</context>

В случае критической ошибки будет произведён откат только текущего шага!

Для того, чтобы сформировать python-скрипты для исполнения тестов выполните команду:

# создаст файлы environment.py и NewModule.py, в которых происходит исполнение sql на MSSQL-сервере
sqlbehave-admin.py mksteps

# запуск сценариев тестирования
cd NewModule
behave

About

Testing SQL by BDD method

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages