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

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

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 mã 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 nội dung kiểm thử ứng dụng trên Android.

Khi bạn sử dụng hệ thống bản dựng Gradle để tạo ứng dụng, trình bổ trợ Android cho Gradle sẽ 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. Để kiểm soát chi tiết hơn, bạn cũng có thể chọn chạy kiểm thử thông qua giao diện Cầu gỡ lỗi Android (adb).

Để tìm hiểu cách chạy kiểm thử đo lường tự động từ dòng lệnh bằng các thiết bị ảo mà Gradle quản lý cho bạn, hãy xem Điều chỉnh tỷ lệ các chương trình 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. Các cách chạy kiểm thử trong 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ợ tính năng viết tắt tên tác vụ. Ví dụ: bạn có thể bắt đầu tác vụ connectedAndroidTest bằng cách nhập lệnh sau.

./gradlew cAT

Bạn cũng có thể chạy các tác vụ checkconnectedCheck trên Gradle. Các tác 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ũng thêm các bài kiểm tra 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

Tác 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ử cho chỉ một mô-đun cụ thể trong dự án bằng cách đưa tên mô-đun và một dấu hai chấm (:) vào trước tên kiểm thử hoặc tác vụ connectedAndroidTest. Ví dụ: lệnh sau đây chỉ chạy kiểm thử đo lường cho mô-đun mylibrary.

./gradlew mylibrary:connectedAndroidTest

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

Tác vụ testconnectedAndroidTest chạy kiểm thử trên từng biến thể xây dựng trong dự án của bạn. Bạn có thể nhắm đến một biến thể xây 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 kiểm thử cụ thể bằng cách sử dụng cờ --tests. Ví dụ: lệnh sau đây chỉ chạy các bài kiểm thử sampleTestMethod cho biến thể xây 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 mã 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
    

    Nếu bạn muốn bỏ qua các lượt kiểm thử không thành công để Gradle chạy xong 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 tất cả các bài 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ử qua dòng lệnh bằng Cầu gỡ lỗi Android (adb), bạn sẽ có nhiều lựa chọn hơn để chạy kiểm thử 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 bài kiểm thử theo chú thích tuỳ chỉnh hoặc chỉ định tuỳ chọn kiểm thử. Vì bài 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 bài kiểm thử bằng tập lệnh giao diện (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 giao diện (shell) dòng lệnh trên thiết bị hoặc trình mô phỏng. Bên trong giao diện đó, 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 giao diện adb và chỉ định tất cả cờ hiệu dòng lệnh trên một dòng nhập. Giao diện này mở ra trên thiết bị hoặc trình mô phỏng, chạy kiểm thử, xuất 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
  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 (class) chạy kiểm thử Android mà bạn đang sử dụng. Tên gói Android là giá trị của thuộc tính gói của phần tử tệp kê khai trong tệp kê khai (AndroidManifest.xml) của gói kiểm thử. Lớp (class) chạy kiểm thử Android thường là AndroidJUnitRunner:

    adb shell am instrument -w com.android.foo/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

Bạn có thể tìm thấy danh sách tất cả cờ để sử dụng cùng lệnh am instrument bằng cách 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 kết thúc kiểm thử đo lường rồi mới tự chấm dứt. Kết quả cuối cùng là giữ cho giao diện (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 sao cho 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 (theo ghi nhận 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ị này đượ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 nội dung 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ách sử dụng cờ -e với cú pháp sau:

-e <key> <value>

Có 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/android.support.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 trong trình chạy kiểm thử.

Bảng 3. Các cặp khoá-giá trị cờ -e để sử dụng trên 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>#tên phương thức 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ỉ 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ả cờ -r cho am instrument để kết quả được lưu giữ ở định dạng thô và không đị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 đè vị trí mặc định của tệp EMMA (về mức độ sử dụng) 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 sẽ đượ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ấ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:
    • Foo1 chứa phương thức kiểm thử bar1, và
    • Foo2 chứa phương thức kiểm thử bar2bar3
  • 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/android.support.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 Foo1, hãy nhập:

adb shell am instrument -w  \
> -e class com.android.demo.app.tests.Foo1 \
> com.android.demo.app.tests/android.support.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 Foo1 và phương thức bar3 trong Foo2, hãy nhập:

adb shell am instrument -w \
> -e class com.android.demo.app.tests.Foo1,com.android.demo.app.tests.Foo2#bar3 \
> com.android.demo.app.tests/android.support.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.