Всем привет. Дали задачу, написать скрипт на Python, который будет проверять работоспособность T-SQL-процедуры со сложной логикой. Предлагается использовать связку pytest + pymsql. Времени полно, хочу, чтобы код скрипта был близок идеальному с точки зрения архитектуры и информативности результатов. Вот только проблема в том, что раньше никогда не писал на Python и автоматические тесты не то направление работы, которой обычно занимаюсь, поэтому прошу советов знатоков.
Разбил задачу на несколько этапов:
(1) Подключение/Отключение к/от БД:
(2) Insert/Delete в/из БД записи для теста
(3) Выполнение ХП, проверка изменений в полях записи для теста
Для (1) реализовал фикстуру:
import pytest
import pymssql
HOST_NAME = "XXX.XXX.XXX.XXX"
USER_NAME = "XXXXXX"
USER_PASSWORD = "XXXXXX"
DATABASE_NAME = "XXXXXX"
@pytest.fixture(scope="session")
def con_to_xxxxxx(request):
con = pymssql.connect(HOST_NAME, USER_NAME, USER_PASSWORD, DATABASE_NAME,
as_dict=True)
def fin():
con.close()
request.addfinalizer(fin)
return con
Как и где принято хранить параметры для функции/й (вроде HOST_NAME, USERT_NAME, …)? В том же файле в котором функция или в отдельном? Как хранить? Как константы или в какой-либо структуре? Стоит ли выносить вышеприведенную фикстуру в отдельный файл, на случай, если в дальнейшем нужно будет тестировать другие ХП в рамках данной БД? Для (2) запись будет генерироваться конкретно под данную ХП, ее использование в других ХП маловероятно. В связи с этим делать (2) в отдельной фикстуре, в функции теста или как-то еще? Т.е.:
Вариант 1:
@pytest.fixture(scope="function")
def prep_xxxxxx(request, con_to_xxxxxx):
cur = con_to_xxxxxx.cursor()
cur.Execute( ... - insert записи
def fin():
cur.Execute( ... - удаление записи
request.addfinalizer(fin)
return cur
def test_auto_app_xxxxxx(prep_xxxxxx):
...
assert ...
Что на ваш взляг стоит логировать?
Вариант 2:
def test_auto_app_xxxxxx(con_to_xxxxxx):
...
cur = con_to_xxxxxx.cursor()
cur.Execute( ... - insert записи
...
assert ...
...
cur.Execute( ... - удаление записи
Вариант 3
???