Kiểm thử qua dòng lệnh

Tài liệu này mô tả cách trực tiếp chạy kiểm thử qua dòng lệnh. Tài liệu này giả định rằng bạn đã nắm được cách tạo một ứng dụng Android và viết bài kiểm thử cho ứng dụng. Để biết thêm thông tin về cách xây dựng bài kiểm thử cho ứng dụng, hãy xem phần Kiểm thử ứng dụng trên Android.

Khi bạn xây dựng ứng dụng bằng hệ thống bản dựng Gradle, trình bổ trợ Android cho Gradle sẽ cho phép bạn chạy kiểm thử trong dự án Gradle bằng dòng lệnh. Để kiểm soát chi tiết hơn, bạn có thể chọn chạy kiểm thử thông qua lệnh shell Cầu gỡ lỗi Android (adb). Điều này có thể hữu ích khi chạy kiểm thử trong môi trường tích hợp liên tục.

Để tìm hiểu cách chạy kiểm thử đo lường tự động qua dòng lệnh bằng các thiết bị ảo mà Gradle quản lý cho bạn, hãy xem phần Điều chỉnh tỷ lệ kiểm thử bằng Thiết bị do Gradle quản lý.

Chạy kiểm thử bằng Gradle

Trình bổ trợ Android cho Gradle cho phép bạn chạy kiểm thử trong dự án Gradle bằng cách sử dụng dòng lệnh.

Bảng dưới đây tóm tắt cách chạy kiểm thử trong Gradle:

Bảng 1. Những cách chạy kiểm thử bằng Gradle.

Loại kiểm thử đơn vị Lệnh để chạy Vị trí của kết quả kiểm thử
Kiểm thử đơn vị cục bộ Chạy tác vụ test:


./gradlew test
Tệp kết quả kiểm thử HTML:
thư mục path_to_your_project/module_name/build/reports/tests/.

Tệp kết quả kiểm thử XML:
thư mục path_to_your_project/module_name/build/test-results/.

Kiểm thử đơn vị đo lường Chạy tác vụ connectedAndroidTest:


./gradlew connectedAndroidTest
Tệp kết quả kiểm thử HTML:
thư mục path_to_your_project/module_name/build/reports/androidTests/connected/.

Tệp kết quả kiểm thử XML:
thư mục path_to_your_project/module_name/build/outputs/androidTest-results/connected/.

Gradle hỗ trợ viết tắt tên nhiệm vụ. Ví dụ: bạn có thể bắt đầu nhiệm vụ connectedAndroidTest bằng cách nhập lệnh sau:

./gradlew cAT

Bạn cũng có thể chạy các nhiệm vụ checkconnectedCheck trên Gradle. Các nhiệm vụ này lần lượt chạy kiểm thử cục bộ hoặc kiểm thử đo lường, nhưng ngoài ra còn có các bài kiểm thử khác do các trình bổ trợ Gradle khác thêm vào.

Chạy kiểm thử trên một mô-đun

Nhiệm vụ testconnectedAndroidTest chạy kiểm thử trên từng mô-đun trong dự án của bạn. Bạn có thể chạy kiểm thử trên một mô-đun cụ thể bằng cách đặt tên và dấu hai chấm (:) vào trước nhiệm vụ test hoặc connectedAndroidTest. Ví dụ: sau đây là lệnh chạy kiểm thử đo lường chỉ cho mô-đun mylibrary:

./gradlew mylibrary:connectedAndroidTest

Chạy kiểm thử trên biến thể bản dựng

Nhiệm vụ testconnectedAndroidTest chạy kiểm thử trên từng biến thể bản dựng trong dự án của bạn. Bạn có thể nhắm đến một biến thể bản dựng cụ thể bằng cú pháp sau:

  • Đối với kiểm thử đơn vị cục bộ:
    ./gradlew testVariantNameUnitTest
  • Đối với kiểm thử đo lường:
    ./gradlew connectedVariantNameAndroidTest

Chạy phương pháp hoặc lớp kiểm thử cụ thể

Khi chạy kiểm thử đơn vị cục bộ, Gradle cho phép bạn tập trung vào các lượt kiểm thử cụ thể bằng cờ --tests. Ví dụ: lệnh sau đây chỉ chạy các lượt kiểm thử sampleTestMethod cho biến thể bản dựng đã chỉ định. Để tìm hiểu thêm về cách sử dụng cờ --tests, hãy đọc tài liệu của Gradle về tính năng lọc kiểm thử.


./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'

Báo cáo nhiều mô-đun cho kiểm thử đo lường

Theo mô tả trong bảng 1, Gradle lưu kết quả kiểm thử đo lường trong thư mục build/ của từng mô-đun mà Gradle kiểm thử. Tuy nhiên, khi chạy kiểm thử trên nhiều mô-đun, bạn nên kết hợp tất cả kết quả kiểm thử vào một báo cáo duy nhất. Để tạo một báo cáo duy nhất khi chạy kiểm thử trên nhiều mô-đun, hãy làm theo các bước sau:

  1. Trong tệp build.gradle cấp dự án, hãy thêm nội dung sau đây sau khối buildscript{}:

    Groovy

    apply plugin: 'android-reporting'
    

    Kotlin

    apply(plugin = "android-reporting")
    
  2. Gọi tác vụ test hoặc connectedAndroidTest bằng tác vụ mergeAndroidReports. Ví dụ:

    ./gradlew connectedAndroidTest mergeAndroidReports
    

    Để bỏ qua các lượt kiểm thử không thành công để Gradle hoàn thành tất cả những lượt kiểm thử còn lại, hãy thêm tuỳ chọn --continue:

    ./gradlew connectedAndroidTest mergeAndroidReports --continue
    

Khi chạy xong kiểm thử, Gradle sẽ lưu kết quả tổng hợp trong thư mục path_to_your_project/build/.

Chạy kiểm thử bằng adb

Khi chạy kiểm thử từ dòng lệnh bằng Cầu gỡ lỗi Android (adb), bạn sẽ có nhiều lựa chọn kiểm thử hơn để chạy so với mọi phương thức khác. Bạn có thể chọn các phương thức kiểm thử riêng lẻ, lọc lượt kiểm thử theo chú thích tuỳ chỉnh hoặc chỉ định tuỳ chọn kiểm thử. Vì lượt kiểm thử mà bạn chạy được kiểm soát hoàn toàn qua dòng lệnh, nên bạn có thể tuỳ chỉnh lượt kiểm thử bằng tập lệnh shell theo nhiều cách.

Để chạy kiểm thử qua dòng lệnh, hãy chạy adb shell để bắt đầu một shell dòng lệnh trên thiết bị hoặc trình mô phỏng. Bên trong shell đó, bạn có thể tương tác với trình quản lý hoạt động bằng lệnh am và sử dụng lệnh con instrument tương ứng để chạy kiểm thử.

Bạn có thể sử dụng am instrument (như một phím tắt) để khởi động một shell adb và chỉ định tất cả cờ hiệu dòng lệnh trên một dòng nhập. Shell này mở ra trên thiết bị hoặc trình mô phỏng, chạy kiểm thử, tạo kết quả rồi sau đó trở về dòng lệnh trên máy tính.

Cách chạy kiểm thử bằng am instrument:

  1. Xây dựng hoặc xây dựng lại ứng dụng chính và gói kiểm thử.
  2. Cài đặt các tệp gói kiểm thử và gói ứng dụng chính cho Android (tệp APK) vào trình mô phỏng hoặc thiết bị Android hiện tại của bạn.
  3. Tại dòng lệnh, hãy nhập:

    adb shell am instrument -w <test_package_name>/<runner_class>
    

    Trong đó <test_package_name> là tên gói Android của ứng dụng kiểm thử và <runner_class> là tên của lớp chạy kiểm thử Android mà bạn đang sử dụng. Tên gói Android là giá trị thuộc tính gói của phần tử tệp kê khai trong tệp kê khai của gói kiểm thử (AndroidManifest.xml).

    Lớp chạy kiểm thử Android thường là AndroidJUnitRunner:

    adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
    

