一個測試

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。

運行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重新運行所有測試,直到發生故障或達到最大迭代次數為止。 (默認為10)
--retry-any-failure重新運行失敗的測試,直到通過或達到最大迭代次數為止。 (默認為10)
--start-avd自動創建AVD並在虛擬設備上運行測試。
--acloud-create使用acloud command.創建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

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

識別測試

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

模組名稱

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

例子:

atest FrameworksServicesTests
atest CtsVideoTestCases

模塊:類

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

例子:

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

班級名稱

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

例子:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

建議盡可能使用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文件的路徑來運行單個類。相對路徑和絕對路徑均受支持。

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

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

    atest cts/tests/video
    
  2. 從Android存儲repo-root / cts / tests / video:

    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 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/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
的個別測試方法

迭代運行測試

要在迭代中運行測試,只需傳遞--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 && atest test-to-run
    
    現在可以將其簡化為:
    atest test-to-run --start-avd
    

  • 通過acloud create參數來啟動acloud create並在該新創建的設備上運行測試。

    atest test-to-run --acloud-create "--build-id 6509363 --build-target aosp_cf_x86_phone-userdebug --branch aosp_master"
    

要獲取有關該參數的用法詳細信息,請運行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

有關僅測試選項的更多信息,請參閱將選項傳遞給模塊