Smoke Test (duman testi), bir mobil uygulama yapısından sonra temel işlevlerin çalıştığını doğrulamak için gerçekleştirilen minimum düzeydeki kontrollerdir. Smoke Test, tam bir regresyon döngüsünü çalıştırmadan dengesiz yapıları hızla reddetmeyi sağlar. Google Testing Blog’a (2024) göre Smoke Test, geliştirici için geri bildirim süresini 2–3 saatten 10–15 dakikaya düşürür. Smoke Test, bozuk yapıların bir sonraki aşamaya ulaşmasını önleyen CI/CD hattındaki ilk kalite filtresidir.
Anahtar Noktalar
Smoke Test (duman testi), derinlemesine analiz yapmadan bir uygulamanın temel işlevlerini doğrulayan bir dizi hızlı testtir. Terim donanım mühendisliğinden gelir: bir cihaz montajdan sonra duman çıkarmaya başlarsa, tam teste gönderilmez. Mobil geliştirmede Smoke Test aynı işlevi görür — açıkça çalışmayan yapıları filtreler. Microsoft DevOps’a (2024) göre Smoke Test uygulanması, QA ekibine ulaşan kusur sayısını %40 oranında azaltır.
Smoke Test her yeni yapıda çalıştırılır — hem Android hem de iOS’ta. İdeal olarak Smoke Test 15 dakikadan uzun sürmemeli ve başarılı bir yapıdan sonra otomatik olarak başlatılmalıdır. Geçme kriteri — Smoke Test paketindeki testlerin %100’ü başarıyla tamamlanmalıdır. En az bir test başarısız olursa, yapı dengesiz olarak işaretlenir ve daha fazla teste gönderilmez. Google Testing Blog’a (2024) göre bu yaklaşım, özelliklerin kullanıcılara teslim süresini %25 azaltır.
Smoke Test manuel (5–10 maddelik bir kontrol listesi) veya otomatik olabilir. Modern mobil projelerde, CI/CD’ye entegre edilmiş otomatik Smoke Test tercih edilir. Manuel Smoke Test, yalnızca otomasyonun ekonomik olarak uygun olmadığı projenin erken aşamalarında haklıdır. Bitrise’a (2025) göre mobil geliştirme ekiplerinin %73’ü Smoke Test’lerini otomatikleştirmektedir.
Smoke Test ve regresyon testi sıklıkla karıştırılır, ancak farklı hedefleri olan farklı uygulamalardır. Regresyon testi, kod değişikliklerinin mevcut işlevselliği bozmadığını doğrular. Uygulamanın nadir ve uç durumlar dahil tüm modüllerini ve senaryolarını kapsar. Smoke Test yalnızca kritik yolu kontrol eder — uygulamanın işe yaramaz hale geldiği temel senaryolar. Kapsama derinliği ana farktır: Smoke Test işlevselliğin %5–10’unu kapsar, regresyon %80–100’ünü kapsar.
İkinci fark yürütme süresidir. Bir mobil uygulama için regresyon paketi, proje büyüklüğüne ve platform sayısına bağlı olarak 2 ila 12 saat sürebilir. Smoke Test 5–15 dakika sürer. Sauce Labs’a (2025) göre bir iOS uygulaması için regresyon paketinin ortalama yürütme süresi 4,5 saat ve Android için 3,2 saattir. Her iki platformda Smoke Test 10–15 dakikada tamamlanır.
Üçüncü fark hattaki konumdur. Smoke Test, yapıdan hemen sonra, regresyon testinden önce çalıştırılır. Smoke Test başarsız olursa regresyon başlatılmaz — bu CI/CD kaynaklarından tasarruf sağlar. Hat verimliliği — Smoke Test, regresyonda başarısız olacak yapıların %30’una kadarını filtreler ve tasarruf edilen kaynaklar diğer görevleri paralel olarak çalıştırmak için yeterlidir.
| Parametre | Smoke Test | Regresyon Testi |
|---|---|---|
| Amaç | Kritik yolun hızlı kontrolü | Tüm işlevselliğin kontrolü |
| Kapsam | %5–10 senaryo | %80–100 senaryo |
| Süre | 5–15 dakika | 2–12 saat |
| Sıklık | Her yapıda | Sürümden önce veya günlük |
| CI/CD | Yapıdan sonra, regresyondan önce | Smoke Test’ten sonra |
Uygulama başlatma — ilk ve en önemli test. Uygulama tüm hedef cihazlarda çökmeden başlatılmalıdır. Smoke Test soğuk başlatmayı kontrol eder: yükle → aç → ilk ekranı göster. Uygulama başlatırken çökerse, daha fazla test anlamsızdır. XCUITest ve Espresso, başlatma kontrolünü 2–3 satır kodla otomatikleştirmeye olanak tanır. Başlatma argümanı `-AppleLanguages (ru)` başlatırken yerelleştirmeyi doğrulamaya yardımcı olur.
Kimlik doğrulama — ikinci kritik senaryo. Smoke Test, giriş formunun görüntülendiğini, giriş alanlarının dokunmaya yanıt verdiğini, giriş düğmesinin istek gönderdiğini ve başarılı kimlik doğrulamadan sonra uygulamanın ana ekrana yönlendirdiğini doğrulamalıdır. Kimlik doğrulama hatası diğer tüm işlevlere erişimi engeller, bu nedenle kontrolü minimum sete dahildir. Token yenileme — OAuth 2.0 kullanan uygulamalar için ek kontrol.
Ana içeriğin yüklenmesi — üçüncü Smoke Test. Uygulamanın ana ekranı veya akışı yüklenmeli ve veri görüntülemelidir. API yanıt vermezse veya yanıt ayrıştırması bozuksa, kullanıcı boş bir ekran görür. Smoke Test’te ağ kontrolü, ana uç noktaya temel bir GET isteği ve yanıtın beklenen yapıya sahip olduğunun doğrulanmasını içerir. Gezinme — dördüncü senaryo. Smoke Test, uygulamanın ana ekranlarında gezinir: ana sayfa → arama → profil → ayarlar. Sekme çubuğu ve yan menü, Smoke Test’in erken yakaladığı tipik gezinme sorunu kaynaklarıdır.
Fastlane — mobil CI/CD otomasyonu için standart araç. Fastlane’de Smoke Test, `scan` (XCUITest için) veya `gradle` (Espresso için) aracılığıyla çalıştırılır. Fastlane, Smoke Test’in birden çok cihazda paralel olarak çalışacak şekilde yapılandırılmasına olanak tanır ve toplam süreyi azaltır. Yapılandırma Fastfile’da Smoke Test paketini hedefleme ve geçme eşiğini içerir: %100 başarılı test.
GitHub Actions (2024), yerleşik Smoke Test ile bir mobil CI/CD şablonu yayınladı. Şablon üç aşama içerir: yapı → Smoke Test → regresyon. Smoke Test başarısız olursa, şablon hattı otomatik olarak sonlandırır ve Slack veya Telegram’a bildirim gönderir. Matris stratejisi, Smoke Test’in aynı anda üç iOS sürümünde ve beş Android modelinde çalıştırılmasını sağlar.
CI/CD’de sorumluluk ayrımı: Smoke Test hızlı geri bildirim sağlarken, regresyon tam kapsama sağlar. Smoke Test regresyonu tekrarlamamalıdır ve bunun tersi de geçerlidir. Smoke Test’in ayrıntı düzeyi — kritik senaryo başına bir kontrol. Smoke Test 15 dakikadan uzun sürerse optimize edilmelidir: gereksiz kontrolleri kaldırın veya yürütmeyi paralelleştirin.
# Smoke Test için Fastfile yapılandırması
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
XCUITest — iOS uygulamaları için UI testlerinde Apple’ın çerçevesi. XCUITest, Smoke Test’leri otomatikleştirmek için kullanılır: uygulamayı başlatma, UI öğelerini kontrol etme, kullanıcı eylemlerini simülasyon. Xcode Server veya GitHub Actions ile birleştirildiğinde XCUITest her gönderimde çalışır. XCTest — birim testleri için temel çerçeve olup mantık doğrulaması için XCUITest’i tamamlar.
Espresso — Android UI testleri için Google’ın çerçevesi. Espresso, UI iplikçiğiyle senkronize olur ve kontrol başlamadan önce tüm animasyonların tamamlanmasını sağlar. Espresso, `onView(withId(...)).check(matches(...))` aracılığıyla kontrolü destekler. Android Test Orchestrator her Smoke Test’i ayrı bir işlemde çalıştırarak önceki testlerin sonrakileri etkilemesini önler.
Detox — React Native için Smoke Test ve gri kutu testini destekleyen bir çerçevedir. Detox, React Native köprüsüyle senkronize olur ve eşzamansız işlemlerin tamamlanmasını otomatik olarak bekler. Gri kutu testi, Detox’un kaynak koduna doğrudan erişim olmadan uygulama durumunu doğrulamasına olanak tanır.
XCUITest iOS için iki kontrol içerir: uygulamayı başlatma ve ana ekranı görüntüleme. Test, uygulamayı `XCUIApplication().launch()` aracılığıyla başlatır ve anahtar bir öğenin (orneğin `navigationBar`) var olduğunu kontrol eder. Uygulama başlatırken çökerse, XCTest çerçevesi hatayı kaydeder ve test FAIL ile sonlanır. Smoke Test içeriği kontrol etmez — yalnızca ekranın açıldığını kontrol eder.
Espresso Android için bir Activity başlatmak üzere `ActivityScenario` ve öğeleri kontrol etmek için `onView` kullanır. Platformlar arasında kritik bir fark: iOS simülatörü gerçek bir cihazdan farklı davranış gösterebilir, bu nedenle Android Smoke Test’lerinin Firebase Test Lab veya bir öykünücüde çalıştırılması önerilir. Firebase Test Lab, 10 cihazda Smoke Test’lerin paralel yürütülmesini destekler.
import XCTest
class LoginSmokeTest: XCTestCase {
let app = XCUIApplication()
override func setUp() {
continueAfterFailure = false
app.launch()
}
func testLoginButtonExists() {
XCTAssertTrue(app.buttons["Giriş Yap"].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))
}
}
Yukarıdaki örnek, iOS’ta giriş ekranı için bir Smoke Test’i göstermektedir. İlk test, giriş düğmesinin ekranda var olduğunu kontrol eder. İkinci test, tam kimlik doğrulama yolunu çalıştırır ve başarılı girişten sonra bir karşılama mesajının görüntülendiğini doğrular. `waitForExistence` için zaman aşımı 5 saniye, Smoke Test için standart değerdir: UI öğesi bu sürede görünmezse, uygulama düzgün çalışmıyordur.
Sıkça Sorulan Sorular
Modül başına optimum sayı 5 ila 15 testtir. Smoke Test, kullanıcının kritik yolunu kapsamalı ancak tüm işlevselliği kapsamaya çalışmamalıdır. Kriter — tüm Smoke Test’ler başarılı olursa, uygulama daha fazla test için QA ortamında açılabilir.
Smoke Test, yapı kararlılığını kontrol eder ve her yapıda çalıştırılır. Sanity check, belirli değişikliklerden sonra gerçekleştirilen daha dar bir test kümesidir. Sanity check “bu değişiklik X işlevselliğini bozdu mu?” sorusunu yanıtlarken, Smoke Test “yapı temelde çalışıyor mu?” sorusunu yanıtlar.
Evet, Smoke Test’i otomatikleştirmek, sık sürüm yapan projeler için zorunlu bir uygulamadır. Otomasyon, kontrollerin tutarlılığını ve yürütme hızını sağlar. Manuel Smoke Test, yalnızca yapı sayısının haftada 2–3’ü geçmediği projenin erken aşamalarında haklıdır.
Yapı dengesiz olarak işaretlenir ve daha fazla teste gönderilmez. Geliştirici, Smoke Test başarısızlık günlükleriyle birlikte bir bildirim alır. Sorun düzeltildikten sonra yeni bir yapı oluşturulur ve Smoke Test yeniden çalıştırılır. Engelleyen kusur izleyicide kaydedilir.
Smoke Test, kullanıcının kritik yolu her değiştiğinde güncellenir. Yeni bir zorunlu ekran eklenirse (orneğin onboarding), Smoke Test’e dahil edilmelidir. Kontrollerin uygunluğunu korumak için her sprintte Smoke Test paketinin gözden geçirilmesi önerilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun