一個測試

ATEST是一個命令行工具,允許用戶構建,安裝,並在本地運行Android測試,大大加快測試重新運行,而不需要的知識貿易聯合會的測試工具命令行選項。本頁介紹瞭如何使用 Atest 運行 Android 測試。

有關為Android編寫測試的一般信息,請參閱的Android平台測試

有關ATEST的整體結構信息,請參見ATEST開發指南

有關通過ATEST運行在TEST_MAPPING文件測試的信息,請參閱在TEST_MAPPING文件運行測試

並增加一個功能,ATEST,遵循ATEST Developer流

設置您的環境

要運行 Atest,請按照以下部分中的步驟設置您的環境。

設置環境變量

設置為test_suite宋楚瑜或LOCAL_COMPATIBILITY_SUITE每製作包裝構建腳本規則

運行 envsetup.sh

從 Android 源代碼檢出的根目錄,運行:

source build/envsetup.sh

跑午餐

運行lunch命令,彈出支持設備的菜單。找到設備並運行該命令。

例如,如果您連接了 ARM 設備,請運行以下命令:

lunch aosp_arm64-eng

這為運行ATEST所需的各種環境變量,並增加了ATEST命令添加到$PATH

基本用法

Atest 命令採用以下形式:

atest test-to-run [optional-arguments]

可選參數

以下是最常用的參數。完整的列表可以通過atest --help

選項多頭期權描述
-b --build構建測試目標。 (默認)
-i --install在設備上安裝測試工件 (APK)。 (默認)
-t --test運行測試。 (默認)
-s --serial在指定的設備上運行測試。一次可以測試一台設備。
-d --disable-teardown禁用測試拆卸和清理。
--info顯示指定目標的相關信息並退出。
--dry-run實際運行測試無需構建、安裝和運行測試
-m --rebuild-module-info強制重建的module-info.json文件。
-w --wait-for-debugger在執行之前等待調試器。僅用於儀器測試。
-v --verbose顯示調試級別的日誌記錄。
--iterations循環運行測試直到達到最大迭代。 (默認 10 個)
--rerun-until-failure [COUNT=10]重新運行所有測試,直到發生故障或達到最大迭代。 (默認 10 個)
--retry-any-failure [COUNT=10]重新運行失敗的測試,直到通過或達到最大迭代。 (默認 10 個)
--start-avd自動創建 AVD 並在虛擬設備上運行測試。
--acloud-create創建使用自動真空澱積acloud command.
--[CUSTOM_ARGS]為測試運行程序指定自定義參數。
-a --all-abi運行所有可用設備架構的測試。
--host在沒有設備的情況下完全在主機上運行測試。
(注:運行需要與設備的主機測試--host將失敗。)
--flakes-info顯示帶有薄片信息的測試結果。
--history按時間順序顯示測試結果。
--latest-result打印最新的測試結果。

欲了解更多有關-b-i-t ,請參閱指定步驟:構建,安裝或運行。

要運行的測試

您可以運行使用一個或多個測試test-to-run 。要運行多個測試,請用空格分隔測試引用。例如:

atest test-to-run-1 test-to-run-2

這裡有些例子:

atest FrameworksServicesTests
atest example/reboot
atest FrameworksServicesTests CtsVideoTestCases
atest FrameworksServicesTests:ScreenDecorWindowTests

有關如何引用測試的詳細信息,請參閱識別測試。

識別測試

您可以指定test-to-run參數與測試的模塊名稱,模塊:類,類名,TF集成測試,文件路徑或軟件包名稱。

模塊名稱

要運行整個測試模塊,請使用其模塊名稱。輸入,因為它出現在名稱LOCAL_MODULELOCAL_PACKAGE_NAME在該測試中的變量Android.mkAndroid.bp文件。

例子:

atest FrameworksServicesTests
atest CtsVideoTestCases

模塊:類

要運行一個模塊內的單個類中,使用模塊:類模塊是如所描述的相同模塊的名字是測試類的名稱.java文件,可以是完全合格的類名或基本名稱。

例子:

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

班級名稱

要在不明確聲明模塊名稱的情況下運行單個類,請使用類名。

例子:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

使用模塊:類參考建議,因為ATEST需要更多的時間來搜索完整的源代碼樹的潛在的匹配,如果沒有模塊說明只要有可能。

示例(從最快到最慢排序):

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

TF集成測試

到,因為它出現在輸出運行被直接集成到TradeFed(非模塊)的測試中,輸入名字tradefed.sh list configs命令。例如:

要運行reboot.xml測試

atest example/reboot

要運行native-benchmark.xml測試

atest native-benchmark

文件路徑

您可以通過輸入相應的測試文件或目錄的路徑來運行基於模塊的測試和基於集成的測試。您還可以通過指定類的 Java 文件的路徑來運行單個類。支持相對路徑和絕對路徑。

例如:有兩種方法來運行CtsVideoTestCases通過路徑模塊

  1. 從Android上運行模塊repo-root

    atest cts/tests/video
    
  2. 從Android的repo-root / CTS /測試/視頻:

    atest .
    

例如:內運行一個特定的類CtsVideoTestCases經由路徑模塊。從Android的repo-root

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

示例:通過路徑運行集成測試。從Android的repo-root

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

包裹名字

Atest 支持按包名搜索測試。

例子:

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

指定步驟:構建、安裝或運行

