Я недавно начал писать тестовые коды, и мне стало любопытно настроить базу данных для тестирования.
Допустим, у моего веб-сервера есть функция, которая вычисляет все данные от пользователей и проверяет вывод.
В этом случае мне потребуется много исходных (оставшихся) данных в моей базе данных.
Но в другом случае мне нужно проверить, перенаправляет ли мой веб-сервер пользователя на нужную страницу в соответствии с к существованию указанных данных c.
Это мой код тестового прибора, и, как вы можете видеть, в db.teardown
он сбрасывает все данные.
@pytest.fixture(scope='session', autouse=True)
def app(request):
settings_override = {
'DEBUG': False,
'TESTING': True,
'SQLALCHEMY_DATABASE_URI': f'{DB_CONFIG["VENDOR"]}://{DB_CONFIG["USER_NAME"]}:{DB_CONFIG["PWD"]}@{DB_CONFIG["HOST"]}/{DB_CONFIG["SCHEMA"]}'
}
app = _app
app.config.update(settings_override)
ctx = app.app_context()
ctx.push()
def teardown():
ctx.pop()
request.addfinalizer(teardown)
return app
@pytest.fixture(scope='session', autouse=True)
def db(app, request):
_db.app = app
_db.create_all()
def teardown():
_db.drop_all()
request.addfinalizer(teardown)
return _db
@pytest.fixture(scope='session', autouse=True)
def client(app):
_client = app.test_client()
def get_user_config():
conf = {
'user_imin': USER_CONFIG['user_imin'],
'user_token': encrypt_imin_random(USER_CONFIG['user_imin']),
}
return conf
_client.application.config.update(get_user_config())
return _client
@pytest.fixture(scope='function', autouse=True)
def session(db, request):
conn = db.engine.connect()
transaction = conn.begin()
options = dict(bind=conn, binds={})
session = db.create_scoped_session(options=options)
db.session = session
def teardown():
transaction.rollback()
conn.close()
session.remove()
request.addfinalizer(teardown)
return session
Мои данные все равно будут если я закомментирую строку, но не смогу проверить некоторые случаи, которые необходимо выполнить с пустым набором данных.
Я подумал, что для начала нужно настроить больше приборов, чтобы я мог
Я думаю, было бы неплохо, если бы у тестового примера была возможность решить, выполняет ли он свою работу так, как будто набор данных пуст или нет.
Если нет, то каков наилучший вариант для настройки теста? Люкс в моем случае?