Я хочу запустить два разных теста один за другим в двух разных запусках Pytest, а затем связать функцию очистки, чтобы всегда запускаться после второго теста. Но также должна быть гибкость, чтобы просто запускать только функции очистки.
Я добился взаимодействия между первым и вторым тестом с использованием кеша pytest. Первый тест что-то делает и записывает необходимые данные в кэш Pytest. Второй тест при запуске с другой командой pytest читает из этого кэша и делает что-то еще. Я использую переменную self тестового класса в качестве кэша, выполняя заданные атрибуты и получая атрибуты в нескольких из ловушек pytest.
В этом случае я показываю очистку как тест, но я не хочу вызывать ееtest_
, так как это не тест, и результаты этого не должны быть показаны пользователю.
# filename test_cases.py
class TestCase1:
@pytest.mark('one')
def test_one(self, fixture1):
# fixture1.y = 1
self.x = 1
assert self.x + fixture1.y == 2
@pytest.mark('two')
def test_two(self, fixture2):
# fixture2.y = 2
self.x += fixture2.y
assert self.x == 3
@pytest.mark('cleanup')
@pytest.mark('two')
@pytest.mark.run('after=test_two')
def test_cleanup(self, fixture):
# Let's say this cleans stuff
fixture.y = 0
Эта серия команд запускает полные тесты.
pytest test_cases.py -m "one"
Собран 1 тест ... (test_one)
pytest test_cases.py -m "two"
Собрано 2 теста .. (test_two и cleanup)
Во второй команде она показывается как два теста, и в этом вся проблема. Есть ли способ исключить очистку из результатов, но выполнить очистку?
Или все-таки можно добиться того же, изменив test_cleanup
на cleanup
? Подвох в том, что функция очистки, очевидно, различна для разных тестовых случаев, включая приборы, которые она принимает в качестве аргументов.