Kết quả kiểm thử của bạn sẽ xuất hiện trên STDOUT.

Cờ am instrument

Để tìm danh sách tất cả cờ để sử dụng cùng lệnh am instrument, hãy chạy adb shell am help. Bảng sau đây mô tả một số cờ quan trọng:

Bảng 2. Cờ am instrument quan trọng

Gắn cờ Giá trị Mô tả
-w (không có) Buộc am instrument phải đợi cho đến khi kiểm thử đo lường chấm dứt rồi mới tự chấm dứt. Thao tác này sẽ giữ cho shell bật cho đến khi kiểm thử kết thúc. Bạn cần có cờ này để xem được kết quả kiểm thử.
-r (không có) Kết quả xuất ra ở định dạng thô. Dùng cờ này khi bạn muốn thu thập kết quả đo lường hiệu suất để những kết quả đó không được định dạng thành kết quả kiểm thử. Cờ này được thiết kế để sử dụng với cờ -e perf true (ghi lại trong phần các tuỳ chọn am instrument).
-e <test_options> Cung cấp các tuỳ chọn kiểm thử dưới dạng các cặp khoá-giá trị. Công cụ am instrument sẽ truyền các cặp giá trị này đến lớp (class) đo lường đã chỉ định bằng phương thức onCreate(). Bạn có thể chỉ định nhiều lần chạy -e <test_options>. Các khoá và giá trị được mô tả trong phần các tuỳ chọn am instrument. Bạn chỉ có thể sử dụng các cặp khoá-giá trị này cùng AndroidJUnitRunner hoặc InstrumentationTestRunner và các lớp con tương ứng. Việc sử dụng cùng các lớp khác không có tác dụng.
--no-hidden-api-checks (không có) Tắt các hạn chế về việc sử dụng API ẩn. Để biết thêm thông tin về định nghĩa API ẩn cũng như tác động của API ẩn đối với ứng dụng của bạn, hãy đọc phần Các hạn chế đối với giao diện không phải SDK.

Các tuỳ chọn am instrument

Công cụ am instrument truyền các tuỳ chọn kiểm thử đến AndroidJUnitRunner hoặc InstrumentationTestRunner ở dạng cặp khoá-giá trị (bằng cờ -e) với cú pháp sau:

-e <key> <value>

Một số khoá chấp nhận nhiều giá trị. Bạn chỉ định nhiều giá trị trong một danh sách được phân tách bằng dấu phẩy. Ví dụ, lệnh gọi này của AndroidJUnitRunner cung cấp nhiều giá trị cho khoá package:

adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
> com.android.test/androidx.test.runner.AndroidJUnitRunner

Bảng sau đây liệt kê các cặp khoá-giá trị mà bạn có thể sử dụng với trình chạy kiểm thử:

Bảng 3. Các cặp khoá-giá trị cờ -e để sử dụng với trình chạy kiểm thử của bạn

