Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Тестирование логики  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1067
Вопрос форумчанам - есть ли у вас тестирование логики ХП и триггеров? И если да, то как/на чем?
Пример: есть ХП, которая с указанными входными параметрами делает обновление в пяти таблицах, удаление в трех и вставку в одну. После изменения ХП, надо проверить, что затронутые таблицы остались теми же.
7 сен 17, 10:43    [20777668]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование логики  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57580
CyberMax> После изменения ХП, надо проверить, что затронутые таблицы остались теми же.

В смысле, "изменились как надо" ?

P.S. Как, как... Функциональными тестами на
синтетических (или куске реальных) данных.

Posted via ActualForum NNTP Server 1.5

7 сен 17, 10:54    [20777710]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование логики  [new]
miwaonline
Member

Откуда:
Сообщений: 2232
CyberMax,

Есть. Используется маленькая самописная утилитка на питоне. На вход принимает файл в формате json с указаниями какие запросы выполнить и какой ожидать результат. Результатом может быть не только число/строка, но и ошибка и равенство ("field1 = field2) и неравенство ("id > 0").
13 сен 17, 01:59    [20791595]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование логики  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57580
miwaonline> какой ожидать результат. Результатом может быть не только число/строка,
miwaonline> но и ошибка и равенство ("field1 = field2) и неравенство ("id > 0").

Ну т.е. DML-процедуры ей не проверить...

Posted via ActualForum NNTP Server 1.5

13 сен 17, 08:35    [20791749]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование логики  [new]
miwaonline
Member

Откуда:
Сообщений: 2232
Гаджимурадов Рустам,

Результат выполнения вполне себе проверить можно. Если я правильно понял CyberMax-a, ему надо убедиться что после выполнения процедуры данные в таблицах соответствуют ожидаемым. Собственно, для выполнения (в том числе) похожих задач оно и используется.
13 сен 17, 10:20    [20792004]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование логики  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 1539
CyberMax, что ты имеешь в виду под "затронутые таблицы остались теми же"? Убедится, что зависимости остались теми же?
13 сен 17, 10:26    [20792023]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование логики  [new]
CyberMax
Member

Откуда: Хабаровск
Сообщений: 1067
rdb_dev
CyberMax, что ты имеешь в виду под "затронутые таблицы остались теми же"?

Что не были изменены другие таблицы и что состав измененных таблицы остался тем же самым.
13 сен 17, 10:45    [20792105]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование логики  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57580
miwaonline> Результат выполнения вполне себе проверить можно.
miwaonline> данные в таблицах соответствуют ожидаемым.

А как ты передашь набор данных (и тем более несколько) в свой скрипт?

CyberMax> Что не были изменены другие таблицы

ИМХО, проверять что другие таблицы не изменены, это какой-то маразм.
А вот проверять данные (ну и связность, если хочется вручную) без их
копии или ещё одной ХП/EB/клиента (скрипта) нереально. Да и проще
просто сверить два (перечня) НД между собой.

Posted via ActualForum NNTP Server 1.5

13 сен 17, 11:15    [20792199]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование логики  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 1539
CyberMax
rdb_dev
CyberMax, что ты имеешь в виду под "затронутые таблицы остались теми же"?

Что не были изменены другие таблицы и что состав измененных таблицы остался тем же самым.
Как состав таблиц может остаться тем же, если в логику ХП заложено изменение таблиц - "делает обновление в пяти таблицах, удаление в трех и вставку в одну"? Тебе тест на регрессию нужен? Возьми две одинаковые базы, в одной прогони старый скрипт, а в другой новый, затем сделай выборку из этих баз и сравни результаты (естественно программно). Конечно, такое сравнение не дает 100% гарантии отсутствия регрессии, но хоть что-то...
13 сен 17, 11:54    [20792332]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование логики  [new]
Болтаювпт
Member

Откуда:
Сообщений: 54
Гаджимурадов Рустам
miwaonline> Результат выполнения вполне себе проверить можно.
miwaonline> данные в таблицах соответствуют ожидаемым.

А как ты передашь набор данных (и тем более несколько) в свой скрипт?
Холодное копирование в эталонную тестовую базу. В эталоне - отдельные записи на отдельные тесты, в тестах - хардкод соответствующих id, можно с комментариями.
13 сен 17, 12:30    [20792438]     Ответить | Цитировать Сообщить модератору
 Re: Тестирование логики  [new]
miwaonline
Member

Откуда:
Сообщений: 2232
Гаджимурадов Рустам
miwaonline> Результат выполнения вполне себе проверить можно.
miwaonline> данные в таблицах соответствуют ожидаемым.

А как ты передашь набор данных (и тем более несколько) в свой скрипт?

По-всякому: можно sql-скрипт выполнить перед запуском теста, можно bash/python/cmd. Можно непоредственно в тесте нужные данные вносить:
{
  "id": "001",
  "name": "first test",
  "author": "developer",
  "description": "This is description of a test.",
  "data_files": ["test1-1.sql", "test1-2.sql"],
  "test_files": ["test1.sh", "test1.py"],
  "test_statements": 
  [
    {"sql": "insert into t1(a,b,c) values(1,2,3)"},
    {"sql": "execute procedure p1"},
    {"sql": "select a as t1, b as t2, c as t3 from t1", 
     "expect_values": {"t1": "1"},
     "expect_equals": ["t1", "t2", "t3"]
    }
  ]
}


Сам скрипт на гитхабе валяется: https://github.com/miwaonline/fdbtest Правда оно писалось для внутреннего употребления, так что с оформлением и документацией все плохо. Но если интерессно, реальных примеров набросать могу. Да и код там не особо сложный.
13 сен 17, 13:17    [20792632]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить