Smoke Test v mobilním vývoji — co to je, úkoly a jak se používá

Autor: IT Sectr Publikováno: 2026-04-08 Doba čtení: 9 min

Smoke Test (kouřové testování) je minimální sada kontrol, která se provádí po sestavení mobilní aplikace k potvrzení, že základní funkce fungují. Smoke Test umožňuje rychle odmítnout nestabilní sestavení bez provedení úplného regresního cyklu. Podle Google Testing Blog (2024) zkracuje Smoke Test dobu zpětné vazby pro vývojáře z 2–3 hodin na 10–15 minut. Smoke Test je prvním filtrem kvality v potrubí CI/CD, který zabraňuje vstupu rozbitých sestavení do další fáze.

Hlavní body

  • Smoke Test — rychlá kontrola základních funkcí aplikace pro odmítnutí nestabilních sestavení.
  • Úkoly — potvrzení funkčnosti kritické cesty uživatele (přihlášení, feed, profil).
  • Smoke Test se provádí před regresním testováním a obvykle trvá 5–15 minut.
  • Automatizace Smoke Testu v CI/CD je povinným prvkem moderního potrubí mobilního vývoje.
  • Rozdíl od regrese — Smoke Test kontroluje pouze kritickou cestu, regrese pokrývá veškerou funkčnost.

Co je Smoke Test?

Smoke Test (kouřové testování) je sada rychlých testů, které kontrolují základní funkce aplikace bez hluboké analýzy. Termín pochází z hardware inženýrství: pokud zařízení po sestavení začne kouřit, není odesláno k úplnému testování. V mobilním vývoji plní Smoke Test stejnou funkci — odfiltruje předem nefunkční sestavení. Podle Microsoft DevOps (2024) snižuje zavedení Smoke Testu počet defektů, které se dostanou k QA týmu, o 40%.

Smoke Test se provádí na každém novém sestavení — jak na Androidu, tak na iOS. Ideálně by Smoke Test neměl trvat déle než 15 minut a měl by se spouštět automaticky po úspěšném sestavení. Kritérium úspěšnosti — 100% testů ze sady Smoke Test musí být dokončeno úspěšně. Pokud selže alespoň jeden test, sestavení je označeno jako nestabilní a není odesláno k dalšímu testování. Podle Google Testing Blog (2024) tento přístup zkracuje dobu dodání funkcí uživatelům o 25%.

Smoke Test může být jak ruční (kontrolní seznam 5–10 bodů), tak automatizovaný. V moderních mobilních projektech se upřednostňuje automatizovaný Smoke Test zabudovaný do CI/CD. Ruční Smoke Test je ospravedlnitelný pouze v raných fázích projektu, kdy automatizace není ekonomicky výhodná. Podle Bitrise (2025) 73% týmů mobilního vývoje automatizuje Smoke Test.

Čím se Smoke Test liší od regresního testování

Smoke Test a regresní testování jsou často zaměňovány, ale jedná se o rozdílné praktiky s různými cíli. Regresní testování kontroluje, zda změny v kódu neporušily stávající funkčnost. Pokrývá všechny moduly a scénáře aplikace, včetně vzácných a hraničních případů. Smoke Test kontroluje pouze kritickou cestu — základní scénáře, bez kterých je aplikace nepoužitelná. Hloubka pokrytí — hlavní rozdíl: Smoke Test pokrývá 5–10% funkčnosti, regrese 80–100%.

Druhý rozdíl — doba provádění. Regresní sada pro mobilní aplikaci může trvat 2 až 12 hodin v závislosti na velikosti projektu a počtu platforem. Smoke Test trvá 5–15 minut. Podle Sauce Labs (2025) je průměrná doba provádění regresní sady pro iOS aplikaci 4,5 hodiny, pro Android 3,2 hodiny. Smoke Test na obou platformách se vejde do 10–15 minut.

Třetí rozdíl — místo v potrubí. Smoke Test se provádí ihned po sestavení, před regresním testováním. Pokud Smoke Test neprojde, regrese se nespouští — to šetří zdroje CI/CD. Pipeline efficiency — Smoke Test odfiltruje až 30% sestavení, která by neprošla regresí, a ušetřené zdroje stačí na paralelní spouštění jiných úkolů.

