Pytest- Как удалить созданные данные после каждой тестовой функцииPython

Программы на Python
Гость
Pytest- Как удалить созданные данные после каждой тестовой функции

Сообщение Гость »

У меня есть проект FastAPI + SQLAlchemy, и я использую Pytest для написания модульных тестов для API.
В каждой тестовой функции я создаю некоторые данные в некоторых таблицах (пользовательская таблица). , таблица сообщений, таблица комментариев и т. д.) с использованием SQLAlchemy. Эти созданные данные в каждой тестовой функции останутся в таблицах после завершения тестовой функции и повлияют на другие тестовые функции.
Например, в первой тестовой функции я создаю 3 сообщения и 2 пользователей, то во вторых тестовых функциях эти 3 сообщения и 2 пользователя остались в таблицах, что делает мои ожидания от теста неверными.
Ниже приведена моя настройка для pytest:

Код: Выделить всё

@pytest.fixture
def session(engine):
Session = sessionmaker(bind=engine)
session = Session()
yield session
session.rollback()  # Removes data created in each test method
session.close()  # Close the session after each test
Я использовал session.rollback() для удаления всех созданных данных во время сеанса, но он не удаляет данные.
И Ниже приведены мои тестовые функции:

Код: Выделить всё

class TestAllPosts(PostBaseTestCase):

def create_logged_in_user(self, db):
user = self.create_user(db)
return user.generate_tokens()["access"]

def test_can_api_return_all_posts_without_query_parameters(self, client, session):
posts_count = 5
user_token = self.create_logged_in_user(session)
for i in range(posts_count):
self.create_post(session)

response = client.get(url, headers={"Authorization": f"Bearer {user_token}"})
assert response.status_code == 200
json_response = response.json()
assert len(json_response) == posts_count

def test_can_api_detect_there_is_no_post(self, client, session):
user_token = self.create_logged_in_user(session)
response = client.get(url, headers={"Authorization": f"Bearer {user_token}"})
assert response.status_code == 404
В последней тестовой функции вместо 404 я получаю 200 с 5 сообщениями (из последней тестовой функции)
Как я могу удалить созданные данные в каждой тестовой функции после завершения тестовой функции?

Подробнее здесь: https://stackoverflow.com/questions/781 ... t-function

Вернуться в «Python»