Khoá Giá trị Mô tả
package <Java_package_name> Tên gói Java đủ điều kiện của một trong các gói trong ứng dụng kiểm thử. Mọi lớp kiểm thử sử dụng tên gói này sẽ đều được thực thi. Xin lưu ý rằng đây không phải là tên gói Android; mỗi gói kiểm thử có một tên gói Android duy nhất nhưng có thể có nhiều gói Java trong đó.
class <class_name> Tên loại Java đủ điều kiện cho một trong các lớp trường hợp kiểm thử. Chỉ có lớp trường hợp kiểm thử này được thực thi.
<class_name>#method name Một tên lớp trường hợp kiểm thử đủ điều kiện và một trong các phương pháp tương ứng. Chỉ có phương thức này được thực thi. Hãy lưu ý ký hiệu băm (#) giữa tên lớp và tên phương thức.
func true Chạy mọi bài kiểm thử mở rộng InstrumentationTestCase.
unit true Chạy mọi bài kiểm thử không mở rộng InstrumentationTestCase hoặc PerformanceTestCase.
size [small | medium | large] Chạy phương thức kiểm thử có chú thích theo kích thước. Có các mã chú thích @SmallTest, @MediumTest@LargeTest.
perf true Chạy mọi lớp kiểm thử triển khai PerformanceTestCase. Khi bạn sử dụng tuỳ chọn này, hãy chỉ định cờ -r cho am instrument để kết quả được lưu giữ ở định dạng thô và không được định dạng lại dưới dạng kết quả kiểm thử.
debug true Chạy kiểm thử ở chế độ gỡ lỗi.
log true Tải và ghi nhật ký mọi bài kiểm thử đã chỉ định nhưng không chạy các bài kiểm thử đó. Thông tin kiểm thử sẽ xuất hiện trong STDOUT. Hãy dùng thông tin này để xác minh các kiểu kết hợp các bộ lọc khác cũng như thông số của bài kiểm thử.
emma true Chạy bản phân tích mức độ sử dụng mã EMMA và ghi đầu ra vào /data/<app_package>/coverage.ec trên thiết bị. Để ghi đè vị trí tệp, hãy sử dụng khoá coverageFile theo mô tả trong mục sau.

Lưu ý: Tuỳ chọn này đòi hỏi một bản dựng ứng dụng kiểm thử do EMMA đo lường mà bạn có thể tạo bằng mục tiêu coverage.

coverageFile <filename> Ghi đè lên vị trí mặc định của tệp mức độ phù hợp EMMA trên thiết bị. Hãy chỉ định giá trị này làm một đường dẫn và tên tệp ở định dạng UNIX. Tên tệp mặc định được mô tả trong mục nhập cho khoá emma.

Khi sử dụng cờ -e, hãy lưu ý những điều sau:

  • am instrument gọi onCreate(Bundle) với Bundle chứa các cặp khoá-giá trị.
  • Khoá package được ưu tiên hơn khoá class. Nếu bạn chỉ định một gói rồi sau đó chỉ định riêng một lớp bên trong gói đó, Android sẽ chạy mọi bài kiểm thử trong gói và bỏ qua khoá của lớp đó.
  • Khoá func và khoá unit loại trừ lẫn nhau.

Ví dụ về cách dùng

Các phần sau đây đưa ra ví dụ về việc dùng am instrument để chạy kiểm thử. Các khoá này dựa trên cấu trúc như sau:

  • Gói kiểm thử có tên gói Android là com.android.demo.app.tests
  • Hai lớp kiểm thử đo lường:
    • TestClass1 chứa phương thức kiểm thử testMethod1.
    • TestClass2 chứa phương thức kiểm thử testMethod2testMethod3.
  • Trình chạy kiểm thử là AndroidJUnitRunner.

Chạy toàn bộ gói kiểm thử

Để chạy mọi bài kiểm thử trong gói kiểm thử, hãy nhập:

adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

Chạy mọi bài kiểm thử trong lớp trường hợp kiểm thử

Để chạy mọi bài kiểm thử trong lớp TestClass1, hãy nhập:

adb shell am instrument -w  \
> -e class com.android.demo.app.tests.TestClass1 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

Chọn một tập hợp con kiểm thử

Để chạy mọi bài kiểm thử trong lớp TestClass1 và phương thức testMethod3 trong TestClass2, hãy nhập:

adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1,com.android.demo.app.tests.TestClass2#testMethod3 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

Bạn có thể xem các trường hợp sử dụng khác trong tài liệu tham khảo về API AndroidJUnitRunner.