ParametrSmoke TestRegresní testování
CílRychlá kontrola kritické cestyKontrola veškeré funkčnosti
Rozsah5–10% scénářů80–100% scénářů
Čas5–15 minut2–12 hodin
FrekvencePři každém sestaveníPřed vydáním nebo denně
CI/CDPo sestavení, před regresíPo Smoke Testu

Co je zahrnuto v Smoke Testu mobilní aplikace

Spuštění aplikace

Spuštění aplikace — první a nejdůležitější test. Aplikace se musí spustit bez pádu na všech cílových zařízeních. Smoke Test kontroluje studený start: instalace → otevření → zobrazení první obrazovky. Pokud aplikace spadne při spuštění, další testování je bezvýznamné. XCUITest a Espresso umožňují automatizovat kontrolu spuštění ve 2–3 řádcích kódu. Launch argument `-AppleLanguages (cs)` pomáhá zkontrolovat lokalizaci při startu.

Autorizace

Autorizace — druhý kritický scénář. Smoke Test by měl zkontrolovat, že se přihlašovací formulář zobrazuje, vstupní pole reagují na dotyk, tlačítko přihlášení odesílá požadavek a aplikace přechází na hlavní obrazovku po úspěšné autorizaci. Chyba autorizace blokuje přístup ke všem ostatním funkcím, proto je její kontrola zahrnuta v minimální sadě. Token refresh — dodatečná kontrola pro aplikace s OAuth 2.0.

Načtení obsahu a navigace

Načtení hlavního obsahu — třetí test Smoke Testu. Hlavní obrazovka nebo feed aplikace se musí načíst a zobrazit data. Pokud API neodpovídá nebo je analýza odpovědi porušená, uživatel vidí prázdnou obrazovku. Síťová kontrola v Smoke Testu zahrnuje základní GET požadavek na hlavní endpoint a kontrolu, že odpověď má očekávanou strukturu. Navigace — čtvrtý scénář. Smoke Test prochází hlavními obrazovkami aplikace: hlavní → vyhledávání → profil → nastavení. Lišta karet a postranní menu — typické zdroje problémů v navigaci, které Smoke Test odhaluje v rané fázi.

Automatizace Smoke Testu v CI/CD

Fastlane — standardní nástroj pro automatizaci mobilního CI/CD. Smoke Test na Fastlane se spouští přes `scan` (pro XCUITest) nebo `gradle` (pro Espresso). Fastlane umožňuje konfiguraci spouštění Smoke Testu na několika zařízeních paralelně, což zkracuje celkový čas. Konfigurace v Fastfile zahrnuje cíl pro sadu Smoke Test a práh úspěšnosti: 100% úspěšných testů.

GitHub Actions (2024) zveřejnil šablonu mobilního CI/CD s vestavěným Smoke Testem. Šablona zahrnuje tři fáze: sestavení → Smoke Test → regrese. Pokud Smoke Test selže, šablona automaticky ukončí potrubí a odešle oznámení do Slacku nebo Telegramu. Matrix strategy umožňuje spouštět Smoke Test na třech verzích iOS a pěti modelech Android současně.

Rozdělení odpovědností v CI/CD: Smoke Test odpovídá za rychlou zpětnou vazbu, regrese za úplné pokrytí. Smoke Test by neměl duplikovat regresi a naopak. Granularita Smoke Testu — jedna kontrola na jeden kritický scénář. Pokud Smoke Test trvá déle než 15 minut, je třeba jej optimalizovat: odstranit nadbytečné kontroly nebo paralelizovat provádění.

ruby
# Konfigurace Fastfile pro 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

Nástroje pro Smoke Test

XCUITest — rámec Apple pro UI testování iOS aplikací. XCUITest se používá pro automatizaci Smoke Testu: spuštění aplikace, kontrola prvků rozhraní, simulace uživatelských akcí. V kombinaci s Xcode Server nebo GitHub Actions se XCUITest spouští při každém commitu. XCTest — základní rámec pro unit testy, který doplňuje XCUITest pro kontrolu logiky.

Espresso — rámec Google pro UI testování Androidu. Espresso se synchronizuje s UI vláknem a garantuje, že všechny animace jsou dokončeny před zahájením kontroly. Espresso podporuje kontrolu přes `onView(withId(...)).check(matches(...))`. Android Test Orchestrator spouští každý Smoke Test v samostatném procesu, což zabraňuje ovlivnění předchozích testů následujícími.

Detox — rámec pro React Native, který podporuje Smoke Test a grey-box testování. Detox se synchronizuje s React Native bridge a automaticky čeká na dokončení asynchronních operací. Grey-box testování umožňuje Detoxu kontrolovat stav aplikace bez přímého přístupu ke zdrojovému kódu.

Příklad Smoke Testu ve Swift a Kotlin

XCUITest pro iOS obsahuje dvě kontroly: spuštění aplikace a zobrazení hlavní obrazovky. Test spouští aplikaci přes `XCUIApplication().launch()` a kontroluje, zda klíčový prvek (např. `navigationBar`) existuje. Pokud aplikace spadne při spuštění, rámec XCTest zaznamená chybu a test končí FAILem. Smoke Test nekontroluje obsah — pouze to, že se obrazovka otevřela.

Espresso pro Android používá `ActivityScenario` ke spuštění Activity a `onView` ke kontrole prvků. Kritický rozdíl mezi platformami: iOS simulátor může vykazovat odlišné chování od skutečného zařízení, proto se Smoke Test na Androidu doporučuje spouštět na Firebase Test Lab nebo emulátoru. Firebase Test Lab podporuje paralelní spouštění Smoke Testu na 10 zařízeních.

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))
    }
}

Výše uvedený příklad ukazuje Smoke Test pro přihlašovací obrazovku na iOS. První test kontroluje, zda tlačítko přihlášení existuje na obrazovce. Druhý test prochází celou autorizační cestu a kontroluje, že po úspěšném přihlášení se zobrazí uvítací zpráva. Timeout 5 sekund pro waitForExistence — standardní hodnota pro Smoke Test: pokud se UI prvek nezobrazí během této doby, aplikace nepracuje správně.

Často kladené otázky

Kolik testů by mělo být v Smoke Testu?

Optimální počet je 5 až 15 testů na jeden modul. Smoke Test by měl pokrýt kritickou cestu uživatele, ale neměl by se snažit pokrýt veškerou funkčnost. Kritérium — pokud všechny testy Smoke Testu projdou, aplikaci lze otevřít v QA prostředí pro další testování.

Čím se Smoke Test liší od sanity check?

Smoke Test kontroluje stabilitu sestavení a provádí se na každém sestavení. Sanity check je užší sada testů, která se provádí po provedení konkrétních změn. Sanity check odpovídá na otázku ‘porušila tato změna funkčnost X?’, zatímco Smoke Test odpovídá na ‘funguje sestavení vůbec?’.

Je třeba automatizovat Smoke Test?

Ano, automatizace Smoke Testu je povinnou praxí pro projekty s častými vydáními. Automatizace zajišťuje konzistenci kontrol a rychlost provádění. Ruční Smoke Test je ospravedlnitelný pouze v raných fázích projektu, kdy počet sestavení nepřesahuje 2– týdně.

Co dělat, pokud Smoke Test neprošel?

Sestavení je označeno jako nestabilní a není odesláno k dalšímu testování. Vývojář obdrží oznámení s logy selhání Smoke Testu. Po opravě problému je vytvořeno nové sestavení, na kterém je Smoke Test znovu spuštěn. Blokující defekt je zaznamenán v trackeru.

Jak často je třeba aktualizovat Smoke Test?

Smoke Test se aktualizuje při každé změně kritické cesty uživatele. Pokud je přidána nová povinná obrazovka (např. onboarding), musí vstoupit do Smoke Testu. Doporučuje se revidovat sadu Smoke Test každý sprint z hlediska aktuálnosti kontrol.

Shrnutí

  • Smoke Test je minimální sada kontrol kritické cesty aplikace, prováděná po každém sestavení.
  • Základní kontroly — spuštění aplikace, autorizace, načtení obsahu a navigace po hlavních obrazovkách.
  • Rozdíl od regrese — Smoke Test pokrývá 5–10% scénářů a provádí se za 5–15 minut, ne za hodiny.
  • Nástroje — XCUITest pro iOS, Espresso pro Android, Detox pro React Native.
  • Automatizace Smoke Testu je integrována do CI/CD přes Fastlane, GitHub Actions nebo Bitrise.
  • Smoke Test se provádí před regresním testováním a odfiltruje až 30% nestabilních sestavení.
  • Doporučuje se revidovat složení Smoke Testu každý sprint pro udržení aktuálnosti.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také