Trước khi nói đến chuyện kiểm thử tự động, ta cần hiểu rõ mình đang test loại ứng dụng mobile nào, vì mỗi loại có cách xây dựng và cách tương tác khác nhau.

3 dạng khác nhau của ứng dụng mobile

Một ứng dụng có thể đến với người dùng trên nền tảng mobile theo ba dạng khác nhau, cụ thể như sau:

  • Native apps: Native app hoàn toàn đặc thù cho nền tảng mobile mà nó nhắm tới. Chúng được phát triển bằng các ngôn ngữ do nền tảng đó hỗ trợ và gắn chặt với SDK bên dưới. Với iOS, ứng dụng được viết bằng Objective-C (hoặc Swift) và phụ thuộc vào iOS SDK; tương tự, với Android, ứng dụng được viết bằng Java và phụ thuộc vào Android SDK.
  • m.site: m.site, hay còn gọi là mobile website, là phiên bản thu nhỏ của ứng dụng web và được tải trên trình duyệt của thiết bị di động. Trên iOS đó có thể là Safari hoặc Chrome, còn trên Android có thể là trình duyệt mặc định của Android hoặc Chrome. Ví dụ, trên thiết bị iOS hoặc Android, hãy mở trình duyệt và gõ www.facebook.com. Trước khi trang được tải, bạn sẽ thấy một lần chuyển hướng URL từ www.facebook.com sang m.facebook.com. Máy chủ của Facebook nhận ra yêu cầu xuất phát từ thiết bị di động nên phục vụ bản mobile site thay vì trang desktop thông thường. Các m.site này được phát triển bằng JavaScript và HTML5, giống như các ứng dụng web thông thường.
  • Hybrid apps: Hybrid app là sự kết hợp giữa native app và web app. Khi phát triển một native app, một số phần của nó sẽ tải các trang web HTML vào trong ứng dụng, khiến người dùng có cảm giác đang dùng một ứng dụng native. Chúng thường dùng WebView trong native app để tải các trang web này.

Ứng dụng Hybrid

Hybrid app có một số tính chất như sau:

  • Được đóng gói để sử dụng giống như ứng dụng native, có thể truy cập các Native device API, vì nó nằm bên trong một ứng dụng native mobile app.
  • Không hoàn toàn giống native mobile application vì dữ liệu được kết xuất hiển thị thông qua một WebView thay vì UI native của Android; đồng thời cũng không giống 100% ứng dụng dựa trên web ở desktop vì nó không hẳn là web app (m.site).
  • WebView được dùng để hiển thị HTML/CSS từ local và remote.
  • Dùng native app wrapper để giao tiếp giữa ứng dụng WebView với nền tảng thiết bị native.
  • Framework điển hình là Ionic (chạy trên nền Apache Cordova/PhoneGap).

Dạng thứ 4: Cross-platform mobile apps

Với sự ra đời của React Native và NativeScript, một dạng ứng dụng mobile khác (dạng thứ 4) đã xuất hiện, được gọi là "Cross-platform mobile apps".

Cross-platform mobile apps dùng một ngôn ngữ trung gian, ví dụ JavaScript – ngôn ngữ chung của mọi nền tảng, được dùng ở cả iOS và Android. Cross-platform app khác với ứng dụng HTML5 hybrid ở chỗ hybrid app luôn tích hợp sự kết hợp giữa native app với các khái niệm của mobile app và web.

Kiểm thử tự động cho các dạng ứng dụng mobile

Mỗi dạng ứng dụng ở trên đặt ra một yêu cầu khác nhau cho công cụ test: native app cần điều khiển các thành phần UI gốc, m.site cần điều khiển trình duyệt trên di động, còn hybrid app đòi hỏi công cụ phải chuyển qua lại giữa phần native và phần WebView trong cùng một ứng dụng. Vì vậy, khi chọn công cụ, bạn cần xem nó hỗ trợ dạng ứng dụng nào và chạy được trên nền tảng nào.

Hiện có khá nhiều công cụ giúp tự động hóa việc kiểm thử ứng dụng trên thiết bị di động. Sau đây là một số công cụ được xây dựng dựa trên Selenium WebDriver:

  • AndroidDriver: Driver này là một bản triển khai trực tiếp của WebDriver, tương tự như FirefoxDriver, IEDriver, v.v. Nó đóng vai trò là thư viện client mà test script của bạn tương tác. Phía server của nó là AndroidWebDriver, được cài đặt trên thiết bị hoặc trình giả lập (emulator) và thực thi tất cả các lệnh của test script được AndroidDriver chuyển tiếp tới.
  • iPhoneDriver: Driver này hoạt động rất giống AndroidDriver nhưng chỉ dành cho nền tảng iOS. Để sử dụng, bạn cần thiết lập một server trên simulator hoặc trên thiết bị. Tuy nhiên, iPhoneDriver đã không còn được hỗ trợ và đã bị loại bỏ (deprecated).
  • iOSDriver: Như tên gọi, driver này được dùng để tự động hóa native app, hybrid app và m.site trên nền tảng iOS. Nó sử dụng các thư viện UI Automation gốc để tự động hóa trên iOS. Với các test script, mọi thứ này đều trong suốt vì chúng vẫn có thể tiếp tục dùng WebDriver API với các client language bindings ưa thích. Test script giao tiếp với iOS Driver thông qua JSON wire protocol. Tuy nhiên, nếu bạn muốn chạy test script trên nền tảng Android thì không thể dùng driver này.
  • Selendroid: Driver này tương tự iOSDriver và có thể thực thi test script cho native app, hybrid app và m.site trên nền tảng Android. Nó sử dụng thư viện UI Automator gốc do Google cung cấp. Các test script giao tiếp với Selendroid driver qua JSON wire protocol, đồng thời dùng các client language bindings ưa thích.
  • Appium: Đây là một công cụ khác cho phép bạn chạy test script trên cả nền tảng Android và iOS mà không phải thay đổi driver bên dưới. Với hybrid app, Appium cho phép chuyển đổi giữa ngữ cảnh (context) native và WebView ngay trong test script. Trong các phần tiếp theo, chúng ta sẽ tìm hiểu cách làm việc với Appium.

Tóm tắt nhanh

Công cụ Nền tảng Native Hybrid m.site Ghi chú
AndroidDriver Android Hạn chế Hạn chế Có Bản triển khai WebDriver gốc cho Android
iPhoneDriver iOS Hạn chế Hạn chế Có Đã deprecated
iOSDriver iOS Có Có Có Dùng UI Automation
Selendroid Android Có Có Có Dùng UI Automator
Appium Android + iOS Có Có Có Một bộ test chạy cho cả hai nền tảng

Tham khảo