Android Testing & Automation
Tại sao phải kiểm thử android? Android là hệ điều hành lớn nhất trên thế giới. Có hàng tấn thiết bị và phiên bản android mà ứng dụng của bạn cần tương thích. Dù bạn đầu tư nhiều thời gian vào thiết kế và thực hiện thì sai lầm vẫn là điều ko thể tránh khỏi, và lỗi vẫn sẽ xảy ra Những hiểu lầm ...
Tại sao phải kiểm thử android?
Android là hệ điều hành lớn nhất trên thế giới. Có hàng tấn thiết bị và phiên bản android mà ứng dụng của bạn cần tương thích. Dù bạn đầu tư nhiều thời gian vào thiết kế và thực hiện thì sai lầm vẫn là điều ko thể tránh khỏi, và lỗi vẫn sẽ xảy ra
Những hiểu lầm về android testing
1.Tất cả các thiết bị Android đều giống nhau và kiểm thử về giả lập (Emulators) là đủ Hãy bắt đầu bằng một ví dụ đơn giản. Một ứng dụng hoạt động hoàn hảo trên mô phỏng nhưng trên một số thiết bị thực sự, nó bị treo trong quá trình thực thi Emulators không đủ để kiểm thử di động của bạn mà phải kiểm tra ứng dụng trên thiết bị thực.
2. Kiểm thử trên một số thiết bị phổ biến là đủ Trên các thiết bị khác nhau, ứng dụng sẽ khác nhau vì các thiết bị khác nhau có phần cứng, kích cỡ màn hình, bộ nhớ khác nhau. Do đó phải kiểm tra ứng dụng trên các thiết bị, phiên bản hệ điều hành, mạng và vị trí mạng.
3. Exploratory testing (Kiểm thử thăm dò) diễn ra ngay trước khi ra mắt sản phẩm là không đủ Nói chung trong tất cả các bài test, cần thiết kế test case sau đó thực hiện chúng. Nhưng trong Exploratory testing, test design và execution tất cả sẽ được thực hiện cùng nhau. Trong Exploratory testing, sẽ không có kế hoạch và không được chuẩn bị trước. Tester sẽ test nó khi cần thiết. Một số chức năng sẽ được test nhiều lần, trong khi một số chức năng sẽ không được test hoàn toàn.
4.Nếu có một số lỗi trong ứng dụng, người dùng sẽ hiểu Nếu ứng dụng không hoạt động và có lỗi, người dùng gỡ cài đặt ứng dụng của bạn Vấn đề về chất lượng là lý do đầu tiên để đánh giá trong Google Play. Nó ảnh hưởng đến danh tiếng của bạn và bạn mất lòng tin của khách hàng. Vì vậy cần phải có 1 chiến lược test android thích hợp
Chiến lược thử nghiệm Android
Chiến lược Android testing bao gồm
1.Unit Test 2.Integration Test 3.Operational Test 4.System Test
1.Unit Test Unit test bao gồm bộ phận của một hoặc nhiều chương trình được thiết kế để xác minh một đơn vị của mã nguồn, chẳng hạn như method hoặc class. Nền tảng Android có giao dn được tích hợp sẵn Junit 3.0. Đó là khuôn khổ mã nguồn mở để tự động hoá các bài Unit test. Android Testing Framework là công cụ mạnh mẽ để nhà phát triển viết chương trình unit test hiệu quả. Thêm vào Unit test là test giao diện người dùng (UI). test giao diện người dùng đảm bảo rằng ứng dụng trả lại đầu ra giao diện chính xác để phản ứng lại chuỗi hành động của người dùng trên thiết bị.
Cách phổ biến để thực hiện kiểm tra giao diện người dùng trên thiết bị là Android Instrumentation . Nhưng điều này có vấn đề hiệu suất. Một trong những công cụ tốt nhất để tiến hành kiểm tra giao diện người dùng trên Android là Robotium .
2.Integration Test Trong Integration Test , tất cả các unit tested modules sẽ được kết hợp và verified. Trong Android, Integration Test thường liên quan đến kiểm tra tích hợp với các thành phần của Android như Service testing, Activity testing, Content Provider testing Có nhiều testing frameworks được sử dụng để tiến hành thử nghiệm tích hợp cho Android như Troyd, Roboelectric, Robotium.
3.Operational Test Operational Test cũng được gọi Functional Tests hoặc Acceptation Test. Đây là các bài kiểm tra cấp độ cao được thiết kế để kiểm tra tính đầy đủ và chính xác của ứng dụng. Trong Android, FitNesse là open-source framework giúp dễ dàng thực hiện các bài operational test cho ứng dụng
4.System Test Trong System Test , hệ thống sẽ được test toàn bộ: sự tương tác giữa các thành phần, phần mềm và phần cứng Trong Android, system test thường bao gồm
-GUI tests -Usability tests -Performance tests -Stress tests Trong đó, Performance được tập trung nhiều hơn. Có thể sử dụng các công cụ như Traceview để tiến hành kiểm tra hiệu suất trên Android. Công cụ này có thể giúp gỡ lỗi ứng dụng của bạn và mô tả hiệu suất của nó.
Automated android testing
Khi Android bị phân mảnh, việc kiểm thử trên nhiều thiết bị là cần thiết. Nhưng điều này cũng sẽ làm tốn kinh phí. Do đó Automated android testing có thể giúp giảm chi phí
Lợi ích của Automated android testing Giảm thời gian để thực hiện testcase Tăng năng suất 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 Nhanh chóng tìm và sửa lỗi khi triển khai Đảm bảo chất lượng phần mềm
Các framework hay dùng
1.Android testing framework
Một trong những framework chuẩn cho Android là Android testing framework. nó là 1 framework mạnh mẽ và dễ sử dụng được tích hợp tốt với các công cụ Android SDK.
Application package là gói application mục tiêu mà cần tiến hành test InstrumentationTestRunner: Làm nhiệm vụ trung gian trong việc chạy các testcase để kiểm tra ứng dụng. Android Instrumentation là một tập các phương thức điều khiển trong hệ thống Android. Các điều khiển này độc lập với vòng đời của ứng dụng và chúng cũng kiểm soát cách Android tải ứng dụng để chạy. Thông thường Android framework không cung cấp cách để gọi trực tiếp các hàm callback trong vòng đời của một ứng dụng như onCreate(), onResume(),... nhưng với instrumentation ta có thể gọi các hàm này thông qua các phương thức như getActivity(), activity.finish(),...Nó bao gồm:
-Test tools Là một công cụng SDK để chạy các lệnh kiểm tra. Chúng được tích hợp trong Eclipse IDE hoặc chạy trong command line -MonkeyRunner Là một công cụ với ngôn ngữ là Python mà cung cấp các API để viết các chương trình để điều khiển môi trường của các thiết bị Android hoặc máy ảo bên ngoài các đoạn code của ứng dụng. Monkey là một công cụ dòng lệnh để kiểm thử khả năng chịu tải của ứng dụng thông qua công cụ ADB của Android Test package: được tổ chức trong một project kiểm thử. Package này tuân theo quy ước đặt tên. Nếu một ứng dụng có tên package là "com.mydomain.myapp" thì package của project kiểm thử sẽ là "com.mydomain.myapp.test" .Test package bao gồm 2 phần dưới đây:
Test case classes: bao gồm các phương thức kiểm thử để chạy trên ứng dụng cần kiểm tra. Android cung cấp một vài class kế thừa từ class TestCase và Assert của Junit framework như ApplicationTestCase, InstrumentationTestCase… Mock objects: bao gồm các dữ liệu đầu vào sẽ được sử dụng cho các test case. Để chống sự phụ thuộc (dependency injection) trong kiểm thử, Android cung cấp các class để tạo các đối tượng hệ thống giả lập như MockContext, MockContentProvider… Ưu nhược điểm của Junit Testing Framework cho Android a. Ưu điểm: Dựa trên nền tảng của JUnit test nên quen thuộc và dễ học Được phát triển cho mục đích test các thành phần trong ứng dụng nên dễ cài đặt Tốc độ chạy test nhanh Hệ thống thư viện và support phong phú Framework và tool được hỗ trợ bởi Google, tương thích với tất cả các phiên bản Android, được cập nhật thường xuyên
b. Nhược điểm: Mỗi framework chỉ hỗ trợ test một phần của ứng dụng nên có thể phải sử dụng kết hợp nhiều framework Không test được giao diện Chủ yếu dùng unit test Không bắt được thao tác vật lý Cần kiến thức về lập trình
2.Robotium testing framework
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
- Test case phức tạp và khó thực hiện Robotium testing framework là sự lựa chọn tốt hơn để tiến hành test Android
Robotium là open source framework và được coi là một phần mở rộng của Android testing framework. Sử dụng Robotium, Dev có thể viết các robust tự động GUI test case cho ứng dụng Android. Tuy nhiên, Dev có thể viết các chức năng, hệ thống và các kịch bản test có thể chấp nhận, là cầu nối giũa các hoạt động Android Các lớp Robotium test case Robotium sử dụng các lớp (com.jayway.android.robotium.solo) cho việc test. Lớp này hỗ trợ test case và là cầu nối giữa các hoạt động. Solo được kiên kết với ActivityInstrumentationTestCase2 Tester có thể viết testcase mà không có kiến thức về black box bằng cách sử dụng các lớp của Robotium test case. Đây là một tính năng vượt trội so với các lớp test case Android
Để sử dụng Robotium trong dự án test Android, cần thực hiện theo các bước:
3.Roboelectric testing framework
Test sử dụng Android Testing framework với thiết bị hoặc trình mô phỏng là rất khó. Xây dựng và chạy test chậm và mất nhiều effort. Để khắc phục sự cố này, có một sự lựa chọn khác - Roboelectric testing framework Roboelectric framework cho phép chạy các bài test Android trực tiếp trên JVM mà không cần thiết bị hoặc trình mô phỏng. Roboelectric Test Case Classes Như được trình bày ở trên, Roboelectric có thể thực hiện các hành động sau: Đăng ký và tạo một lớp Shadow Chặn việc load Android class Sử dụng javaassist để ghi đè các phương thức của lớp Android Bind Shadow đối tượng với lớp Android Điều này cho phép code được kiểm tra mà không có môi trường Android.