Smoke Test trong phát triển di động — nó là gì, nhiệm vụ và cách áp dụng

Tác giả: IT Sectr Đã đăng: 2026-04-08 Thời gian đọc: 9 phút

Smoke Test (kiểm thử khói) là một tập hợp tối thiểu các kiểm tra được thực hiện sau khi xây dựng ứng dụng di động để xác nhận rằng các chức năng chính hoạt động. Smoke Test cho phép từ chối nhanh các bản dựng không ổn định mà không cần chạy chu trình hồi quy đầy đủ. Theo Google Testing Blog (2024), Smoke Test giảm thời gian phản hồi cho nhà phát triển từ 2–3 giờ xuống còn 10–15 phút. Smoke Test là bộ lọc chất lượng đầu tiên trong đường ống CI/CD ngăn chặn các bản dựng hỏng đến giai đoạn tiếp theo.

Điểm chính

  • Smoke Test — kiểm tra nhanh các chức năng chính của ứng dụng để từ chối các bản dựng không ổn định.
  • Nhiệm vụ — xác nhận đường dẫn quan trọng của người dùng hoạt động (đăng nhập, feed, hồ sơ).
  • Smoke Test được thực hiện trước kiểm thử hồi quy và thường mất 5–15 phút.
  • Tự động hóa Smoke Test trong CI/CD là yếu tố bắt buộc của đường ống phát triển di động hiện đại.
  • Khác biệt với hồi quy — Smoke Test chỉ kiểm tra đường dẫn quan trọng, hồi quy bao phủ toàn bộ chức năng.

Smoke Test là gì?

Smoke Test là một tập hợp các kiểm tra nhanh xác minh các chức năng chính của ứng dụng mà không cần phân tích sâu. Thuật ngữ này xuất phát từ kỹ thuật phần cứng: nếu một thiết bị bắt đầu bốc khói sau khi lắp ráp, nó sẽ không được gửi đi kiểm tra đầy đủ. Trong phát triển di động, Smoke Test thực hiện cùng chức năng đó — lọc ra các bản dựng rõ ràng không hoạt động. Theo Microsoft DevOps (2024), việc triển khai Smoke Test làm giảm số lượng lỗi đến đội QA xuống 40%.

Smoke Test được chạy trên mỗi bản dựng mới — cả Android và iOS. Lý tưởng nhất, Smoke Test không nên mất quá 15 phút và nên tự động khởi chạy sau khi xây dựng thành công. Tiêu chí đạt — 100% các bài kiểm tra trong bộ Smoke Test phải thành công. Nếu ít nhất một bài kiểm tra thất bại, bản dựng được đánh dấu là không ổn định và không được gửi đi kiểm tra thêm. Theo Google Testing Blog (2024), cách tiếp cận này giảm thời gian giao tính năng cho người dùng xuống 25%.

Smoke Test có thể là thủ công (danh sách kiểm tra 5–10 mục) hoặc tự động. Trong các dự án di động hiện đại, ưu tiên dành cho Smoke Test tự động được tích hợp trong CI/CD. Smoke Test thủ công chỉ hợp lý ở giai đoạn đầu của dự án khi việc tự động hóa không khả thi về mặt kinh tế. Theo Bitrise (2025), 73% nhóm phát triển di động tự động hóa Smoke Test của họ.

Smoke Test khác kiểm thử hồi quy như thế nào?

Smoke Test và kiểm thử hồi quy thường bị nhầm lẫn, nhưng chúng là các thực hành khác nhau với mục tiêu khác nhau. Kiểm thử hồi quy xác minh rằng các thay đổi mã không làm hỏng chức năng hiện có. Nó bao phủ tất cả các mô-đun và kịch bản của ứng dụng, bao gồm cả các trường hợp hiếm và biên. Smoke Test chỉ kiểm tra đường dẫn quan trọng — các kịch bản chính mà không có chúng thì ứng dụng vô dụng. Độ sâu bao phủ là sự khác biệt chính: Smoke Test bao phủ 5–10% chức năng, hồi quy bao phủ 80–100%.

