Именование тестов и переменных

Правильное именование тестов и переменных в автоматизированном тестировании играет ключевую роль для читаемости, сопровождения и масштабируемости кода. В Playwright, как и в других фреймворках для E2E-тестирования, структурирование названий напрямую влияет на эффективность работы команды и скорость выявления ошибок.


Именование тестов

Тесты в Playwright обычно описываются с помощью функции test(). Имя теста должно быть дословным описанием поведения, которое проверяется.

test('пользователь может успешно авторизоваться с валидными данными', async ({ page }) => {
  // тестовые шаги
});

Рекомендации по именованию тестов:

  1. Глагол в начале – описывает действие, например: «создает», «удаляет», «отображает».
  2. Конкретное поведение – что именно проверяется.
  3. Контекст или условие – если тест зависит от определённых условий, их следует указать.

Примеры хороших названий:

  • 'отображает сообщение об ошибке при неверном пароле'
  • 'создает новую задачу в списке дел'
  • 'удаляет пользователя из базы данных'

Примеры плохих названий:

  • 'тест1'
  • 'проверка логина'
  • 'функционал кнопки'

Четкое имя теста позволяет понять его назначение без необходимости открывать тело функции.


Именование переменных

Переменные в тестах Playwright делятся на несколько типов: страницы (page), элементы (locator), данные тестов (testData) и вспомогательные функции. Все они должны иметь описательные имена, соответствующие их назначению.

const loginButton = page.locator('#login-button');
const usernameInput = page.locator('#username');
const invalidPassword = 'wrongPassword123';

Основные правила:

  1. Использовать camelCase для переменных и функций (userEmail, submitForm) и PascalCase для классов (LoginPage).

  2. Избегать аббревиатур, если они не общеприняты в проекте.

  3. Отражать тип данных или роль переменной, если это важно для понимания кода. Например:

    • userList — массив пользователей
    • errorMessage — сообщение об ошибке
    • submitButton — кнопка отправки формы

Именование локаторов

Локаторы — один из ключевых элементов Playwright. Их имена должны описывать, что представляет элемент, а не как он находится.

const submitButton = page.locator('button[type="submit"]');
const searchInput = page.locator('#search');
const userCardTitle = page.locator('.user-card .title');

Нежелательно использовать имена вроде button1, inputField, div2, так как они не дают понимания назначения элемента.


Группировка и структуры тестов

Playwright поддерживает describe() для группировки связанных тестов. Имена блоков describe должны описывать функциональный модуль или сценарий, что облегчает навигацию по тестам.

describe('Авторизация пользователя', () => {
  test('пользователь может войти с валидными данными', async ({ page }) => {});
  test('отображается сообщение об ошибке при неверном пароле', async ({ page }) => {});
});

Советы по именованию блоков:

  • Использовать существительные во множественном числе, если группа объединяет несколько тестов одной функции: 'Пользователи', 'Формы обратной связи'.
  • Избегать общих слов вроде 'Тесты' или 'Функционал'.

Именование файлов тестов

Файлы тестов Playwright обычно хранятся в папке tests или e2e. Правильное именование файлов повышает удобство поиска и понимание назначения тестов.

  • Использовать snake_case или kebab-case для имен файлов: login.spec.js, user-registration.spec.js.
  • Указывать контекст или модуль, который тестируется, в имени файла.
  • Добавлять .spec.js или .test.js для обозначения тестового файла.

Практика DRY в именовании

Избегание дублирования слов в названиях тестов и переменных помогает поддерживать код чистым и понятным. Например, если в блоке describe('Авторизация пользователя') все тесты связаны с авторизацией, нет необходимости повторять слово 'авторизация' в каждом имени теста:

describe('Авторизация пользователя', () => {
  test('входит с валидными данными', async ({ page }) => {});
  test('выдает ошибку при неверном пароле', async ({ page }) => {});
});

Примеры комплексного подхода

describe('Создание задач', () => {
  const newTaskTitle = 'Купить продукты';
  const newTaskDescription = 'Молоко, хлеб, яйца';

  test('добавляет новую задачу в список', async ({ page }) => {
    await page.locator('#task-title').fill(newTaskTitle);
    await page.locator('#task-desc').fill(newTaskDescription);
    await page.locator('#add-task-button').click();
    await expect(page.locator('.task-item')).toContainText(newTaskTitle);
  });

  test('не позволяет создать задачу без заголовка', async ({ page }) => {
    await page.locator('#task-title').fill('');
    await page.locator('#add-task-button').click();
    await expect(page.locator('.error-message')).toHaveText('Заголовок обязателен');
  });
});

В этом примере:

  • Переменные имеют понятные имена (newTaskTitle, newTaskDescription).
  • Названия тестов отражают конкретное поведение.
  • Группировка через describe устраняет повторение контекста.

Правильное именование тестов и переменных в Playwright обеспечивает чистоту, читаемость и поддержку тестового кода, минимизирует ошибки при масштабировании проектов и упрощает работу командной разработки.