Chạy kiểm thử (Atest)

Atest là một công cụ dòng lệnh cho phép người dùng tạo, cài đặt và chạy các chương trình kiểm thử Android trên máy, giúp tăng tốc đáng kể cho việc chạy lại chương trình kiểm thử mà không cần có kiến thức về các tuỳ chọn dòng lệnh bộ kiểm thử Trade Federation. Trang này giải thích cách sử dụng Atest để chạy kiểm thử Android.

Để biết thông tin chung về cách viết mã kiểm thử cho Android, hãy xem phần Kiểm thử nền tảng Android.

Để biết thông tin về cấu trúc tổng thể của Atest, hãy tham khảo Hướng dẫn dành cho nhà phát triển Atest.

Để biết thông tin về cách chạy kiểm thử trong tệp TEST_MAPPING thông qua Atest, hãy xem phần Chạy kiểm thử trong tệp TEST_MAPPING.

Để thêm một tính năng vào Atest, hãy làm theo quy trình làm việc dành cho nhà phát triển Atest.

Thiết lập môi trường

Để thiết lập môi trường Atest, hãy làm theo hướng dẫn trong phần Thiết lập môi trường, Chọn mục tiêuTạo mã.

Cách sử dụng cơ bản

Các lệnh Atest có dạng như sau:

atest test-to-run [optional-arguments]

Đối số không bắt buộc

Bảng sau đây liệt kê các đối số thường dùng nhất. Bạn có thể xem danh sách đầy đủ thông qua atest --help.

Lựa chọn Tuỳ chọn dài Mô tả
-b --build Tạo mục tiêu kiểm thử. (mặc định)
-i --install Cài đặt cấu phần phần mềm kiểm thử (APK) trên thiết bị. (mặc định)
-t --test Chạy các chương trình kiểm thử. (mặc định)
-s --serial Chạy kiểm thử trên thiết bị được chỉ định. Mỗi lần bạn chỉ có thể kiểm thử một thiết bị.
-d --disable-teardown Tắt tính năng gỡ bỏ và dọn dẹp kiểm thử.
--dry-run Chạy thử nghiệm Atest mà không thực sự tạo, cài đặt hay chạy chương trình kiểm thử.
-m --rebuild-module-info Buộc tạo lại tệp module-info.json.
-w --wait-for-debugger Chờ trình gỡ lỗi hoàn tất trước khi thực thi.
-v --verbose Hiển thị nhật ký cấp DEBUG.
--iterations Chạy vòng lặp kiểm thử cho đến khi đạt đến số lần lặp tối đa. (10 theo mặc định)
--rerun-until-failure [COUNT=10] Chạy lại tất cả các chương trình kiểm thử cho đến khi xảy ra lỗi hoặc đạt đến số lần lặp lại tối đa. (10 theo mặc định)
--retry-any-failure [COUNT=10] Chạy lại các kiểm thử không thành công cho đến khi kiểm thử thành công hoặc đạt đến số lần lặp tối đa. (10 theo mặc định)
--start-avd Tự động tạo AVD và chạy các bài kiểm thử trên thiết bị ảo.
--acloud-create Tạo một AVD bằng lệnh acloud.
--[CUSTOM_ARGS] Chỉ định đối số tuỳ chỉnh cho trình chạy kiểm thử.
-a --all-abi Chạy kiểm thử cho tất cả cấu trúc thiết bị có sẵn.
--host Chạy chương trình kiểm thử hoàn toàn trên máy chủ mà không cần thiết bị.
Lưu ý: Không thể chạy kiểm thử máy chủ yêu cầu thiết bị có --host.
--history Hiển thị kết quả kiểm thử theo thứ tự thời gian.
--latest-result In kết quả kiểm thử mới nhất.

Để biết thêm thông tin về -b, -i-t, hãy xem phần Chỉ định các bước: tạo, cài đặt hoặc chạy.

Chỉ định kiểm thử

Để chạy kiểm thử, hãy chỉ định một hoặc nhiều lượt kiểm thử bằng cách sử dụng một trong các giá trị nhận dạng sau:

  • Tên mô-đun
  • Mô-đun:Lớp
  • Tên lớp
  • Kiểm thử tích hợp Tradefed
  • Đường dẫn tệp
  • Tên gói

