CLOUSD
Mở tài khoản
Kiểm thử

Device farm Android: tự dựng hay dùng đám mây

Góc nhìn QA về device farm: dùng để làm gì, cấu tạo và chi phí ẩn của một giá máy tự dựng, phép tính cho điện thoại đám mây, và mô hình lai mà phần lớn các đội cuối cùng chọn.

Device farm Android là một tập hợp điện thoại test được nối vào các máy host, để test tự động và con người dùng được chúng mà không cần cầm lên tay. Thuật ngữ này đến từ QA, và bài viết dùng nó đúng nghĩa đó: một kho thiết bị dùng chung để chạy và tái hiện test. Những giá điện thoại dùng để vận hành tài khoản mạng xã hội hàng loạt là chuyện khác, vi phạm điều khoản của mọi nền tảng lớn, và không nằm trong phạm vi bài này.

Đội mobile nào rồi cũng tới lúc một ngăn kéo điện thoại không còn đủ dùng. Ai đó mang chiếc Pixel về nhà, không ai biết máy nào đang cài bản build nào, và CI chạy trên đúng một emulator. Bài hướng dẫn này nói về việc farm dùng để làm gì, một giá máy tự dựng cần những gì và tốn bao nhiêu, và khi nào điện thoại đám mây làm được cùng việc đó.

Device farm dùng để làm gì

  • UI test tự động trên một ma trận. Bộ test Espresso, UI Automator hay Appium chạy cùng lúc trên nhiều phiên bản Android và kích thước màn hình, để bản release candidate nhận một câu trả lời rõ ràng.
  • Tái hiện lỗi người dùng báo. Báo cáo ghi tên mẫu máy và phiên bản Android, và farm có đúng máy đó hoặc một máy gần giống.
  • Phiên test thủ công và khám phá. Tester mở một mẫu máy cụ thể từ xa thay vì mượn của đồng nghiệp.
  • Chạy dài. Đồng bộ nền, việc gửi thông báo và bộ nhớ qua nhiều giờ, những thứ mà một emulator bị vứt đi sau mỗi job CI không thể cho thấy.
  • Smoke test trước release. Cùng một lượt kiểm tra nhanh trên mười máy song song trước khi phát hành.

Cấu tạo một giá máy tự dựng

Dựng giá máy không khó. Giữ cho nó khỏe mới là việc thật sự. Một giá máy điển hình có năm phần.

Điện thoại. Chọn theo số liệu analytics, đừng chọn theo đợt khuyến mãi: các mẫu có tỉ lệ phiên cao nhất, phiên bản Android cũ nhất bạn còn hỗ trợ và phiên bản mới nhất. Mua hai chiếc cho mẫu phổ biến nhất, để một chiếc dùng thủ công trong khi chiếc kia chạy CI.

Nguồn điện và USB. Hub có nguồn riêng với đủ dòng điện cho mỗi cổng, cáp ngắn chất lượng tạm được, và ngân sách cho USB host controller. Theo kinh nghiệm, adb bắt đầu chập chờn ở đâu đó khi vượt quá mười đến mười lăm máy trên một host, tùy controller và hub.

Host. Các máy Linux nhỏ hoặc Mac, mỗi máy chạy adb server cho kệ của nó. Theo dõi thiết bị theo số serial và giữ bản đồ máy nào nằm ở cổng nào, vì bạn sẽ cần đến nó vào đúng lúc tệ nhất.

Phần mềm. adb, một trình quản lý thiết bị như DeviceFarmer (bản kế nhiệm do cộng đồng duy trì của OpenSTF) cho màn hình từ xa và đặt lịch dùng máy, Appium kèm grid nếu bạn test qua WebDriver, và CI để lên lịch các lần chạy.

Việc vặt hằng ngày. Đây là phần không ai tính vào ngân sách. Pin phồng lên khi điện thoại cắm sạc suốt nhiều tháng, nên hãy dùng giới hạn sạc mà một số hãng có, hoặc ổ cắm thông minh bật tắt nguồn theo chu kỳ. Lời nhắc cập nhật hệ thống hiện ra giữa lúc đang chạy. Màn hình tự khóa, thông báo chồng chất, bộ nhớ đầy media test, và một chiếc máy crash lúc nửa đêm khởi động lại vào một hộp thoại không có ai bấm.

Một giá máy thực sự tốn bao nhiêu

Với giá 20 điện thoại, ước tính sơ bộ năm 2026 như sau. Điện thoại tốn $3,000 đến $12,000 tùy bạn cần bao nhiêu máy flagship. Hub, cáp, kệ và hai máy host thêm $1,500 đến $4,000. Sau đó mỗi năm dành 20 đến 30 % số tiền mua máy cho pin phồng, cổng hỏng và những mẫu mới mà người dùng của bạn mua.

Khoản khiến các đội bất ngờ là thời gian: ba đến tám giờ mỗi tuần để ai đó gỡ kẹt điện thoại, cài cập nhật và khởi động lại host. Con số của bạn sẽ khác, nhưng bức tranh thì không. Phần cứng chỉ là phần nhỏ hơn của hóa đơn.