Sự khác biệt thứ hai là thời gian thực hiện. Bộ kiểm thử hồi quy cho ứng dụng di động có thể mất từ 2 đến 12 giờ, tùy thuộc vào quy mô dự án và số lượng nền tảng. Smoke Test mất 5–15 phút. Theo Sauce Labs (2025), thời gian thực hiện trung bình của bộ hồi quy cho ứng dụng iOS là 4,5 giờ, và cho Android — 3,2 giờ. Smoke Test trên cả hai nền tảng hoàn thành trong 10–15 phút.

Sự khác biệt thứ ba là vị trí trong đường ống. Smoke Test được chạy ngay sau khi xây dựng, trước kiểm thử hồi quy. Nếu Smoke Test thất bại, hồi quy không được khởi chạy — điều này tiết kiệm tài nguyên CI/CD. Hiệu suất đường ống — Smoke Test lọc ra đến 30% các bản dựng đáng lẽ đã thất bại ở hồi quy, và tài nguyên tiết kiệm đủ để chạy các tác vụ khác song song.

Tham sốSmoke TestKiểm thử hồi quy
Mục tiêuKiểm tra nhanh đường dẫn quan trọngKiểm tra toàn bộ chức năng
Phạm vi5–10% kịch bản80–100% kịch bản
Thời gian5–15 phút2–12 giờ
Tần suấtMỗi bản dựngTrước khi phát hành hoặc hàng ngày
CI/CDSau khi xây dựng, trước hồi quySau Smoke Test

Những gì được bao gồm trong Smoke Test ứng dụng di động

Khởi chạy ứng dụng

Khởi chạy ứng dụng — bài kiểm tra đầu tiên và quan trọng nhất. Ứng dụng phải khởi chạy mà không bị treo trên tất cả các thiết bị mục tiêu. Smoke Test kiểm tra khởi động nguội: cài đặt → mở → hiển thị màn hình đầu tiên. Nếu ứng dụng treo khi khởi chạy, các kiểm tra thêm là vô ích. XCUITest và Espresso cho phép tự động hóa kiểm tra khởi chạy trong 2–3 dòng mã. Đối số khởi chạy `-AppleLanguages (ru)` giúp xác minh bản địa hóa khi khởi động.

Xác thực

Xác thực — kịch bản quan trọng thứ hai. Smoke Test phải xác minh rằng biểu mẫu đăng nhập được hiển thị, các trường nhập phản hồi khi chạm, nút đăng nhập gửi yêu cầu và ứng dụng chuyển đến màn hình chính sau khi xác thực thành công. Lỗi xác thực chặn quyền truy cập vào tất cả các chức năng khác, vì vậy kiểm tra này được bao gồm trong tập tối thiểu. Token refresh — kiểm tra bổ sung cho các ứng dụng sử dụng OAuth 2.0.

Tải nội dung và điều hướng

Tải nội dung chính — bài kiểm tra thứ ba của Smoke Test. Màn hình chính hoặc feed của ứng dụng phải tải và hiển thị dữ liệu. Nếu API không phản hồi hoặc phân tích phản hồi bị hỏng, người dùng thấy màn hình trống. Kiểm tra mạng trong Smoke Test bao gồm yêu cầu GET cơ bản đến điểm cuối chính và xác minh rằng phản hồi có cấu trúc mong đợi. Điều hướng — kịch bản thứ tư. Smoke Test điều hướng qua các màn hình chính của ứng dụng: trang chủ → tìm kiếm → hồ sơ → cài đặt. Thanh tab và trình đơn bên là các nguồn điển hình của vấn đề điều hướng mà Smoke Test phát hiện sớm.

Tự động hóa Smoke Test trong CI/CD

