Что такое принцип KISS в контексте написания автотестов?

Ответ

В контексте QA Automation, принцип KISS (Keep It Simple, Stupid) означает, что каждый тест должен решать одну четкую задачу максимально простым и прямолинейным способом. Сложность — главный враг стабильности и поддерживаемости тестовой базы.

Как я применяю KISS:

  1. Один тест — одна ответственность. Тест проверяет один конкретный сценарий или бизнес-правило.
  2. Минимум шагов и проверок (assertions). Я включаю только те шаги, которые абсолютно необходимы для проверки целевого функционала.
  3. Прямые и понятные селекторы. Использую data-testid атрибуты, а не сложные XPath, зависящие от верстки.
  4. Изоляция тестов. Каждый тест независим и сам управляет своими тестовыми данными (setup/teardown).

Пример нарушения и следования принципу:

// НЕ KISS: Тест делает слишком много, смешивает логику, сложные условия.
@Test
public void testUserCheckoutFlow() {
    // Шаг 1: Логин
    login("user", "pass");
    assert dashboard.isLoaded();
    // Шаг 2: Поиск товара
    search("laptop");
    assert searchResults.hasItems();
    // Шаг 3: Добавление в корзину... и т.д.
    // Слишком длинный и хрупкий тест. Если падает логин, мы не проверим checkout.
}

// KISS: Разбиваем на несколько простых, сфокусированных тестов.
@Test
public void testLoginWithValidCredentials() {
    LoginPage loginPage = new LoginPage(driver);
    HomePage homePage = loginPage.login(VALID_USER, VALID_PASS);
    assertTrue("Login should be successful", homePage.isUserMenuDisplayed());
}

@Test
public void testAddItemToCartFromCatalog() {
    // Предусловие: пользователь уже на странице каталога
    CatalogPage catalog = new CatalogPage(driver);
    catalog.addFirstItemToCart();
    assertEquals("Cart badge should show 1 item", "1", catalog.getCartBadgeCount());
}

Простые тесты легче читать, отлаживать, и они реже ломаются из-за незначительных изменений в приложении.

Ответ 18+ 🔞

А, слушай, про этот ваш KISS! Ну, ёпта, это же вообще основа основ, как дышать. Если ты в автоматизации не понял эту простую хуйню — дальше можно даже не соваться, всё развалится, как карточный домик от чиха.

Смысл-то какой? Keep It Simple, Stupid. То есть, блядь, делай проще, тупица! Не надо выёбываться и строить тесты, от которых потом сам через месяц офигеваешь. Сложность — это главный враг, который тебе ночью спать не даст, потому что флаки посыпятся овердохуища.

Как я это применяю, чтобы не сойти с ума:

  1. Один тест — одна фича. Одна проверка, один сценарий, одна ответственность. Не пытайся в одном тесте проверить логин, покупку, оплату и отзыв. Это пиздопроебибна идея. Если упадет логин — ты нихуя не узнаешь про оплату.
  2. Минимум телодвижений. Только те шаги, без которых проверка не состоится. Никаких лишних кликов «на всякий случай». Каждый лишний шаг — это потенциальная точка отказа. Волнение ебать, а толку?
  3. Селекторы — прямые, как палка. Забудь про эти выкрутасы с XPath длиной в три экрана, которые ломаются от добавления одной div. data-testid — твой лучший друг. Ищется быстро, ломается редко. Всё, что сложнее — это уже хитрая жопа, которая тебя подведёт.
  4. Тесты — как монахи-отшельники. Каждый живёт сам по себе, сам себе данные создаёт и прибирает за собой. Никаких зависимостей. Упал один — остальные даже не чихнули. Доверия ебать ноль между тестами — это правильно.

Смотри, вот наглядняк, где всё понятно:

// НЕ KISS: Это пиздец, а не тест. Сам от себя охуеешь через неделю.
@Test
public void testUserCheckoutFlow() {
    // Тут и логин, и поиск, и корзина... Бля, это же целый пользовательский сценарий!
    // Упадёт что-то в начале — нихуя не ясно, что сломалось в конце.
}

// KISS: Разделяй и властвуй. Просто, как три копейки.
@Test
public void testLoginWithValidCredentials() {
    // Только логин. Упал? Значит, проблема с логином. Всё.
    LoginPage loginPage = new LoginPage(driver);
    HomePage homePage = loginPage.login(VALID_USER, VALID_PASS);
    assertTrue("Login should be successful", homePage.isUserMenuDisplayed());
}

@Test
public void testAddItemToCartFromCatalog() {
    // Только добавление в корзину. Чисто, аккуратно.
    CatalogPage catalog = new CatalogPage(driver);
    catalog.addFirstItemToCart();
    assertEquals("Cart badge should show 1 item", "1", catalog.getCartBadgeCount());
}

Вот и вся магия. Простые тесты — их легко читать, как детскую книжку. Их легко чинить, потому что сразу видно, где манда с ушами. И ломаются они в разы реже, потому что меньше за что зацепиться. Не умничай, делай проще. И будет тебе счастье, а не терпения ноль ебать каждый прогон.

Видео-ответы