Phân tách các tệp tham chiếu đến nhiều chương trình kiểm thử bằng dấu cách, như sau:

atest test-identifier-1 test-identifier-2

Tên mô-đun

Để chạy toàn bộ mô-đun kiểm thử, hãy sử dụng tên mô-đun đó. Nhập tên như xuất hiện trong các biến LOCAL_MODULE hoặc LOCAL_PACKAGE_NAME trong tệp Android.mk hoặc Android.bp của kiểm thử đó.

Ví dụ:

atest FrameworksServicesTests
atest CtsVideoTestCases

Mô-đun:Lớp

Để chạy một lớp trong một mô-đun, hãy sử dụng Module:Class. Mô-đun giống như mô tả trong phần Tên mô-đun. Class (Lớp) là tên của lớp kiểm thử trong tệp .java và có thể là tên lớp đủ điều kiện hoặc tên cơ bản.

Ví dụ:

atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests

Tên lớp

Để chạy một lớp mà không cần nêu rõ tên mô-đun, hãy sử dụng tên lớp.

Ví dụ:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Kiểm thử tích hợp Tradefed

Để chạy các chương trình kiểm thử được tích hợp trực tiếp vào TradeFed (không phải mô-đun), hãy nhập tên xuất hiện trong kết quả của lệnh tradefed.sh list configs. Ví dụ:

Cách chạy kiểm thử reboot.xml:

atest example/reboot

Cách chạy kiểm thử native-benchmark.xml:

atest native-benchmark

Đường dẫn tệp

Atest hỗ trợ chạy cả kiểm thử dựa trên mô-đun và kiểm thử dựa trên tích hợp bằng cách nhập đường dẫn đến tệp hoặc thư mục kiểm thử của chúng một cách thích hợp. Công cụ này cũng hỗ trợ chạy một lớp duy nhất bằng cách chỉ định đường dẫn đến tệp Java của lớp. Cả đường dẫn tương đối và tuyệt đối đều được hỗ trợ.

Chạy mô-đun

Các ví dụ sau đây cho thấy hai cách chạy mô-đun CtsVideoTestCases bằng đường dẫn tệp.

Chạy từ repo-root Android:

atest cts/tests/video

Chạy từ repo-root/cts/tests/video Android:

    atest .

Chạy lớp kiểm thử

Ví dụ sau cho biết cách chạy một lớp cụ thể trong mô-đun CtsVideoTestCases bằng đường dẫn tệp.

Từ repo-root Android:

    atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java

Chạy kiểm thử tích hợp

Ví dụ sau đây cho biết cách chạy kiểm thử tích hợp bằng đường dẫn tệp từ repo-root của Android:

    atest tools/tradefederation/contrib/res/config/example/reboot.xml

Tên gói

Atest hỗ trợ tìm kiếm kiểm thử theo tên gói.

Ví dụ:

    atest com.android.server.wm
    atest com.android.uibench.janktests

Chỉ định các bước: Tạo, cài đặt hoặc chạy

Sử dụng các tuỳ chọn -b, -i-t để chỉ định các bước cần chạy. Nếu bạn không chỉ định một tuỳ chọn, thì tất cả các bước sẽ chạy.

  • Chỉ tạo các mục tiêu: atest -b test-to-run
  • Chỉ chạy thử nghiệm: atest -t test-to-run
  • Cài đặt APK và chạy kiểm thử: atest -it test-to-run
  • Tạo và chạy, nhưng không cài đặt: atest -bt test-to-run

Atest có thể buộc một kiểm thử bỏ qua bước dọn dẹp hoặc gỡ bỏ. Nhiều chương trình kiểm thử, chẳng hạn như CTS, sẽ dọn dẹp thiết bị sau khi chạy chương trình kiểm thử. Vì vậy, nếu không có tham số --disable-teardown, bạn sẽ không thể chạy lại chương trình kiểm thử bằng -t. Sử dụng -d trước -t để bỏ qua bước dọn dẹp kiểm thử và kiểm thử lặp lại.