Fastlane — công cụ tiêu chuẩn để tự động hóa CI/CD di động. Smoke Test trong Fastlane được chạy qua `scan` (cho XCUITest) hoặc `gradle` (cho Espresso). Fastlane cho phép cấu hình chạy Smoke Test trên nhiều thiết bị song song, giảm thời gian tổng thể. Cấu hình trong Fastfile bao gồm mục tiêu bộ Smoke Test và ngưỡng đạt: 100% kiểm tra thành công.

GitHub Actions (2024) đã xuất bản một mẫu CI/CD di động tích hợp sẵn Smoke Test. Mẫu bao gồm ba giai đoạn: xây dựng → Smoke Test → hồi quy. Nếu Smoke Test thất bại, mẫu tự động kết thúc đường ống và gửi thông báo đến Slack hoặc Telegram. Matrix strategy cho phép chạy Smoke Test trên ba phiên bản iOS và năm mẫu Android cùng một lúc.

Phân chia trách nhiệm trong CI/CD: Smoke Test cung cấp phản hồi nhanh, trong khi hồi quy cung cấp bao phủ đầy đủ. Smoke Test không nên sao chép hồi quy và ngược lại. Độ chi tiết của Smoke Test — một kiểm tra cho mỗi kịch bản quan trọng. Nếu Smoke Test mất hơn 15 phút, nó cần được tối ưu hóa: loại bỏ các kiểm tra dư thừa hoặc song song hóa thực hiện.

ruby
# Cấu hình Fastfile cho 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

Công cụ cho Smoke Test

XCUITest — framework của Apple để kiểm thử giao diện người dùng cho ứng dụng iOS. XCUITest được sử dụng để tự động hóa Smoke Tests: khởi chạy ứng dụng, kiểm tra các phần tử giao diện, mô phỏng hành động người dùng. Kết hợp với Xcode Server hoặc GitHub Actions, XCUITest được chạy ở mỗi commit. XCTest — framework cơ bản cho kiểm thử đơn vị bổ trợ XCUITest để xác minh logic.

Espresso — framework của Google để kiểm thử giao diện Android. Espresso đồng bộ với luồng giao diện người dùng và đảm bảo tất cả hoạt ảnh hoàn thành trước khi bắt đầu kiểm tra. Espresso hỗ trợ kiểm tra qua `onView(withId(...)).check(matches(...))`. Android Test Orchestrator chạy mỗi Smoke Test trong một tiến trình riêng, ngăn các kiểm tra trước ảnh hưởng đến các kiểm tra sau.

Detox — framework cho React Native hỗ trợ Smoke Test và kiểm thử hộp xám. Detox đồng bộ với cầu nối React Native và tự động chờ các hoạt động bất đồng bộ hoàn thành. Kiểm thử hộp xám cho phép Detox xác minh trạng thái ứng dụng mà không cần truy cập trực tiếp vào mã nguồn.

Ví dụ Smoke Test trong Swift và Kotlin

XCUITest cho iOS bao gồm hai kiểm tra: khởi chạy ứng dụng và hiển thị màn hình chính. Bài kiểm tra khởi chạy ứng dụng qua `XCUIApplication().launch()` và kiểm tra xem một phần tử chính (ví dụ, `navigationBar`) có tồn tại không. Nếu ứng dụng treo khi khởi chạy, framework XCTest ghi lại lỗi và bài kiểm tra kết thúc với FAIL. Smoke Test không kiểm tra nội dung — chỉ rằng màn hình đã mở.

Espresso cho Android sử dụng `ActivityScenario` để khởi chạy Activity và `onView` để kiểm tra các phần tử. Một khác biệt quan trọng giữa các nền tảng: trình mô phỏng iOS có thể hiển thị hành vi khác với thiết bị thật, vì vậy nên chạy Smoke Tests Android trên Firebase Test Lab hoặc trình giả lập. Firebase Test Lab hỗ trợ chạy song song Smoke Tests trên 10 thiết bị.

swift
import XCTest

class LoginSmokeTest: XCTestCase {
    let app = XCUIApplication()

