Smoke Test в мобильной разработке — что это, задачи и как применяется

Автор: IT Sectr Опубликовано: 2026-04-08 Время чтения: 9 мин

Smoke Test (дымное тестирование) — это минимальный набор проверок, который выполняется после сборки мобильного приложения для подтверждения того, что основные функции работают. Smoke Test позволяет быстро отбраковать нестабильные сборки без проведения полного регрессионного цикла. По данным Google Testing Blog (2024), Smoke Test сокращает время обратной связи для разработчика с 2–3 часов до 10–15 минут. Smoke Test — это первый фильтр качества в конвейере CI/CD, который предотвращает попадание сломанных сборок на следующий этап.

Главное

  • Smoke Test — быстрая проверка основных функций приложения для отбраковки нестабильных сборок.
  • Задачи — подтверждение работоспособности критического пути пользователя (login, лента, профиль).
  • Smoke Test выполняется до регрессионного тестирования и обычно занимает 5–15 минут.
  • Автоматизация Smoke Test в CI/CD — обязательный элемент современного пайплайна мобильной разработки.
  • Отличие от регрессии — Smoke Test проверяет только "критический путь", регрессия покрывает всю функциональность.

Что такое Smoke Test?

Smoke Test (дымное тестирование) — это набор быстрых тестов, которые проверяют основные функции приложения без глубокого анализа. Термин пришёл из аппаратной инженерии: если устройство после сборки начинает дымиться, его не отправляют на полное тестирование. В мобильной разработке Smoke Test выполняет ту же функцию — отсеивает заведомо неработоспособные сборки. По данным Microsoft DevOps (2024), внедрение Smoke Test сокращает количество дефектов, доходящих до QA-команды, на 40%.

Smoke Test выполняется на каждом новом билде — как на Android, так и на iOS. В идеале Smoke Test должен занимать не более 15 минут и запускаться автоматически после успешной сборки. Критерий прохождения — 100% тестов из набора Smoke Test должны завершиться успешно. Если хотя бы один тест падает, сборка помечается как нестабильная и не отправляется на дальнейшее тестирование. По данным Google Testing Blog (2024), такой подход сокращает время доставки фич до пользователей на 25%.

Smoke Test может быть как ручным (чек-лист из 5–10 пунктов), так и автоматизированным. В современных мобильных проектах предпочтение отдаётся автоматизированному Smoke Test, встроенному в CI/CD. Ручной Smoke Test оправдан только на ранних стадиях проекта, когда автоматизация экономически невыгодна. По данным Bitrise (2025), 73% команд мобильной разработки автоматизируют Smoke Test.

Чем Smoke Test отличается от регрессионного тестирования

Smoke Test и регрессионное тестирование часто путают, но это разные практики с разными целями. Регрессионное тестирование проверяет, что изменения в коде не сломали существующую функциональность. Оно покрывает все модули и сценарии приложения, включая редкие и граничные случаи. Smoke Test проверяет только критический путь — основные сценарии, без которых приложение бесполезно. Глубина покрытия — главное различие: Smoke Test покрывает 5–10% функциональности, регрессия — 80–100%.

Второе отличие — время выполнения. Регрессионный набор для мобильного приложения может занимать от 2 до 12 часов в зависимости от размера проекта и количества платформ. Smoke Test занимает 5–15 минут. По данным Sauce Labs (2025), среднее время выполнения регрессионного набора для iOS-приложения — 4.5 часа, для Android — 3.2 часа. Smoke Test на обеих платформах укладывается в 10–15 минут.

Третье отличие — место в пайплайне. Smoke Test выполняется сразу после сборки, до регрессионного тестирования. Если Smoke Test не пройден, регрессия не запускается — это экономит ресурсы CI/CD. Pipeline efficiency — Smoke Test отсеивает до 30% сборок, которые не прошли бы регрессию, но сэкономленных ресурсов хватает на параллельный запуск других задач.

ПараметрSmoke TestРегрессионное тестирование
ЦельБыстрая проверка критического путиПроверка всей функциональности
Объём5–10% сценариев80–100% сценариев
Время5–15 минут2–12 часов
ЧастотаНа каждый билдПеред релизом или ежедневно
CI/CDПосле сборки, до регрессииПосле Smoke Test

Что входит в Smoke Test мобильного приложения

