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 kiểm thử Android cục bộ, giúp tăng tốc đáng kể các lần chạy lại kiểm thử mà không yêu cầu kiến thức về các lựa chọn dòng lệnh Trade Federation test harness. Trang này giải thích cách sử dụng Atest để chạy các kiểm thử Android.
Để biết thông tin chung về cách viết các chương trình 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 các kiểm thử trong tệp TEST_MAPPING thông qua Atest, hãy xem bài viết Chạy các 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 của 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êu và Tạ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 | Lựa chọn có thời gian di chuyển dài | Mô tả |
---|---|---|
-b |
--build |
Tạo các 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 kiểm thử. (mặc định) |
-s |
--serial |
Chạy các 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 huỷ và dọn dẹp kiểm thử. |
|
--dry-run |
Chạy thử Atest mà không thực sự tạo, cài đặt hoặc chạy các 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 GỠ LỖI. |
|
--iterations |
Chạy thử nghiệm theo vòng lặp 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 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ử đó vượt qua hoặc đạt đến số lần lặp lại tối đa. (10 theo mặc định) |
|
--start-avd |
Tự động tạo một AVD và chạy 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 các đối số tuỳ chỉnh cho trình chạy kiểm thử. |
-a |
--all-abi |
Chạy các kiểm thử cho mọi cấu trúc thiết bị hiện có. |
|
--host |
Chạy hoàn toàn quy trình kiểm thử trên máy chủ mà không cần thiết bị. Lưu ý: Việc chạy một kiểm thử lưu trữ yêu cầu thiết bị có --host sẽ không thành công. |
|
--history |
Cho biết 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
và -t
, hãy xem phần Chỉ định các bước: tạo, cài đặt hoặc chạy.
Chỉ định các kiểm thử
Để chạy kiểm thử, hãy chỉ định một hoặc nhiều 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 tham chiếu đến nhiều kiểm thử bằng dấu cách, chẳng hạn như:
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 của mô-đun đó. Nhập tên như tên 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 thử nghiệm đó.
Ví dụ:
atest FrameworksServicesTests
atest CtsVideoTestCases
Mô-đun:Lớp
Để chạy một lớp trong mô-đun, hãy sử dụng Module:Class. Module (Mô-đun) giống như mô tả trong Module name (Tên mô-đun). Class 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 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 như tên xuất hiện trong đầu ra 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 cho phù 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à đường dẫn tuyệt đối đều được hỗ trợ.
Chạy một mô-đun
Các ví dụ sau đây minh hoạ 2 cách chạy mô-đun CtsVideoTestCases
bằng đường dẫn tệp.
Chạy từ Android repo-root
:
atest cts/tests/video
Chạy từ Android repo-root/cts/tests/video
:
atest .
Chạy một lớp kiểm thử
Ví dụ sau đây 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ừ thiết bị Android repo-root
:
atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
Chạy kiểm thử tích hợp
Ví dụ sau đây minh hoạ cách chạy một kiểm thử tích hợp bằng cách sử dụng đường dẫn tệp từ repo-root
Android:
atest tools/tradefederation/contrib/res/config/example/reboot.xml
Tên gói
Atest hỗ trợ tìm kiếm các 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 lựa chọn -b
, -i
và -t
để chỉ định các bước cần chạy. Nếu bạn không chỉ định một lựa chọn, thì tất cả các bước sẽ chạy.
- Chỉ tạo mục tiêu:
atest -b test-to-run
- Chỉ chạy kiểm thử:
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 quy trình kiểm thử bỏ qua bước dọn dẹp hoặc huỷ. Nhiều kiểm thử, chẳng hạn như CTS, sẽ dọn dẹp thiết bị sau khi kiểm thử được chạy, vì vậy, việc cố gắng chạy lại kiểm thử bằng -t
sẽ không thành công nếu không có tham số --disable-teardown
. Sử dụng -d
trước -t
để bỏ qua bước dọn dẹp kiểm thử và kiểm thử lặp đi 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ù toàn bộ mô-đun cần được tạo, nhưng điều này giúp giảm thời gian cần thiết để chạy các 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 một lớp (Module:Class, đườ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 các phương thức đó 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 những cách thức ưu tiên để chạy một phương thức duy nhất, testFlagChange
. Bạn nên dùng những ví dụ này thay vì chỉ 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 bài kiểm thử nhanh hơn nhiều.
Sử dụng Module:Class:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
Từ thiết bị Android repo-root:
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 theo cách tương tự như khi chạy nhiều kiểm thử. Atest tạo 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 2 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 kiểm thử này cho tất cả các cấu 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ử đầ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 dùng dấu hai chấm (:) để chỉ định tên kiểm thử và dấu thăng (#) để 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ộ bài kiểm thử:
atest inputflinger_tests:InputDispatcherTest
Hoặc chạy một quy trình kiểm thử riêng lẻ bằng cách sử dụng lệnh sau:
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
Chạy kiểm thử trong TEST_MAPPING
Atest có thể chạy các kiểm thử trong tệp TEST_MAPPING
.
Chạy kiểm thử trước khi gửi một cách gián tiếp
Chạy các 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ụ thể
Các nhóm kiểm thử có sẵn là: presubmit
(mặc định), postsubmit
, mainline-presubmit
và all
.
Chạy các kiểm thử sau khi gửi trong các tệp TEST_MAPPING trong thư mục hiện tại và thư mục mẹ:
atest :postsubmit
Chạy các bài 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 này:
atest --test-mapping /path/to/project:postsubmit
Chạy các kiểm thử mainline trong tệp TEST_MAPPING trong /path/to/project và các thư mục mẹ của tệp này:
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 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 các thư mục mẹ của thư mục đó). Nếu bạn cũng muốn chạy các kiểm thử trong tệp TEST_MAPPING trong các thư mục con, hãy sử dụng --include-subdirs
để buộc Atest đưa cả những kiểm thử đó vào:
atest --include-subdirs /path/to/project
Chạy kiểm thử trong quá trình lặp
Chạy kiểm thử theo từng lần lặp bằng cách truyền đối số --iterations
. Dù thành công hay thất bại, Atest sẽ lặp lại quy trình kiểm thử cho đến khi đạt đến số lần 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 lại 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:
Cách 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 đạt đến vòng thứ 100.
atest test-to-run --rerun-until-failure 100
Cách 2: Chỉ chạy các kiểm thử không thành công 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 số các kiểm thử không thành công. Chỉ chạy thử nghiệm không thành công 10 lần (theo mặc định) hoặc cho đến khi thử nghiệm thành công.atest test-to-run --retry-any-failure
- Dừng chạy thử nghiệm không thành công khi thử nghiệm đó 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 kiểm thử trên một AVD mới tạo. Chạy acloud create
để tạo một AVD và tạo cấu phần phần mềm, sau đó dùng các ví dụ sau để chạy kiểm thử.
Khởi động một AVD và chạy các kiểm thử trên AVD đó:
acloud create --local-instance --local-image && atest test-to-run
Khởi động AVD trong quá trình chạy 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 các lựa chọn cho mô-đun
Atest có thể truyền các lựa chọn đến các mô-đun kiểm thử. Để thêm các lựa chọn dòng lệnh TradeFed vào lượt 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 của bạn tuân theo định dạng lựa chọn dòng lệnh Tradefed.
atest test-to-run -- [CUSTOM_ARGS]
Truyền các lựa chọn mô-đun kiểm thử đến các 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 lựa 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 lựa chọn chỉ dành cho kiểm thử, hãy xem phần Truyền các lựa chọn đến mô-đun.