Привет Вова,
1. На самом деле, для работы с данными в авто-тестах, какой-то одной единственной стратегии нет, это означает, что вы можете выбрать любую.
Все зависит от того, какую долю ответственности вы можете на себя взять
Вот, например, если вы создаете все через UI, то не берете на себя ответственность за правильное создание данных (сущностей) в базе данных: если у вас получилось добавить некорректные данные через UI приложения -- значит проблема в приложении... зато тесты будут идти долго.
Использование HTTP запросов может быть золотой серединой. Если мы говорим о слое API (RESTful API?), то можно использовать его -- опять же, если что-то пойдет не так -- то возможно в самом приложении и в слое API живет баг. Через API приложения, вы можете проверить, существуют ли нужные вам данные, и, при необходимости, создать их.
Ну, и наконец, прямая работа с базой данных, а особенно создание и модификация (чтение -- самая безвредная операция), предполагают что вы берете на свой код полную ответственность. Если что-то пойдет не так -- то в 90% будут виноваты тесты
Зато это может быть самый быстрый способ залить данные.
Выбор стратегии тут зависит от полноты понимания работы приложения и взаимодействия с разработчиками.
Я сейчас стараюсь придерживаться принципа юнит-тестов:
1. ACT -- подготовить все необходимое для теста, в том числе данные
2. ARRANGE -- выполнить необходимые действия для теста
3. ASSERT -- проверки
Тем не менее, часто создаю новые сущности в приложении, которые нужны для перехода на следующий шаг внутри PageObject, с рандомными именами (или датой и временем в имени), при этом их не удаляя после теста.
Такой мусор в базе данных, помогает искать новые случайные баги. После чего, базу данных можно раз в месяц перезалить из чистой копии. В общем, тут очень много вариантов, и выбор стратегии работы с данными -- за вами
2 Отличная идея по поводу API / HTTP тестов. В этом случае, на уровне UI, вам будет достаточно простого набора смоук тестов и небольшого набора end to end сценариев , а остальную логику работы приложения, вы можете покрыть интеграционными тестами через API приложения.