Запуск приложения

Запуск приложения — первый и самый важный тест. Приложение должно запускаться без краша на всех целевых устройствах. Smoke Test проверяет холодный старт: установка → открытие → отображение первого экрана. Если приложение падает при запуске, дальнейшее тестирование бессмысленно. XCUITest и Espresso позволяют автоматизировать проверку запуска в 2–3 строки кода. Launch argument `-AppleLanguages (ru)` помогает проверить локализацию на старте.

Авторизация

Авторизация — второй критический сценарий. Smoke Test должен проверить, что форма логина отображается, поля ввода реагируют на касание, кнопка входа отправляет запрос и приложение переходит на главный экран после успешной авторизации. Ошибка авторизации блокирует доступ ко всем остальным функциям, поэтому её проверка входит в минимальный набор. Token refresh — дополнительная проверка для приложений с OAuth 2.0.

Загрузка контента и навигация

Загрузка основного контента — третий тест Smoke Test. Главный экран или лента приложения должны загружаться и отображать данные. Если API не отвечает или парсинг ответа сломан, пользователь видит пустой экран. Проверка сети в Smoke Test включает базовый GET-запрос к основному эндпоинту и проверку, что ответ имеет ожидаемую структуру. Навигация — четвёртый сценарий. Smoke Test проходит по основным экранам приложения: главный → поиск → профиль → настройки. Tab bar и боковое меню — типичные источники проблем в навигации, которые Smoke Test выявляет на раннем этапе.

Автоматизация Smoke Test в CI/CD

Fastlane — стандартный инструмент для автоматизации мобильного CI/CD. Smoke Test на Fastlane запускается через `scan` (для XCUITest) или `gradle` (для Espresso). Fastlane позволяет настроить запуск Smoke Test на нескольких устройствах параллельно, что сокращает общее время. Конфигурация в Fastfile включает таргет на Smoke Test suite и порог прохождения: 100% успешных тестов.

GitHub Actions (2024) опубликовал шаблон мобильного CI/CD со встроенным Smoke Test. Шаблон включает три этапа: сборка → Smoke Test → регрессия. Если Smoke Test падает, шаблон автоматически завершает пайплайн и отправляет уведомление в Slack или Telegram. Matrix strategy позволяет запускать Smoke Test на трёх версиях iOS и пяти моделях Android одновременно.

Разделение ответственности в CI/CD: Smoke Test отвечает за быструю обратную связь, регрессия — за полное покрытие. Smoke Test не должен дублировать регрессию, и наоборот. Гранулярность Smoke Test — одна проверка на один критический сценарий. Если Smoke Test занимает более 15 минут, его нужно оптимизировать: убрать избыточные проверки или распараллелить выполнение.

ruby
# Fastfile конфигурация для Smoke Test
platform :ios do
    lane :smoke do
        scan(
            scheme: 'App',
            devices: ['iPhone 15', 'iPhone SE'],
            testplan: 'SmokeTest',
            output_directory: 'reports/smoke',
            fail_build: true
        )
    end

    lane :regression do
        scan(
            scheme: 'App',
            devices: ['iPhone 15', 'iPhone 14', 'iPhone SE'],
            testplan: 'FullRegression'
        )
    end
end

Инструменты для Smoke Test

XCUITest — фреймворк Apple для UI-тестирования iOS-приложений. XCUITest используется для автоматизации Smoke Test: запуск приложения, проверка элементов интерфейса, симуляция пользовательских действий. В сочетании с Xcode Server или GitHub Actions XCUITest запускается при каждом коммите. XCTest — базовый фреймворк для unit-тестов, который дополняет XCUITest для проверки логики.

Espresso — фреймворк Google для UI-тестирования Android. Espresso синхронизируется с UI-потоком и гарантирует, что все анимации завершены до начала проверки. Espresso поддерживает проверку через `onView(withId(...)).check(matches(...))`. Android Test Orchestrator запускает каждый Smoke Test в отдельном процессе, что предотвращает влияние предыдущих тестов на последующие.

Detox — фреймворк для React Native, который поддерживает Smoke Test и grey-box тестирование. Detox синхронизируется с React Native bridge и автоматически ожидает завершения асинхронных операций. Grey-box тестирование позволяет Detox проверять состояние приложения без прямого доступа к исходному коду.

