Complete Guide to Android Testing & Automation (part 2)
Vì Android bị phân mảnh nên việc kiểm thử trên nhiều thiết bị là rất cần thiết. Tuy nhiên việc này sẽ làm tốn nhiều chi phí và việc kiểm thử Android tự động sẽ giúp bạn giảm phần nào chi phí đó. Lợi ích của kiểm thử Android tự động: Giảm thời gian để thực hiện các trường hợp kiểm thử Tăng ...
Vì Android bị phân mảnh nên việc kiểm thử trên nhiều thiết bị là rất cần thiết. Tuy nhiên việc này sẽ làm tốn nhiều chi phí và việc kiểm thử Android tự động sẽ giúp bạn giảm phần nào chi phí đó.
-
Lợi ích của kiểm thử Android tự động:
- Giảm thời gian để thực hiện các trường hợp kiểm thử
- Tăng năng suất của quy trình phát triển
- Phát hiện lỗi sớm, tiết kiệm chi phí bảo trì phần mềm
- Tìm và sửa lỗi một cách nhanh chóng
- Đảm bảo chất lượng phần mềm
-
Nghiên cứu 3 framworks sau:
- Android Testing framework
- Robotium Testing framework
- Roboelectric Testing framework
Android Testing framework Một trong những framwork kiểm thử chuẩn cho ứng dụng Android là Android testing framework . Đây là một framwork kiểm thử hiệu quả và dễ sử dụng được tích hợp tốt với các công cụ Android SDK.
- Application package là ứng dụng mà bạn cần kiểm thử
- InstrumentationTestRunner là trình chạy thử các trường hợp kiểm thử trên ứng dụng. Nó bao gồm: 2a) Test tools: Một công cụ SDK để xây dựng kiểm thử. Chúng được tích hợp trong Eclipse IDE hoặc chạy dưới dạng dòng lệnh. 2b) MonkeyRunner: Công cụ cung cấp API để viết chương trình kiểm soát thiết bị Android hoặc trình mô phỏng mã Android.
- Test package được tổ chức thành các dự án kiểm thử. Package này tuân theo quy ước đặt tên. Nếu ứng dụng đang thử nghiệm có tên package là " com.mydomain.myapp ", package kiểm thử nên là " com.mydomain.myapp.test ". Package kiểm thử bao gồm 2 đối tượng như sau: 3a) Test case classes: bao gồm các phương pháp kiểm thử để thực thi trên ứng dụng. 3b) Mock objects: bao gồm dữ liệu mô phỏng sẽ được sử dụng làm đầu vào cho các trường hợp kiểm thử.
Android Test Case Classes
- TestCase bao gồm các phương pháp JUnit để chạy JUnit Test
- TestSuite được sử dụng để chạy tập hợp các trường hợp kiểm thử
- InstrumentationTestSuite là một TestSuite injects Instrumentation thành InstrumentationTestCase trước khi chạy chúng.
- ** InstrumentationTestRunner** là trình chạy thử các trường hợp kiểm thử trên ứng dụng.
- AndroidTestCase mở rộng JUnit TestCase. Nó chứa các phương pháp để truy cập resources như Activity Context.
- ApplicationTestCase xác nhận các Application class trong môi trường có kiểm soát.
- InstrumentationTestCase xác nhận một tính năng đặc biệt hoặc hành vi của ứng dụng, ví dụ, xác minh UI của ứng dụng.
- ActivityTestCase là class cơ sở hỗ trợ kiểm thử các hoạt động ứng dụng.
- ProviderTestCase là class để kiểm tra ContentProvider duy nhất.
- ServiceTestCase được sử dụng để kiểm tra các Service class trong môi trường kiểm thử. Nó cũng hỗ trợ Service's life cycle.
- SingeLauchActivityTestCase được sử dụng để kiểm tra Activity đơn với InstrumentationTestCase.
- **ActivityUnitTestCase < Activity > **được sử dụng để kiểm tra hoạt động đơn lẻ.
- ActivityInstrumentationTestCase2 < Activity > mở rộng JUnit TestCase class. Nó kết nối ứng dụng với thiết bị. Với class này, bạn có thể truy cập vào thành phần GUI của ứng dụng và gửi sự kiện UI (keystroke hoặc touch event) tới UI. Dưới đây là ví dụ về ActivityInstrumentationTestCase. Nó kiểm tra hoạt động UI của ứng dụng Máy tính, kiểm tra tính chính xác của đầu ra giao diện người dùng.
Robotium testing framework Tiêu chuẩn Android Testing framework có một số hạn chế như dưới đây: * Không thể xử lý nhiều hoạt động * Kiểm tra hiệu suất thực hiện chậm * Các trường hợp thử nghiệm phức tạp và khó thực hiện
Framwork Robotium là sự lựa chọn tốt hơn để tiến hành kiểm thử trên ứng dụng Android Robotium là framwork mã nguồn mở và được coi là một phần mở rộng của Android Testing framework. Sử dụng Robotium, developer có thể tạo các trường hợp thử nghiệm GUI tự động hiệu quả cho các ứng dụng Android. Hơn nữa, developer có thể viết các kịch bản kiểm thử chức năng, hệ thống và chấp nhận.
** Robotium Test Case Classes** Robotium sử dụng tập hợp các class ( com.jayway.android.robotium.solo ) để kiểm thử. Class này hỗ trợ các trường hợp kiểm thử trải dài qua nhiều hoạt động. Solo được tích hợp với ActivityInstrumentationTestCase2. Tester có thể viết các trường hợp kiểm thử mà không cần kiến thức về thiết kế ứng dụng (kiểm tra hộp đen) bằng cách sử dụng các Robotium test case classes. Đây là một tính năng nổi bật so với Android test case classes.
Để sử dụng Robotium trong dự án kiểm thử Android của bạn, bạn cần thực hiện theo các bước bên dưới:
Roboelectric testing framework Kiểm thử bằng cách sử dụng Android Testing framework với thiết bị hoặc Emulator là rất khó. Xây dựng và chạy kiểm thử chậm và mất nhiều thời gian phát triển. Để khắc phục sự cố này, có một lựa chọn khác - Roboelectric testing framework.
Roboelectric testing framework. cho phép bạn chạy các trường hợp kiểm thử Android trực tiếp trên JVM mà không cần thiết bị hoặc Emulator.
Roboelectric Test Case Classes Như được trình bày ở trên, Roboelectric có thể thực hiện các việc sau: * Đăng ký và tạo một class Shadow * Chặn tải class Android * Sử dụng trình lưu trữ Java để ghi đè các phương thức của class Android * Bind Shadow đối tượng đến class Android * Điều này cho phép mã được kiểm tra để thực thi mà không cần môi trường Android.
Các framework kiểm thử khác Bên cạnh các framework kiểm thử đã được đề cập ở trên, còn nhiều framework kiểm thử khác như: * Calculon , Java DSL cho Android Activity Testing chạy trên Dalvik Virtual Machine * Android Mock , một framework cho các giao diện giả và được phân loại trên VM Dalvik * Android Junit Report , một phần mềm chạy thử nghiệm thiết bị tùy chỉnh dành cho Android, tạo báo cáo XML để tích hợp với các công cụ khác.
Ứng dụng thực tiễn tốt nhất trong Kiểm thử Android * Developer tạo ra các trường hợp kiểm thử cùng một lúc khi họ đang code * Tất cả các trường hợp kiểm thử phải được lưu trữ trong kiểm soát phiên bản cùng với mã nguồn * Sử dụng tích hợp liên tục và chạy thử nghiệm mỗi khi mã được thay đổi * Tránh sử dụng các Emulator và thiết bị gốc