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 — брза провера основних функција апликације за одбацивање нестабилних билдова.
  • Задаци — потврђивање радне способности критичног пута корисника (пријава, феед, профил).
  • 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–линије кода. Launch argument `-AppleLanguages (sr)` помаже да се провери локализација при покретању.

Ауторизација

Ауторизација — други критични сценарио. Smoke Test треба да провери да се формулар за пријаву приказује, поља за унос реагују на додир, дугме за пријаву шаље захтев и апликација прелази на главни екран након успешне ауторизације. Грешка у ауторизацији блокира приступ свим осталим функцијама, стога њена провера улази у минимални скуп. Token refresh — додатна провера за апликације са OAuth 2.0.

Учитавање садржаја и навигација

Учитавање главног садржаја — трећи тест Smoke Test. Главни екран или феед апликације морају да се учитају и прикажу податке. Ако API не одговара или је парсирање одговора покварено, корисник види празан екран. Провера мреже у Smoke Test укључује основни GET захтев ка главном ендпоинту и проверу да одговор има очекивану структуру. Навигација — четврти сценарио. Smoke Test пролази кроз главне екране апликације: главни → претрага → профил → подешавања. Таб бар и бочни мени — типични извори проблема у навигацији које Smoke Test открива у раној фази.

Аутоматизација Smoke Test у CI/CD

Fastlane — стандардни алат за аутоматизацију мобилног CI/CD. Smoke Test на Fastlane се покреће преко `scan` (за XCUITest) или `gradle` (за Espresso). Fastlane омогућава подешавање покретања Smoke Test на више уређаја паралелно, што смањује укупно време. Конфигурација у Fastfile укључује циљ на Smoke Test скуп и праг проласка: 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 фрејмворк бележи грешку и тест се завршава са 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["Пријави се"].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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође