Smoke Test (δοκιμή καπνού) είναι ένα ελάχιστο σύνολο ελέγχων που εκτελείται μετά το build της κινητής εφαρμογής για να επιβεβαιωθεί ότι οι βασικές λειτουργίες λειτουργούν. Το Smoke Test επιτρέπει την γρήγορη απόρριψη ασταθών κατασκευών χωρίς τη διεξαγωγή πλήρους κύκλου ελέγχου παλινδρόμησης. Σύμφωνα με το Google Testing Blog (2024), το Smoke Test μειώνει τον χρόνο ανάδρασης για τον πραγματοποιητή από 2–3 ώρες σε 10–15 λεπτά. Smoke Test είναι το πρώτο φίλτρο ποιότητας στον αγωγό CI/CD που εμποδίζει την είσοδο χαλασμένων κατασκευών στο επόμενο στάδιο.
Βασικά σημεία
Smoke Test (δοκιμή καπνού) είναι μια συλλογή γρήγορων δοκιμών που ελέγχουν τις βασικές λειτουργίες της εφαρμογής χωρίς επισταμένη ανάλυση. Ο όρος προέρχεται από την μηχανολογία υλικού: εάν μια συσκευή μετά τη συναρμολόγηση αρχίσει να καπνίζει, δεν στέλνεται για πλήρη δοκιμή. Στην κινητή ανάπτυξη, το Smoke Test εκτελεί την ίδια λειτουργία — αποκλείει εξ αρχής μη λειτουργικές κατασκευές. Σύμφωνα με το Microsoft DevOps (2024), η εφαρμογή του Smoke Test μειώνει τον αριθμό των ελαττωμάτων που φτάνουν στην ομάδα QA κατά 40%.
Το Smoke Test εκτελείται σε κάθε νέο build — τόσο σε Android όσο και σε iOS. Ιδανικά, το Smoke Test δεν πρέπει να διαρκεί πάνω από 15 λεπτά και να εκκινά αυτόματα μετά από επιτυχημένο build. Κριτήριο επιτυχίας — το 100% των δοκιμών από το σύνολο Smoke Test πρέπει να ολοκληρωθούν με επιτυχία. Εάν τουλάχιστον μία δοκιμή αποτυχεί, το build σημειώνεται ως ασταθές και δεν αποστέλλεται για περαιτέρω δοκιμή. Σύμφωνα με το 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 καλύπτει το 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 εκτελείται αμέσως μετά το build, πριν τον έλεγχο παλινδρόμησης. Εάν το Smoke Test αποτυχεί, η παλινδρόμηση δεν εκκινά — αυτό εξοικονομεί πόρους CI/CD. Pipeline efficiency — το Smoke Test αποκλείει έως και 30% των builds που δεν θα περνούσαν από την παλινδρόμηση, και οι εξοικονομημένοι πόροι είναι αρκετοί για παράλληλη εκτέλεση άλλων εργασιών.
| Παράμετρος | Smoke Test | Έλεγχος παλινδρόμησης |
|---|---|---|
| Σκοπός | Γρήγορος έλεγχος κριτικής διαδρομής | Έλεγχος όλης της λειτουργικότητας |
| Όγκος | 5–10% σεναρίων | 80–100% σεναρίων |
| Χρόνος | 5–15 λεπτά | 2–12 ώρες |
| Συχνότητα | Σε κάθε build | Πριν την εκδοση ή καθημερινά |
| CI/CD | Μετά το build, πριν την παλινδρόμηση | Μετά το Smoke Test |
Εκκίνηση εφαρμογής — το πρώτο και πιο σημαντικό τεστ. Η εφαρμογή πρέπει να εκκινά χωρίς σφάλμα σε όλες τις στοχευμένες συσκευές. Το Smoke Test ελέγχει την ψυχρή εκκίνηση: εγκατάσταση → άνοιγμα → εμφάνιση πρώτης οθόνης. Εάν η εφαρμογή συντρίβεται κατά την εκκίνηση, η περαιτέρω δοκιμή είναι άχρηστη. Τα XCUITest και Espresso επιτρέπουν την αυτοματοποίηση του ελέγχου εκκίνησης σε 2–3 γραμμές κώδικα. Launch argument `-AppleLanguages (el)` βοηθά στον έλεγχο της τοπικοποίησης κατά την εκκίνηση.
Εξουσιοδότηση — το δεύτερο κριτικό σενάριο. Το Smoke Test πρέπει να ελέγχει ότι η φόρμα σύνδεσης εμφανίζεται, τα πεδία εισαγωγής αντιδρούν στο άγγιγμα, το κουμπί σύνδεσης στέλνει το αίτημα και η εφαρμογή μεταβαίνει στην αρχική οθόνη μετά από επιτυχημένη εξουσιοδότηση. Το σφάλμα εξουσιοδότησης αποκλείει την πρόσβαση σε όλες τις άλλες λειτουργίες, επομένως ο έλεγχός της περιλαμβάνεται στο ελάχιστο σύνολο. Token refresh — επιπρόσθετος έλεγχος για εφαρμογές με OAuth 2.0.
Φόρτωση κύριου περιεχομένου — το τρίτο τεστ Smoke Test. Η αρχική οθόνη ή ροή της εφαρμογής πρέπει να φορτώνει και να εμφανίζει δεδομένα. Εάν το API δεν απαντά ή η ανάλυση της απόκρισης είναι εσφαλμένη, ο χρήστης βλέπει μια κενή οθόνη. Ο έλεγχος δικτύου στο Smoke Test περιλαμβάνει ένα βασικό αίτημα GET προς το κύριο endpoint και έλεγχο ότι η απάντηση έχει την αναμενόμενη δομή. Πλοήγηση — το τέταρτο σενάριο. Το Smoke Test διασχίζει τις κύριες οθόνες της εφαρμογής: αρχική → αναζήτηση → προφίλ → ρυθμίσεις. Η γραμμή καρτελών και το πλευρικό μενού — τυπικές πηγές προβλημάτων στην πλοήγηση που το Smoke Test ανιχνεύει σε πρώιμο στάδιο.
Fastlane — το πρότυπο εργαλείο για αυτοματοποίηση κινητού CI/CD. Το Smoke Test στο Fastlane εκκινά μέσω `scan` (για XCUITest) ή `gradle` (για Espresso). Το Fastlane επιτρέπει τη ρύθμιση εκκίνησης του Smoke Test σε πολλά χροικά παράλληλα, μειώνοντας έτσι τον συνολικό χρόνο. Ρύθμιση στο Fastfile περιλαμβάνει τον στόχο για το σύνολο Smoke Test και το κατώφλι επιτυχίας: 100% επιτυχημένες δοκιμές.
GitHub Actions (2024) δημοσίευσε ένα πρότυπο κινητού CI/CD με ενσωματωμένο Smoke Test. Το πρότυπο περιλαμβάνει τρία στάδια: build → Smoke Test → παλινδρόμηση. Εάν το Smoke Test αποτυχεί, το πρότυπο τερματίζει αυτόματα τον αγωγό και στέλνει ειδοποίηση στο Slack ή Telegram. Matrix strategy επιτρέπει την ταυτόχρονη εκκίνηση του Smoke Test σε τρεις εκδόσεις iOS και πέντε μοντέλα Android.
Διαιρεσμός ευθυνών στο CI/CD: το Smoke Test είναι υπεύθυνο για γρήγορη ανάδραση, η παλινδρόμηση για πλήρη κάλυψη. Το Smoke Test δεν πρέπει να αντιγράφει την παλινδρόμηση και αντιστρόφως. Βαθμίδα Smoke Test — ένας έλεγχος ανά κριτικό σενάριο. Εάν το Smoke Test διαρκεί περισσότερο από 15 λεπτά, πρέπει να βελτιστοποιηθεί: να αφαιρεθούν οι περιττοί έλεγχοι ή να παραλληλιστεί η εκτέλεση.
# Ρύθμιση 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
XCUITest — το πλαίσιο της Apple για δοκιμή UI εφαρμογών iOS. Το XCUITest χρησιμοποιείται για αυτοματοποίηση του Smoke Test: εκκίνηση εφαρμογής, έλεγχος στοιχείων διεπαφής, προσομοίωση ενεργειών χρήστη. Σε συνδυασμό με Xcode Server ή GitHub Actions, το XCUITest εκτελείται σε κάθε commit. XCTest — το βασικό πλαίσιο για unit test που συμπληρώνει το XCUITest για έλεγχο λογικής.
Espresso — το πλαίσιο της Google για δοκιμή UI σε Android. Το Espresso συγχρονίζεται με το νήμα UI και εγγυάται ότι όλες οι κινήσεις έχουν ολοκληρωθεί πριν την έναρξη του ελέγχου. Το Espresso υποστηρίζει έλεγχο μέσω `onView(withId(...)).check(matches(...))`. Android Test Orchestrator εκτελεί κάθε Smoke Test σε ξεχωριστή διεργασία, αποτρέποντας την επηρεασμού προηγούμενων δοκιμών σε επόμενες.
Detox — πλαίσιο για React Native που υποστηρίζει Smoke Test και grey-box testing. Το Detox συγχρονίζεται με το React Native bridge και αυτόματα αναμένει την ολοκλήρωση ασύγχρονων λειτουργιών. Grey-box testing επιτρέπει στο Detox να ελέγχει την κατάσταση της εφαρμογής χωρίς άμεση πρόσβαση στον πηγαίο κώδικα.
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 συσκευές.
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 δεν εμφανιστεί μέσα σε αυτό το χρονικό διάστημα, η εφαρμογή δεν λειτουργεί σωστά.
Συχνές Ερωτήσεις
Ο βελτιστος αριθμός είναι 5 έως 15 δοκιμές ανά άρθρωμα. Το Smoke Test πρέπει να καλύπτει την κριτική διαδρομή χρήστη, αλλά να μην προσπαθεί να καλύψει όλη τη λειτουργικότητα. Κριτήριο — εάν όλες οι δοκιμές Smoke Test περάσουν, η εφαρμογή μπορεί να ανοιχτεί στο περιβάλλον QA για περαιτέρω δοκιμή.
Smoke Test ελέγχει την σταθερότητα του build και εκτελείται σε κάθε build. Το Sanity check είναι ένα πιο στενό σύνολο δοκιμών που εκτελείται μετά την εφαρμογή συγκεκριμένων αλλαγών. Το Sanity check απαντά στην ερώτηση ‘μήπως αυτή η αλλαγή χαλάσαε την λειτουργία X;’, ένω το Smoke Test απαντά στο ‘λειτουργεί το build καταρχήν;’.
Ναι, η αυτοματοποίηση του Smoke Test είναι υποχρεωτική πρακτική για έργα με συχνές εκδόσεις. Αυτοματοποίηση εξασφαλίζει τη συνέπεια των ελέγχων και την ταχύτητα εκτέλεσης. Το χειροκίνητο Smoke Test δικαιολογείται μόνο στα πρώιμα στάδια του έργου, όταν ο αριθμός των builds δεν υπερβαίνει τις 2–3 ανά εβδομάδα.
Το build σημειώνεται ως ασταθές και δεν αποστέλλεται για περαιτέρω δοκιμή. Ο πραγματοποιητής λαμβάνει ειδοποίηση με τα αρχεία καταγραφής της αποτυχίας του Smoke Test. Μετά την επισκευή του προβλήματος δημιουργείται ένα νέο build στο οποίο το Smoke Test εκτελείται ξανά. Το μπλοκίρισμα σφάλμα καταγράφεται στον ιχνηλατή.
Smoke Test ενημερώνεται με κάθε αλλαγή της κριτικής διαδρομής χρήστη. Εάν προστίθεται μια νέα υποχρεωτική οθόνη (π.χ. onboarding), πρέπει να συμπεριληφθεί στο Smoke Test. Συνιστάται η επιθεώρηση του συνόλου Smoke Test κάθε sprint για την επικαιρότητα των ελέγχων.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης