Как очистить в pytest, если setup_class не удалось? - PullRequest
0 голосов
/ 08 октября 2018

Моя тестовая настройка:

class TestClass:
    @classmethod
    def setup_class(cls):
       create_table(tb1)
       create_table(tb2)

    @classmethod
    def teardown_class(cls):
       drop_table(tb1)
       drop_table(tb2)   

    def setup_method(self, method):
        func()

    def teardown_method(self, method):
        func()

    def test_tc1(self):
        <tc_content>
        assert 

Выше модуля не удалось создать таблицу tb2 в setup_class, но успешно создана таблица tb1.Он существует с ошибкой, но без выполнения teardown_class.Это создает ошибку «таблица tb1 существует» при следующем запуске модуля.Есть ли способ удалить tb1 перед выходом из модуля, даже если создание tb2 не удалось.

1 Ответ

0 голосов
/ 09 октября 2018

Чтобы проиллюстрировать, как можно реорганизовать код, чтобы использовать вместо него фиксаторы:

import pytest


@pytest.fixture(name='database_with_tables', scope='module')
def _database_with_tables():
    try:
        create_table(tb1)
        create_table(tb2)
        yield None # usually we would pass around a database connection / session
    finally:
        drop_table(tb1)
        drop_table(tb2)


@pytest.mark.usefixtures("database_with_tables")
class TestClass:
    def test_tc1(self):
        <tc_content>
        assert 

Вам по-прежнему необходимо обрабатывать исключения, возникающие при создании таблицы.В большинстве случаев вы также захотите передать соединение с базой данных в метод теста, и в этом случае pytest.mark.usefixtures больше не потребуется.Преимущество светильников в том, что они объявляют, что вам нужно для теста, а не как.Параметр scope также можно установить на session, чтобы жить дольше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...