Điện thoại đám mây biến tất cả thành chi phí vận hành, không phải bảo trì. Trên Clousd, trả theo phút là $0.004 mỗi phút khi máy chạy và không bao giờ quá $0.80 mỗi máy một ngày, còn các gói bắt đầu từ $20 mỗi tháng; trang bảng giá có chi tiết. Hai ví dụ tính cho cùng 20 máy:

  • Hai giờ mỗi ngày làm việc: 20 máy × 120 phút × $0.004 = $9.60 một ngày, khoảng $211 cho 22 ngày làm việc.
  • Chạy suốt ngày đêm: mức tối đa mỗi ngày được áp dụng, nên 20 × $0.80 × 30 ngày = tối đa $480 một tháng.

Phút trả theo mức dùng dừng lại khi máy dừng. Một mẫu máy bạn chỉ cần cho một báo cáo lỗi là chiếc điện thoại bạn tạo, dùng rồi xóa.

Giá máy riêng, device cloud hay điện thoại đám mây

Giá máy riêngCloud thiết bị thật công cộngĐiện thoại đám mây
Chi phí ban đầuđiện thoại, hub, hostkhôngkhông
Chi phí vận hànhthay thế và thời gian nhân sựtheo phiên hoặc theo thángtheo phút khi chạy, hoặc theo gói
Camera, GPU, pinthậtthậtkhông đại diện
Firmware và giao diện của hãngcócótùy nhà cung cấp
Có máy khi bạn cầnnếu không ai khác đang dùngdùng chung, có thể đang bậntạo theo nhu cầu
Trạng thái giữa các phiênđược giữthường bị xóađược giữ đến khi bạn đặt lại
Mở rộng cho tuần releasemua thêm máymua thêm thời giantạo thêm máy
Bảo trìbạn lokhôngkhông

Đám mây thay đổi được gì

  • Khởi đầu sạch. Một máy được tạo trong khoảng một phút và có thể đặt lại về trạng thái mới trước mỗi bộ test, để mọi lần chạy bắt đầu từ cùng một chỗ.
  • Mẫu máy là một tham số. Android 12 đến 17 trên hơn 150 mẫu máy thật, chọn cho từng lần chạy từ danh sách mẫu máy thay vì từ những gì đang có trên kệ.
  • Mặc định là từ xa. Màn hình trực tiếp trên trình duyệt cho phiên thủ công, REST API và ADB cho CI, và MCP server khi một AI agent chạy phần kiểm tra.
  • Không việc vặt phần cứng. Không gì phồng lên, không gì cần cáp, không gì phải khởi động lại lúc 2 giờ sáng.

Những gì không thay đổi

Điện thoại đám mây không phải điện thoại vật lý. Pipeline camera, độ chính xác cảm biến, hiệu năng GPU, mức hao pin, giảm xung do nhiệt, NFC, Bluetooth và cơ chế diệt app chạy nền riêng của từng hãng vẫn cần phần cứng thật. Phần lớn các đội cuối cùng chọn mô hình lai: ba đến năm điện thoại vật lý trên bàn cho các kiểm tra đó, còn ma trận rộng gồm mẫu máy và phiên bản thì đặt trên đám mây. Test ứng dụng trên các phiên bản Android khác nhau liệt kê ma trận đó nên phủ những gì.

Chạy test trên farm, dù farm nằm ở đâu

Test runner gọi điện thoại bằng adb serial, nên cùng một bộ test chạy được trên giá máy cắm USB lẫn trên điện thoại từ xa. AndroidJUnitRunner có thể chia một bộ test cho nhiều thiết bị theo shard:

R=com.example.app.test/androidx.test.runner.AndroidJUnitRunner
adb -s "$P12" shell am instrument -w -e numShards 3 -e shardIndex 0 $R
adb -s "$P14" shell am instrument -w -e numShards 3 -e shardIndex 1 $R
adb -s "$P16" shell am instrument -w -e numShards 3 -e shardIndex 2 $R

Chạy song song ba dòng này và mỗi máy nhận một phần ba số test. Appium chọn thiết bị qua capability appium:udid, nhận đúng serial đó. Điện thoại từ xa gia nhập kho máy bằng adb connect; tài liệu ADB cho thấy cách làm qua relay, còn trang kiểm thử ứng dụng trình bày đường đi qua API cho CI.

Hãy tính trước rằng mỗi thao tác từ xa mất thêm chút thời gian so với qua USB, và đặt timeout cho UI test theo đó. Những test qua được trên emulator local nhưng timeout khi chạy từ xa thường có một lệnh sleep viết cứng hoặc một lệnh chờ quá chặt.

Mobile device farm và cloud phone farm

Mobile device farm là cùng ý tưởng đó, chỉ là có thêm iPhone và iPad trên kệ cạnh điện thoại Android. Trong QA, cloud phone farm đơn giản là kho điện thoại đám mây mà bộ test của bạn chạy trên đó. Chữ "farm" còn có nghĩa khác ngoài chuyện test; bài giải thích về phone farm nói về chúng.

Sẵn sàng khởi chạy
chiếc điện thoại đám mây đầu tiên?

Dùng thử miễn phí 30 phút

Không cần thẻ