Ответ
Before All (или beforeAll, setUpClass) и Before Each (или beforeEach, setUp) — это хуки для настройки состояния перед выполнением тестов. Их ключевое отличие — в времени и частоте выполнения.
Before Allвыполняется один раз перед всеми тестами в тестовом наборе (suite).Before Eachвыполняется перед каждым отдельным тестом (test case) в наборе.
Пример на JavaScript (Jest):
delete global.databaseConnection; // Начальное состояние
beforeAll(async () => {
// Выполнится 1 РАЗ для всего файла
console.log('Устанавливаю соединение с тестовой БД');
global.databaseConnection = await connectToTestDB();
});
beforeEach(() => {
// Выполнится перед КАЖДЫМ тестом (test() / it())
console.log('Очищаю таблицу пользователей');
global.databaseConnection.clearTable('users');
});
test('Добавление пользователя', () => {
// Здесь БД уже подключена и таблица очищена
global.databaseConnection.insertUser({name: 'Alice'});
});
test('Поиск пользователя', () => {
// Здесь БД все еще подключена, но таблица снова очищена
const users = global.databaseConnection.findUsers();
expect(users).toEqual([]);
});
Когда что использовать в QA-автоматизации:
Before All: Для дорогостоящих и медленных операций, результат которых не меняется между тестами (подключение к БД, запуск Selenium Grid, развертывание тестового стенда).Before Each: Для сброса состояния к известной точке, чтобы тесты были изолированными и независимыми (очистка БД, сброс кэша, создание нового экземпляра Page Object).