    override func setUp() {
        continueAfterFailure = false
        app.launch()
    }

    func testLoginButtonExists() {
        XCTAssertTrue(app.buttons["Đăng nhập"].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í dụ trên cho thấy Smoke Test cho màn hình đăng nhập trên iOS. Bài kiểm tra đầu tiên kiểm tra xem nút đăng nhập có tồn tại trên màn hình không. Bài kiểm tra thứ hai chạy qua đường dẫn xác thực đầy đủ và kiểm tra rằng thông báo chào mừng được hiển thị sau khi đăng nhập thành công. Thời gian chờ 5 giây cho `waitForExistence` là giá trị tiêu chuẩn cho Smoke Test: nếu phần tử giao diện không xuất hiện trong thời gian đó, ứng dụng không hoạt động chính xác.

Câu hỏi thường gặp

Bao nhiêu bài kiểm tra nên có trong Smoke Test?

Số lượng tối ưu là từ 5 đến 15 bài kiểm tra cho mỗi mô-đun. Smoke Test nên bao phủ đường dẫn quan trọng của người dùng mà không cố gắng bao phủ toàn bộ chức năng. Tiêu chí — nếu tất cả các bài kiểm tra Smoke Test đều đạt, ứng dụng có thể được mở trong môi trường QA để kiểm tra thêm.

Smoke Test khác sanity check như thế nào?

Smoke Test kiểm tra độ ổn định của bản dựng và được chạy trên mỗi bản dựng. Sanity check là một tập hợp hẹp hơn các bài kiểm tra được thực hiện sau các thay đổi cụ thể. Sanity check trả lời câu hỏi "thay đổi này có làm hỏng chức năng X không?", trong khi Smoke Test trả lời "bản dựng có hoạt động cơ bản không?".

Có cần tự động hóa Smoke Test không?

Có, tự động hóa Smoke Test là thực hành bắt buộc cho các dự án có bản phát hành thường xuyên. Tự động hóa đảm bảo tính nhất quán của các kiểm tra và tốc độ thực hiện. Smoke Test thủ công chỉ hợp lý ở giai đoạn đầu của dự án khi số lượng bản dựng không vượt quá 2–3 mỗi tuần.

Làm gì nếu Smoke Test thất bại?

Bản dựng được đánh dấu là không ổn định và không được gửi đi kiểm tra thêm. Nhà phát triển nhận được thông báo kèm nhật ký lỗi Smoke Test. Sau khi sửa sự cố, một bản dựng mới được tạo và Smoke Test được chạy lại. Lỗi chặn được ghi lại trong hệ thống theo dõi.

Bao lâu nên cập nhật Smoke Test?

Smoke Test được cập nhật mỗi khi đường dẫn quan trọng của người dùng thay đổi. Nếu một màn hình bắt buộc mới được thêm vào (ví dụ, onboarding), nó phải được đưa vào Smoke Test. Nên xem xét lại bộ Smoke Test mỗi sprint để duy trì tính phù hợp của các kiểm tra.

Tổng kết

  • Smoke Test — một tập hợp tối thiểu các kiểm tra đường dẫn quan trọng của ứng dụng, được chạy sau mỗi bản dựng.
  • Các kiểm tra chính — khởi chạy ứng dụng, xác thực, tải nội dung và điều hướng qua các màn hình chính.
  • Khác biệt với hồi quy — Smoke Test bao phủ 5–10% kịch bản và mất 5–15 phút, không phải hàng giờ.
  • Công cụ — XCUITest cho iOS, Espresso cho Android, Detox cho React Native.
  • Tự động hóa Smoke Test được tích hợp trong CI/CD qua Fastlane, GitHub Actions hoặc Bitrise.
  • Smoke Test được chạy trước kiểm thử hồi quy và lọc ra đến 30% các bản dựng không ổn định.
  • Nên xem xét lại thành phần Smoke Test mỗi sprint để duy trì tính phù hợp.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm