Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

一個測試

Atest是一個命令行工具,允許用戶在本地構建,安裝和運行Android測試,從而極大地加快了測試的重新運行速度,而無需了解Trade Federation測試工具命令行選項。本頁說明如何使用Atest運行Android測試。

有關編寫針對Android的測試的一般信息,請參見Android平台測試

有關Atest總體結構的信息,請參閱《 Atest開發人員指南》

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

並向Atest添加功能,請遵循Atest開發人員工作流程

設置環境

要運行Atest,請按照以下各節中的步驟設置環境。

設置環境變量

Soong設置test_suite或為Make per Packaging構建腳本規則設置LOCAL_COMPATIBILITY_SUITE。

1.運行envsetup.sh

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

source build/envsetup.sh

2.午餐

運行$ lunch命令以顯示受支持設備的菜單。找到設備並運行該命令。

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

lunch aosp_arm64-eng

這將設置運行Atest所需的各種環境變量,並將Atest命令添加到$PATH

基本用法

Atest命令採用以下形式:

atest [optional-arguments] test-to-run

可選參數

您可以在Atest命令中使用以下可選參數。

選項長選項描述
-b --build 建立測試目標。
-i --install 在設備上安裝測試工件(APK)。
-t --test 運行測試。
-s --serial 在指定設備上運行測試。一次可以測試一台設備。
-d --disable-teardown 禁用測試拆卸和清理。
--info 顯示指定目標的相關信息並退出。
--dry-run --info的同義詞。
-m --rebuild-module-info 強制重建module-info.json文件。
-w --wait-for-debugger 在執行之前等待調試器。僅用於儀器測試。
-v --verbose 顯示調試級別的日誌記錄。
--generate-baseline 生成基準指標,默認情況下運行5次迭代。
--generate-new-metrics 生成新指標,默認情況下運行5次迭代。
--detect-regression 運行回歸檢測算法。
--[CUSTOM_ARGS] 指定測試運行程序的自定義參數。
-a --all-abi 針對所有可用的設備架構運行測試。
-h --help 顯示幫助消息並退出。
--host 在沒有設備的主機上完全運行測試。
(注意:運行需要帶有--host設備的主機測試將失敗。)

有關-b-i-t更多信息,請參見指定步驟:構建,安裝或運行。

測試運行

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

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

這裡有些例子:

atest FrameworksServicesTests
atest example/reboot
atest FrameworksServicesTests CtsJankDeviceTestCases
atest FrameworksServicesTests:ScreenDecorWindowTests

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

識別測試

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

模塊名稱

要運行整個測試模塊,請使用其模塊名稱。輸入該測試的Android.mkAndroid.bp文件中LOCAL_MODULELOCAL_PACKAGE_NAME變量中顯示的名稱。

例子:

atest FrameworksServicesTests
atest CtsJankDeviceTestCases

模塊:類

要在模塊中運行單個類,請使用Module:Class模塊與“ 模塊名稱”中描述的相同。 .java文件中測試類的名稱,可以是完全限定的類名稱或基本名稱。

例子:

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

班級名稱

要運行單個類而不顯式說明模塊名稱,請使用類名稱。

例子:

atest ScreenDecorWindowTests
atest CtsDeviceJankUi

建議盡可能使用Module:Class引用,因為如果未聲明模塊,則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文件的路徑來運行單個類。相對路徑和絕對路徑均受支持。

示例:通過路徑運行CtsJankDeviceTestCases模塊的兩種方法

  1. 從android repo-root運行模塊:

    atest cts/tests/jank
    
  2. 從android repo-root / cts / tests / jank:

    atest .
    

示例:通過路徑在CtsJankDeviceTestCases模塊內運行特定的類。從android repo-root

atest cts/tests/jank/src/android/jank/cts/ui/CtsDeviceJankUi.java

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

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

包裹名字

Atest支持按程序包名稱搜索測試。

例子:

atest com.android.server.wm
atest android.jank.cts

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

您可以使用-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)都會在測試運行後清理設備,因此如果沒有--disable-teardown參數,嘗試使用-t重新運行測試將會失敗。在-t之前使用-d跳過測試清理步驟並進行迭代測試。

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/servicestests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
    

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

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

運行多個課程

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

例子:

  • 同一模塊中的兩個類:

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

    atest FrameworksServicesTests:ScreenDecorWindowTests CtsJankDeviceTestCases:CtsDeviceJankUi
    

運行本機測試

Atest可以運行本機測試。

例子:

  • 輸入測試:

    atest -a libinput_tests inputflinger_tests
    

使用-a運行所有可用設備體系結構的測試,在本示例中,這些體系結構是armeabi-v7a(ARM 32位)和arm64-v8a(ARM 64位)。

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

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

您可以使用

atest inputflinger_tests:InputDispatcherTest
運行整個測試

或使用

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
的單獨測試方法

檢測指標回歸

您可以生成補丁前或補丁後指標,而無需運行回歸檢測。您可以指定迭代次數,但默認值為5。

例子:

atest test-to-run --generate-baseline [optional-iteration]
atest test-to-run --generate-new-metrics [optional-iteration]

本地回歸檢測可以在三個選項中運行:

  1. 生成基線(補丁前)度量標準並將其放置在文件夾中。 Atest通過指定的迭代來運行測試,生成補丁後指標,並將這些指標與現有指標進行比較。

    例:

    atest test-to-run --detect-regression /path/to/baseline --generate-new-metrics [optional-iteration]
    
  2. 使用包含先前生成的補丁後指標的文件夾,Atest進行n次迭代測試,生成一組新的補丁前指標,並將其與提供的指標進行比較。

    例:

    atest test-to-run --detect-regression /path/to/new --generate-baseline [optional-iteration]
    
  3. 使用兩個同時包含補丁前和補丁後指標的文件夾,Atest運行回歸檢測算法而無需任何測試。

    例:

    第584章