Test výkonu je proces měření rychlosti, odezvy a stability mobilní aplikace při pracovní zátěži. Na rozdíl od funkčního testování, které kontroluje správnost logiky, testování výkonu vyhodnocuje, jak rychle a plynule aplikace pracuje v reálných podmínkách. Podle Google Research (2024) 53% uživatelů opouští aplikaci, pokud její spuštění trvá déle než 3 sekundy. Testování výkonu pomáhá odhalit úzká místa před vydáním verze a zajišťuje shodu s přijatými standardy kvality.
Hlavní body
Test výkonu je typ nefunkčního testování, který určuje, jak rychle a efektivně aplikace plní své úkoly. Na rozdíl od jednotkových testů nebo UI testů, Test výkonu měří kvantitativní charakteristiky: dobu odezvy, zatížení procesoru, spotřebu RAM a spotřebu baterie. Podle zprávy Sauce Labs (2025) 68% týmů mobilního vývoje zahrnuje Test výkonu do pravidelného testovacího cyklu a 41% ho automatizuje v CI.
Hlavním cílem Testu výkonu je zajistit, že aplikace splňuje požadavky na výkon stanovené ve specifikaci. Pokud doba otevření obrazovky přesahuje 500 milisekund nebo aplikace spotřebovává více než 200 MB RAM na průměrném zařízení, je to signál k optimalizaci. Základní linie výkonu je stanovena ve fázi prvního stabilního vydání a revidována při každé velké aktualizaci.
Test výkonu se provádí na skutečných zařízeních, ne na simulátorech, protože emulace neposkytuje přesný obraz využití CPU, GPU a síťových zdrojů. Podle Apple WWDC (2024) testy na simulátoru vykazují o 15-30% vyšší výsledky ve srovnání se skutečným zařízením. Skutečné zařízení zůstává jediným spolehlivým zdrojem údajů o výkonu.
Pravidelnost provádění Testu výkonu závisí na vývojovém cyklu. V doporučeních Google Android Performance (2024) je uvedeno, že základní měření výkonu by měla být spouštěna při každém pull requestu a kompletní sada před každým vydáním. Automatizace těchto měření umožňuje detekovat regrese výkonu v raných fázích.
V mobilním vývoji se rozlišuje pět hlavních metrik, které pokrývají 90% scénářů Testu výkonu. Doba spuštění (cold start a warm start) — první metrika kontrolovaná při každém vydání. Google Play Console (2024) zaznamenává dobu spuštění podle prahů: studený start nesmí přesáhnout 5 sekund, teplý start — 1,5 sekundy. Překročení těchto prahů přímo ovlivňuje hodnocení v obchodě s aplikacemi.
Studený start se měří od okamžiku kliknutí na ikonu do objevení prvního snímku aplikace. iOS používá `dispatch_async` pro odloženou inicializaci, což zkracuje viditelnou dobu spuštění. Android studený start zahrnuje vytvoření procesu, inicializaci Application a spuštění Activity. Podle Google Performance (2024) každých 100 ms zpoždění studeného startu snižuje míru konverze o 1,2% v e-commerce aplikacích.
FPS (Frames Per Second) — snímková frekvence při animacích a rolování seznamů. Pro plynulé rozhraní je vyžadováno stabilních 60 FPS. Android Studio Profiler a Xcode GPU Report ukazují poklesy FPS při těžkých operacích — načítání obrázků, parsování JSON nebo renderování složitých rozvržení. Pokles pod 30 FPS je uživatelem vnímán jako zpomalení a vede ke snížení míry retence o 22% podle Adjust (2025).
Spotřeba RAM — třetí kritická metrika. Úniky paměti — hlavní příčina poklesu výkonu v dlouhotrvajících relacích. Instruments Allocations a Android Memory Profiler pomáhají detekovat cyklické reference ve Swift a neuvolněné Activity v Androidu. Spotřeba baterie — metrika často přehlížená ve fázi testování. Podle Apple Developer (2024) jsou aplikace s vysokou spotřebou energie na iOS omezeny na pozadí. Energy Log v Xcode zaznamenává wattový profil aplikace během relace.
| Metrika | Práh | Nástroj |
|---|---|---|
| Cold start | < 5 s | Xcode Organizer, Google Vitals |
| FPS | ≥ 55 stabilně | Xcode GPU Report, Android Profiler |
| RAM | < 200 MB | Instruments, Memory Profiler |
| APK/IPA | < 150 MB | Xcode Build, Gradle APK Analyzer |
Zátěžové testování (Load Test) kontroluje chování aplikace při očekávaném počtu současných uživatelů. Pro mobilní backend to znamená simulaci 1000-10000 současných požadavků na API. Serverová část musí zvládnout špičkové zatížení bez zvýšení doby odezvy o více než 20% oproti základní hodnotě. Podle benchmarků k6 (2024) typická konfigurace Load Test zahrnuje náběh z 0 na 1000 VU (virtuálních uživatelů) během 5 minut.
Stresové testování (Stress Test) určuje bod selhání aplikace — okamžik, kdy systém přestává reagovat na požadavky nebo degraduje nepřijatelným způsobem. Na rozdíl od Load Test, Stress Test zatěžuje systém nad normální limity. Bod selhání je zaznamenán podle jednoho z kritérií: doba odezvy přesahuje 10 sekund, procento chyb 5XX přesahuje 5% nebo spotřeba RAM dosahuje 90% dostupné paměti.
Objemové testování (Volume Test) hodnotí chování aplikace při práci s velkými objemy dat. V mobilním kontextu se jedná o kontrolu práce s tisíci záznamy v lokální databázi, desítkami gigabajtů cache nebo miliony push notifikací. SQLite na Androidu a Core Data na iOS vykazují odlišný výkon při objemu nad 100000 záznamů.
Xcode Instruments — hlavní nástroj pro profilování iOS aplikací. Time Profiler ukazuje, které metody spotřebovávají nejvíce CPU, a Allocations sleduje alokaci a uvolňování paměti. Instruments podporuje nahrávání během dlouhých relací (až 30 minut) a export stop pro porovnání mezi sestaveními. Activity Monitor uvnitř Instruments zobrazuje celkové zatížení systému v reálném čase.
Android Studio Profiler — vestavěný profiler pro Android. Spojuje CPU, Memory, Network a Energy profilery do jednotného rozhraní. Charakteristikou Android Profiler je podpora interaktivních relací: vývojář může provádět akce v aplikaci a vidět okamžitou reakci metrik. Podle Google I/O (2024) Profiler podporuje záznam ve formátu .perf, který lze porovnávat s baseline v CI.
Charles Proxy a Proxyman — nástroje pro analýzu síťového provozu. Zobrazují čas každého HTTP požadavku, velikost odpovědi a hlavičky. Pro Test výkonu je důležité zaznamenávat požadavky trvající déle než 500 ms — to jsou kandidáti na caching nebo optimalizaci. Charles podporuje throttle režim simulující pomalé sítě: 3G, Edge a LTE. Proxyman — lehčí alternativa pro macOS s nativní Swift architekturou.
import XCTest
class PerformanceTests: XCTestCase {
func testLaunchPerformance() {
measure(metrics: [XCTClockMetric(),
XCTMemoryMetric()]) {
XCUIApplication().launch()
}
}
func testScrollPerformance() {
let app = XCUIApplication()
app.launch()
let tableView = app.tables["list"]
measure {
tableView.swipeUp()
tableView.swipeDown()
}
}
}
Integrace Testu výkonu do CI/CD je průmyslovým standardem pro roky 2025-2026. Pipeline výkonu zahrnuje tři fáze: pre-commit (rychlá měření při pull requestu), nightly (kompletní sada testů) a pre-release (porovnání s baseline na referenčních zařízeních). Bitrise a GitHub Actions podporují spouštění Xcode Instruments CLI a Gradle Profiler.
GitHub Actions (2024) zveřejnil oficiální šablonu pro iOS Test výkonu pomocí `xcodebuild test-without-building`. Šablona spouští testy na jednom z GitHub strojů a publikuje zprávu v artifactu. Baseline je uložen v JSON souboru v repozitáři: při překročení prahu o 10% pipeline selže s chybou. Tento přístup zabraňuje degradaci výkonu bez ruční kontroly každého sestavení.
Problémem mobilního Testu výkonu v CI je nestabilita výsledků na různých strojích. Apple Silicon (M1-M4) a Intel Xeon poskytují různé časy provádění. Řešením je použití procentuálního poměru k baseline, nikoli absolutních hodnot. Pokud test trvá o 15% déle než baseline — sestavení je označeno jako vyžadující kontrolu.
XCTest Performance na iOS používá metodu `measure(metrics:)`, která spouští blok kódu 10krát a vrací statistiku: průměr, medián, směrodatnou odchylku. Pro testování výkonu databáze je vhodné použít XCTMemoryMetric, který zaznamenává špičkovou spotřebu RAM. Práh je nastaven prostřednictvím `XCTPerformanceReport` po dokončení testu.
Android Macrobenchmark — knihovna od Google pro měření výkonu na úrovni aplikace. Macrobenchmark spouští uživatelské scénáře (spuštění Activity, rolování RecyclerView, otevření WebView) a měří čas provedení. Baseline Profile — sada tříd a metod, které Android kompilátor předem optimalizuje. Google Play používá Baseline Profile pro zrychlení prvního spuštění o 30%.
@RunWith(AndroidJUnit4::class)
class StartupBenchmark {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
@Test
fun startup() {
benchmarkRule.measureRepeated(
packageName = "com.example.app",
metrics = listOf(StartupTimingMetric()),
iterations = 5
) {
pressHome()
startActivityAndWait()
}
}
}
Oba přístupy — XCTest Performance a Android Macrobenchmark — používají stejný koncept: vícenásobné měření s průměrováním a porovnáním s prahem. Výkon nelze redukovat na jedno číslo. Každé vydání by mělo být doprovázeno zprávou o výkonu obsahující trendy metrik za posledních 5 sestavení. Taková zpráva umožňuje týmu vidět degradaci dříve, než ji zaznamenají uživatelé.
Často kladené otázky
Test výkonu je široká kategorie zahrnující Load Test, Stress Test, Volume Test a další typy. Load Test je konkrétní případ Testu výkonu, který kontroluje chování systému při očekávané zátěži. Všechny Load Testy jsou Testy výkonu, ale ne naopak.
Základní měření (cold start, FPS, RAM) — při každém pull requestu. Kompletní sada Testu výkonu — před každým vydáním. Noční běhy — pro projekty s denními sestaveními. Google doporučuje provádět Macrobenchmark alespoň jednou denně.
Za kritické jsou považovány tři metriky: doba studeného startu (ne více než 5 sekund), FPS při rolování (ne méně než 55 FPS) a špičková spotřeba RAM (ne více než 200 MB). Google Play Console a App Store Connect automaticky sledují tyto metriky.
Ano, Test výkonu je plně automatizovatelný pomocí Xcode CLI (`xcodebuild test`) a Gradle (`gradle connectedCheck`). Nástroje jako k6 a Gatling automatizují zátěžové testování serverové části. CI/CD integrace umožňuje spouštět Test výkonu bez lidského zásahu.
Baseline (základní linie) — referenční měření výkonu, se kterým se porovnávají výsledky nových sestavení. Baseline je stanoven ve fázi prvního stabilního vydání a uložen v JSON nebo XML. Pokud nové sestavení překročí baseline o 10%, CI pipeline signalizuje regresi.
Shrnutí
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í.
Přečtěte si také