Обработка статусов стейт-машины в тестах
Пишу тест, реагирующий на статус, возвращаемый сервисом. Статусы возвращаются поочередно, в строгом порядке. Если сервис отдал последующий статус, он удаляется из списка STATES, и на следующей итерации мы ожидаем, что сервис будет возвращать один из статусов, оставшихся в списке (в start мы уже больше не попадем, его можно убрать).
Все работает, но есть проблема - если сервис очень быстро попал в один из финальных статусов, то мы для каждого промежуточного статуса мы будем делать по лишнему вызову в сервис. Как можно пропустить запуск теста с параметрами validating и progress, если, например, мы сразу попали в report?
@pytest.mark.parametrize("state", [
"start",
"validating"
"progress",
"report",
"stop"
])
def test_x(self, state):
STATES = [
"start",
"validating"
"progress",
"report",
"stop"
]
if state in STATES:
STATES.remove(state)
response = url.request_to_service().json()
assert response.get("state") in STATES