Что такое smoke-тест для мобильного приложения и приведи пример сценария?

«Что такое smoke-тест для мобильного приложения и приведи пример сценария?» — вопрос из категории Мобильное тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Smoke-тест (санитарная проверка) — это минимальный набор тестов для проверки базовой работоспособности критического функционального пути после сборки или развертывания. Его цель — быстро определить, "дымит" ли приложение (т.е. есть ли грубые ошибки), прежде чем запускать более глубокое тестирование.

Пример сценария smoke-теста для приложения доставки еды:

  1. Запуск: Приложение успешно открывается без крашей.
  2. Авторизация: Вход с валидными учетными данными.
  3. Главный экран: Загрузка и отображение списка ресторанов или категорий.
  4. Навигация: Переход в раздел профиля и обратно.
  5. Критический поток: Выбор ресторана, добавление товара в корзину и переход к экрану оформления заказа.

Пример кода (Kotlin + Espresso):

@Test
fun smokeTest_CriticalUserPath() {
    // 1. Запуск и авторизация
    onView(withId(R.id.login_button)).perform(click())
    onView(withId(R.id.email_field)).perform(typeText("valid_user@example.com"), closeSoftKeyboard())
    onView(withId(R.id.password_field)).perform(typeText("validPass123"), closeSoftKeyboard())
    onView(withId(R.id.submit_button)).perform(click())

    // 2. Проверка главного экрана
    onView(withId(R.id.restaurants_recycler_view))
        .check(matches(isDisplayed()))

    // 3. Навигация и базовое действие
    onView(withContentDescription("Profile")).perform(click())
    onView(withId(R.id.user_name)).check(matches(isDisplayed()))
    pressBack()

    // 4. Добавление в корзину
    onView(allOf(withId(R.id.restaurant_name), withText("Pizza Place")))
        .perform(click())
    onView(allOf(withId(R.id.menu_item), isDisplayed())).perform(click())
    onView(withId(R.id.add_to_cart_button)).perform(click())
    onView(withId(R.id.cart_badge)).check(matches(withText("1")))
}

Почему это важно: Smoke-тесты выполняются быстро и дают уверенность, что основная функциональность не сломана после сборки, экономя время на запуск полного регресса.