atest -d test-to-run
atest -t test-to-run

Chạy các phương thức cụ thể

Atest hỗ trợ chạy các phương thức cụ thể trong một lớp kiểm thử. Mặc dù cần phải tạo toàn bộ mô-đun, nhưng việc này sẽ giúp giảm thời gian cần thiết để chạy các chương trình kiểm thử. Để chạy các phương thức cụ thể, hãy xác định lớp bằng cách sử dụng bất kỳ cách nào được hỗ trợ để xác định lớp (Mô-đun:Lớp, đường dẫn tệp, v.v.) và thêm tên của phương thức:

atest reference-to-class#method1

Khi chỉ định nhiều phương thức, hãy phân tách chúng bằng dấu phẩy:

atest reference-to-class#method1,method2,method3

Ví dụ:

atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval

Hai ví dụ sau đây cho thấy các cách ưu tiên để chạy một phương thức duy nhất, testFlagChange. Bạn nên sử dụng các ví dụ này thay vì chỉ sử dụng tên lớp vì việc chỉ định mô-đun hoặc vị trí tệp Java cho phép Atest tìm thấy chương trình kiểm thử nhanh hơn nhiều.

Sử dụng Module:Class:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange

Từ repo-root Android:

atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange

Bạn có thể chạy nhiều phương thức từ các lớp và mô-đun khác nhau:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

Chạy nhiều lớp

Để chạy nhiều lớp, hãy phân tách các lớp đó bằng dấu cách giống như cách chạy nhiều chương trình kiểm thử. Atest xây dựng và chạy các lớp một cách hiệu quả, vì vậy, việc chỉ định một tập hợp con các lớp trong một mô-đun sẽ cải thiện hiệu suất so với việc chạy toàn bộ mô-đun.

Cách chạy 2 lớp trong cùng một mô-đun:

atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests

Cách chạy hai lớp trong các mô-đun khác nhau:

atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest

Chạy tệp nhị phân GTest

Atest có thể chạy các tệp nhị phân GTest. Sử dụng -a để chạy các chương trình kiểm thử này cho tất cả kiến trúc thiết bị hiện có, trong ví dụ này là armeabi-v7a (ARM 32 bit) và arm64-v8a (ARM 64 bit).

Ví dụ về kiểm thử dữ liệu đầu vào:

atest -a libinput_tests inputflinger_tests