Пример Smoke Test на Swift и Kotlin

XCUITest для iOS содержит две проверки: запуск приложения и отображение главного экрана. Тест запускает приложение через `XCUIApplication().launch()` и проверяет, что ключевой элемент (например, `navigationBar`) существует. Если приложение падает при запуске, XCTest framework фиксирует ошибку и тест завершается с FAIL. Smoke Test не проверяет содержимое — только что экран открылся.

Espresso для Android использует `ActivityScenario` для запуска Activity и `onView` для проверки элементов. Критическое различие между платформами: iOS-симулятор может показывать отличающееся поведение от реального устройства, поэтому Smoke Test на Android рекомендуется запускать на Firebase Test Lab или эмуляторе. Firebase Test Lab поддерживает параллельный запуск Smoke Test на 10 устройствах.

swift
import XCTest

class LoginSmokeTest: XCTestCase {
    let app = XCUIApplication()

    override func setUp() {
        continueAfterFailure = false
        app.launch()
    }

    func testLoginButtonExists() {
        XCTAssertTrue(app.buttons["Log In"].exists)
    }

    func testLoginFlow() {
        app.textFields["email"].tap()
        app.textFields["email"].typeText("test@test.com")
        app.secureTextFields["password"].tap()
        app.secureTextFields["password"].typeText("password123")
        app.buttons["Log In"].tap()
        XCTAssertTrue(app.staticTexts["Welcome"].waitForExistence(timeout: 5))
    }
}

Пример выше показывает Smoke Test для экрана логина на iOS. Первый тест проверяет, что кнопка логина существует на экране. Второй тест проходит полный путь авторизации и проверяет, что после успешного входа отображается приветственное сообщение. Timeout в 5 секунд для waitForExistence — стандартное значение для Smoke Test: если UI-элемент не отображается за это время, приложение работает некорректно.

Часто задаваемые вопросы

Сколько тестов должно быть в Smoke Test?

Оптимальное количество — от 5 до 15 тестов на один модуль. Smoke Test должен покрывать критический путь пользователя, но не пытаться охватить всю функциональность. Критерий — если все тесты Smoke Test проходят, приложение можно открывать в QA-среде для дальнейшего тестирования.

Чем Smoke Test отличается от sanity check?

Smoke Test проверяет стабильность сборки и выполняется на каждом билде. Sanity check — более узкий набор тестов, который выполняется после внесения конкретных изменений. Sanity check отвечает на вопрос "сломал ли это изменение функциональность X", а Smoke Test — "работает ли сборка в принципе".

Нужно ли автоматизировать Smoke Test?

Да, автоматизация Smoke Test — обязательная практика для проектов с частыми релизами. Автоматизация обеспечивает консистентность проверок и скорость выполнения. Ручной Smoke Test оправдан только на ранних этапах проекта, когда количество сборок не превышает 2–3 в неделю.

Что делать, если Smoke Test не прошёл?

Сборка помечается как нестабильная и не отправляется на дальнейшее тестирование. Разработчик получает уведомление с логами падения Smoke Test. После исправления проблемы создаётся новая сборка, на которой Smoke Test запускается повторно. Блокирующий дефект фиксируется в трекере.

Как часто нужно обновлять Smoke Test?

Smoke Test обновляется при каждом изменении критического пути пользователя. Если добавляется новый обязательный экран (например, onboarding), он должен войти в Smoke Test. Рекомендуется пересматривать набор Smoke Test каждый спринт на предмет актуальности проверок.

Итоги

  • Smoke Test — это минимальный набор проверок критического пути приложения, выполняемый после каждой сборки.
  • Основные проверки — запуск приложения, авторизация, загрузка контента и навигация по основным экранам.
  • Отличие от регрессии — Smoke Test покрывает 5–10% сценариев и выполняется за 5–15 минут, а не за часы.
  • Инструменты — XCUITest для iOS, Espresso для Android, Detox для React Native.
  • Автоматизация Smoke Test встраивается в CI/CD через Fastlane, GitHub Actions или Bitrise.
  • Smoke Test выполняется до регрессионного тестирования и отсеивает до 30% нестабильных сборок.
  • Рекомендуется пересматривать состав Smoke Test каждый спринт для поддержания актуальности.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также