Чтобы дополнить ответ hpk42 , вы также можете использовать pytest-steps для выполнения инкрементального тестирования, это может помочь вам, в частности, если вы хотите поделиться каким-либо инкрементным состоянием / промежуточным состояниемрезультаты между шагами.
С этим пакетом вам не нужно помещать все шаги в классе (вы можете, но это не обязательно), просто украсьте вашу функцию "test suite" с помощью @test_steps
.
РЕДАКТИРОВАТЬ: есть новый режим «генератор», чтобы сделать его еще проще:
from pytest_steps import test_steps
@test_steps('step_first', 'step_conversion', 'step_a_works_with_b')
def test_suite_with_shared_results():
a = mylib.get_a()
yield
b = mylib.convert_a_to_b(a)
yield
assert mylib.works_with(a, b)
yield
LEGACY answer:
Вы можете добавить параметр steps_data
в свою тестовую функцию, если хотитеразделить объект StepsDataHolder
между вашими шагами.
Ваш пример напишет:
from pytest_steps import test_steps, StepsDataHolder
def step_first(steps_data):
steps_data.a = mylib.get_a()
def step_conversion(steps_data):
steps_data.b = mylib.convert_a_to_b(steps_data.a)
def step_a_works_with_b(steps_data):
assert mylib.works_with(steps_data.a, steps_data.b)
@test_steps(step_first, step_conversion, step_a_works_with_b)
def test_suite_with_shared_results(test_step, steps_data: StepsDataHolder):
# Execute the step with access to the steps_data holder
test_step(steps_data)
Наконец, обратите внимание, что вы можете автоматически пропустить или пропустить шаг, если другой не удался с помощью @depends_on
, проверьте документацию для деталей.
(кстати, я автор этого пакета;))