Как сделать тесты независимыми между собой? Например, для выполнения каждого действия необходима предварительная авторизация пользователя. Должна ли эта функциональность быть вынесена в отдельный тест, а все остальные тесты - основываться на предпосылке, что авторизация прошла успешно? Или авторизацию необходимо использовать в каждом тесте в качестве предусловия?
В экосистеме Ruby Cucumber был написан как раз в качестве средства для описания функциональных тестов.
И там это общепринятая практика писать в духе
Given user authenticated
And viewing /categories page
Т.е. в начале каждого теста мы описываем исходное состояние. При этом если у вас 10 тестов (сценариев) с одинаковым исходным состоянием, то в Cucumber это все выносится в секцию Background, которая описывает исходные состояния, общие для всех сценариев.
Попробуйте следующие варианты:
1) Связку Mink + Bеhat (нотация Gherkin)
2) Codeception (codeception.com/)
В частности вот кажется то, что вы ищите: codeception.com/docs/07-AdvancedUsage
Здесь можно устанавливать зависимости и предусловия (постусловия). Данный framework очень гибко настраивается и расширяется.