您可以指定哪些步驟使用運行-b-i-t選項。如果您不指定選項,則所有步驟都會運行。

  • 構建目標只有: atest -b test-to-run
  • 運行測試只: atest -t test-to-run
  • APK安裝和運行測試: atest -it test-to-run
  • 編譯和運行,但不安裝: atest -bt test-to-run

Atest 可以強制測試跳過清理/拆卸步驟。許多測試,如CTS,清理測試運行後的設備,所以想重新運行測試與-t將沒有失敗--disable-teardown參數。使用-d-t ,跳過測試,清潔步驟和測試迭代。

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

運行特定方法

您可以在測試類中運行特定方法。儘管需要構建整個模塊,但這減少了運行測試所需的時間。要運行特定方法,請使用任何支持識別類的方式(模塊:類、文件路徑等)來識別類,並附加方法的名稱。

atest reference-to-class#method1

您可以使用逗號指定多個方法。

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

例子:

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

下面的兩個例子示出了優選的方式來運行一個單獨的方法, testFlagChange 。這些示例優於僅使用類名,因為指定模塊或 Java 文件位置可以讓 Atest 更快地找到測試:

  1. 使用模塊:類

    atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
    
  2. 從Android的repo-root

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

可以從不同的類和模塊運行多個方法:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

運行多個類

要運行多個類,請以與運行多個測試相同的方式用空格分隔它們。 Atest 可以高效地構建和運行類,因此在模塊中指定類的子集可以提高運行整個模塊的性能。

例子:

  • 同一模塊中的兩個類:

    atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
    
  • 不同模塊中的兩個類:

    atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
    

運行本機測試

Atest 可以運行本機測試。使用-a運行可用於所有設備的體系結構,在該示例中是armeabi-V7A(ARM 32位)和arm64-V8A(ARM 64位)的測試。

例子:

  • 輸入測試:

    atest -a libinput_tests inputflinger_tests
    

要選擇要運行的特定本機測試,請使用冒號 (:) 指定測試名稱和主題標籤 (#) 以進一步指定單個方法。例如,對於下面的測試定義:

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

您可以使用運行整個測試

atest inputflinger_tests:InputDispatcherTest

或使用單獨的測試方法

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

在 TEST_MAPPING 中運行測試

Atest 可以在 TEST_MAPPING 文件中運行測試。

  1. 在當前、父目錄或特定目錄中的 TEST_MAPPING 文件中隱式運行提交前測試。

    在TEST_MAPPING文件運行presubmit測試當前和父目錄:

    atest
    

    在TEST_MAPPING文件在運行presubmit測試/path/to/project :與其父目錄

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

  2. 運行在TEST_MAPPING文件指定的測試組;可用的測試組是: presubmit (默認), postsubmitmainline-presubmitall

    • 在TEST_MAPPING文件運行postsubmit測試當前和父目錄:

      atest :postsubmit
      

    • 在TEST_MAPPING文件從所有組運行測試:

      atest :all
      

    • 在TEST_MAPPING文件在運行postsubmit測試/path/to/project和它的父目錄

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

    • 在TEST_MAPPING文件在運行主線測試/path/to/project和它的父目錄

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

  3. 在 TEST_MAPPING 文件(包括子目錄)中運行測試。

默認情況下, atest 僅在 TEST_MAPPING 文件中向上搜索測試(從當前或給定到其父目錄)。如果你也想在子目錄運行TEST_MAPPING文件測試中,你可以使用選項--include-subdirs強制ATEST包括那些測試以及。

運行presubmit測試在當前,家長TEST_MAPPING文件和子目錄:

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

在迭代中運行測試

要以迭代測試,簡單地傳遞--iterations說法。無論通過還是失敗, atest 都不會停止測試,直到達到最大迭代次數。

例子:

默認情況下 atest 迭代 10 次,給出一個整數來改變迭代輪次。

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

幫助用戶檢測片狀測試的兩種方法:

方法 1:運行所有測試,直到發生故障或達到最大迭代次數。

  • 當失敗發生或迭代達到第 10 輪(默認)時停止。
    atest test-to-run --rerun-until-failure
    
  • 發生故障或迭代到第 100 輪時停止。
    atest test-to-run --rerun-until-failure 100
    

方法 2:只運行失敗的測試,直到通過或達到最大迭代。

  • 假設test-to-run有五個測試用例和測試的一個失敗。僅運行失敗的測試 10 次或直到測試通過。
    atest test-to-run --retry-any-failure
    
  • 當失敗的測試通過或達到第 100 輪時停止運行。
    atest test-to-run --retry-any-failure 100
    

在 AVD 上運行測試

Atest 能夠使用新創建的 AVD 運行測試。 ATEST可以運行沿著建設文物acloud create和AVD後的運行測試已成功創建。

例子:

  • 新創建的設備上運行測試之前啟動的AVD:

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

  • 通過specifing啟動自動真空澱積acloud create新創建的設備參數和運行測試。

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

要獲得有關參數的使用細節,運行acloud create --help

將選項傳遞給模塊

Atest 能夠將選項傳遞給模塊。在ATEST命令行簡要格式添加TradeFed命令行選項是

atest test-to-run -- [CUSTOM_ARGS]
的[CUSTOM_ARGS]應遵循Tradefed命令行選項格式。

將測試模塊選項傳遞給測試配置文件中定義的目標準備器或測試運行器的示例:

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

將選項傳遞給跑步者類型或類的示例:

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

有關測試只選項的詳細信息,請參閱選項傳遞給模塊