Để chọn một tệp nhị phân GTest cụ thể để chạy, hãy sử dụng dấu hai chấm (:) để chỉ định tên chương trình kiểm thử và hashtag (#) để chỉ định thêm một phương thức riêng lẻ.

Ví dụ: đối với định nghĩa kiểm thử sau:

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

Chạy lệnh sau để chỉ định toàn bộ quy trình kiểm thử:

atest inputflinger_tests:InputDispatcherTest

Hoặc chạy một kiểm thử riêng lẻ bằng cách sử dụng mã sau:

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

Chạy kiểm thử trong TEST_MAPPING

Atest có thể chạy các chương trình kiểm thử trong tệp TEST_MAPPING.

Chạy các bài kiểm thử trước khi gửi một cách ngầm ẩn

Chạy kiểm thử trước khi gửi trong các tệp TEST_MAPPING trong thư mục hiện tại và thư mục mẹ:

atest

Chạy các bài kiểm thử trước khi gửi trong tệp TEST_MAPPING trong /path/to/project và các thư mục mẹ của tệp đó:

atest --test-mapping /path/to/project

Chạy một nhóm kiểm thử được chỉ định

Các nhóm kiểm thử hiện có là: presubmit(mặc định), postsubmit, mainline-presubmitall.

Chạy các kiểm thử sau khi gửi trong tệp TEST_MAPPING trong thư mục hiện tại và thư mục mẹ:

atest :postsubmit

Chạy kiểm thử từ tất cả các nhóm trong tệp TEST_MAPPING:

atest :all

Chạy các bài kiểm thử sau khi gửi trong tệp TEST_MAPPING trong /path/to/project và các thư mục mẹ của tệp đó:

atest --test-mapping /path/to/project:postsubmit

Chạy kiểm thử dòng chính trong các tệp TEST_MAPPING trong /path/to/project và các thư mục mẹ của tệp đó:

atest --test-mapping /path/to/project:mainline-presubmit

Chạy kiểm thử trong các thư mục con

Theo mặc định, Atest chỉ tìm kiếm các chương trình kiểm thử trong các tệp TEST_MAPPING trở lên (từ thư mục hiện tại hoặc thư mục đã cho đến thư mục mẹ). Nếu bạn cũng muốn chạy kiểm thử trong các tệp TEST_MAPPING trong thư mục con, hãy sử dụng --include-subdirs để buộc Atest cũng đưa các kiểm thử đó vào:

atest --include-subdirs /path/to/project

Chạy kiểm thử trong vòng lặp

Chạy kiểm thử trong vòng lặp bằng cách truyền đối số --iterations. Dù đạt hay không thành công, Atest sẽ lặp lại quy trình kiểm thử cho đến khi đạt vòng lặp tối đa.

Ví dụ:

Theo mặc định, Atest sẽ lặp lại 10 lần. Số lần lặp phải là một số nguyên dương.

atest test-to-run --iterations
atest test-to-run --iterations 5

Các phương pháp sau đây giúp bạn dễ dàng phát hiện các kiểm thử không ổn định:

Phương pháp 1: Chạy tất cả các bài kiểm thử cho đến khi xảy ra lỗi hoặc đạt đến số lần lặp tối đa.

  • Dừng khi xảy ra lỗi hoặc vòng lặp đạt đến vòng thứ 10 (theo mặc định).
    atest test-to-run --rerun-until-failure
    
  • Dừng khi xảy ra lỗi hoặc vòng lặp đến vòng thứ 100.
    atest test-to-run --rerun-until-failure 100
    

Phương pháp 2: Chỉ chạy các bài kiểm thử không đạt cho đến khi đạt hoặc đạt đến số lần lặp tối đa.

  • Giả sử test-to-run có nhiều trường hợp kiểm thử và một trong các trường hợp kiểm thử không thành công. Chỉ chạy kiểm thử không đạt 10 lần (theo mặc định) hoặc cho đến khi kiểm thử đạt.
    atest test-to-run --retry-any-failure
    
  • Ngừng chạy kiểm thử không thành công khi kiểm thử đó vượt qua hoặc đạt đến vòng thứ 100.
    atest test-to-run --retry-any-failure 100
    

Chạy kiểm thử trên AVD

Atest có thể chạy các chương trình kiểm thử trên một AVD mới tạo. Chạy acloud create để tạo AVD và tạo cấu phần phần mềm, sau đó sử dụng các ví dụ sau để chạy kiểm thử.

Khởi động một AVD và chạy kiểm thử trên AVD đó:

acloud create --local-instance --local-image && atest test-to-run

Bắt đầu một AVD trong quá trình chạy kiểm thử:

atest test-to-run --acloud-create "--local-instance --local-image"

Để biết thêm thông tin, hãy chạy acloud create --help.

Truyền tuỳ chọn đến mô-đun

Atest có thể truyền các tuỳ chọn để kiểm thử các mô-đun. Để thêm các tuỳ chọn dòng lệnh TradeFed vào lần chạy kiểm thử, hãy sử dụng cấu trúc sau và đảm bảo các đối số tuỳ chỉnh tuân theo định dạng tuỳ chọn dòng lệnh Tradefed.

atest test-to-run -- [CUSTOM_ARGS]

Truyền các tuỳ chọn mô-đun kiểm thử đến trình chuẩn bị mục tiêu hoặc trình chạy kiểm thử được xác định trong tệp cấu hình kiểm thử:

atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true

Truyền các tuỳ chọn cho một loại hoặc lớp trình chạy:

atest test-to-run -- --test-arg test-class:option-name:option-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true

Để biết thêm thông tin về các tuỳ chọn chỉ dành cho kiểm thử, hãy xem phần Truyền tuỳ chọn tới các mô-đun.