実行中のテスト(テスト)

Atest は、ユーザーが Android テストをローカルでビルド、インストール、および実行できるコマンド ライン ツールであり、 Trade Federation テスト ハーネスコマンド ライン オプションの知識がなくても、テストの再実行を大幅に高速化します。このページでは、Atest を使用して Android テストを実行する方法について説明します。

Android 用のテストの作成に関する一般的な情報については、 Android プラットフォーム テストを参照してください。

Atest の全体的な構造については、 Atest 開発者ガイドを参照してください。

Atest を使用して TEST_MAPPING ファイルでテストを実行する方法については、「 TEST_MAPPING ファイルでテストを実行する」を参照してください。

Atest に機能を追加するには、 Atest 開発者ワークフローに従ってください。

環境をセットアップする

Atest 環境をセットアップするには、環境のセットアップ、ターゲットの選択、およびコードのビルドの手順に従います。

基本的な使い方

Atest コマンドの形式は次のとおりです。

atest test-to-run [optional-arguments]

オプションの引数

次の表に、最も一般的に使用される引数を示します。完全なリストは、 atest --helpから入手できます。

オプションロングオプション説明
-b --buildテスト ターゲットをビルドします。 (デフォルト)
-i --installデバイスにテスト アーティファクト (APK) をインストールします。 (デフォルト)
-t --testテストを実行します。 (デフォルト)
-s --serial指定されたデバイスでテストを実行します。一度に 1 つのデバイスをテストできます。
-d --disable-teardownテストのティアダウンとクリーンアップを無効にします。
--info指定されたターゲットに関する関連情報を表示して終了します。
--dry-run実際にテストをビルド、インストール、または実行せずに Atest をドライランします。
-m --rebuild-module-info module-info.jsonファイルの再構築を強制します。
-w --wait-for-debuggerデバッガーが終了するのを待ってから実行します。
-v --verbose DEBUG レベルのロギングを表示します。
--iterations最大反復回数に達するまでテストをループ実行します。 (デフォルトで 10)
--rerun-until-failure [COUNT=10]失敗が発生するか、最大反復回数に達するまで、すべてのテストを再実行します。 (デフォルトで 10)
--retry-any-failure [COUNT=10]合格するか最大反復回数に達するまで、失敗したテストを再実行します。 (デフォルトで 10)
--start-avd AVD を自動的に作成し、仮想デバイスでテストを実行します。
--acloud-create acloudコマンドを使用して AVD を作成します。
--[CUSTOM_ARGS]テスト ランナーのカスタム引数を指定します。
-a --all-abi利用可能なすべてのデバイス アーキテクチャのテストを実行します。
--hostデバイスなしでホスト上でテストを完全に実行します。
注: --hostを指定したデバイスを必要とするホスト テストの実行は失敗します。
--historyテスト結果を時系列で表示します。
--latest-result最新のテスト結果を印刷します。

-b-i 、および-tの詳細については、ステップの指定: ビルド、インストール、または実行セクションを参照してください。

テストを指定する

テストを実行するには、次の識別子のいずれかを使用して 1 つ以上のテストを指定します。

  • モジュール名
  • モジュール:クラス
  • クラス名
  • Tradefed 統合テスト
  • ファイルパス
  • パッケージ名

次のように、複数のテストへの参照をスペースで区切ります。

atest test-identifier-1 test-identifier-2

モジュール名

テスト モジュール全体を実行するには、そのモジュール名を使用します。そのテストのAndroid.mkまたはAndroid.bpファイルのLOCAL_MODULEまたはLOCAL_PACKAGE_NAME変数に表示される名前を入力します。

例:

atest FrameworksServicesTests
atest CtsVideoTestCases

モジュール:クラス

モジュール内で単一のクラスを実行するには、 Module:Classを使用します。 ModuleModule nameで説明したものと同じです。 Classは、 .javaファイル内のテスト クラスの名前であり、完全修飾クラス名または基本名にすることができます。

例:

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

クラス名

モジュール名を明示的に指定せずに単一のクラスを実行するには、クラス名を使用します。

例:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Tradefed 統合テスト

TradeFed (非モジュール) に直接統合されたテストを実行するには、 tradefed.sh list configsコマンドの出力に表示される名前を入力します。例えば:

reboot.xmlテストを実行するには:

atest example/reboot

native-benchmark.xmlテストを実行するには:

atest native-benchmark

ファイルパス

Atest は、必要に応じてテスト ファイルまたはディレクトリへのパスを入力することにより、モジュール ベースのテストと統合ベースのテストの両方の実行をサポートします。また、クラスの Java ファイルへのパスを指定して、単一のクラスを実行することもサポートしています。相対パスと絶対パスの両方がサポートされています。

モジュールを実行する

次の例は、ファイル パスを使用してCtsVideoTestCasesモジュールを実行する 2 つの方法を示しています。

Android repo-rootから実行:

atest cts/tests/video

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 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パラメーターがないと失敗します。 -tの前に-dを使用して、テストのクリーンアップ手順をスキップし、繰り返しテストします。

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

特定のメソッドの実行

Atest は、テスト クラス内での特定のメソッドの実行をサポートしています。モジュール全体をビルドする必要がありますが、これによりテストの実行に必要な時間が短縮されます。特定のメソッドを実行するには、クラスを識別するためにサポートされている方法 (Module:Class、ファイル パスなど) のいずれかを使用してクラスを識別し、メソッドの名前を追加します。

atest reference-to-class#method1

複数のメソッドを指定する場合は、カンマで区切ります。

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

例:

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

次の 2 つの例は、単一のメソッドtestFlagChangeを実行するための推奨される方法を示しています。これらの例は、モジュールまたは Java ファイルの場所を指定すると、Atest がテストをより迅速に見つけることができるため、クラス名のみを使用するよりも優先されます。

Module:Class の使用:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange

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 はクラスを効率的に構築および実行するため、モジュール内のクラスのサブセットを指定すると、モジュール全体を実行するよりもパフォーマンスが向上します。

同じモジュールで 2 つのクラスを実行するには:

atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests

異なるモジュールで 2 つのクラスを実行するには:

atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest

GTest バイナリを実行する

Atest は GTest バイナリを実行できます。 -aを使用して、使用可能なすべてのデバイス アーキテクチャ (この例ではarmeabi-v7a (ARM 32 ビット) およびarm64-v8a (ARM 64 ビット)) に対してこれらのテストを実行します。

入力テストの例:

atest -a libinput_tests inputflinger_tests

実行する特定の GTest バイナリを選択するには、コロン (:) を使用してテスト名を指定し、ハッシュタグ (#) を使用して個々のメソッドをさらに指定します。

たとえば、次のテスト定義の場合:

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

以下を実行して、テスト全体を指定します:

atest inputflinger_tests:InputDispatcherTest

または、次を使用して個別のテストを実行します:

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

TEST_MAPPINGでテストを実行する

Atest はTEST_MAPPINGファイルでテストを実行できます。

送信前テストを暗黙的に実行する

現在のディレクトリと親ディレクトリのTEST_MAPPINGファイルで送信前テストを実行します。

atest

/path/to/projectとその親ディレクトリにあるTEST_MAPPINGファイルで送信前テストを実行します。

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

指定したテスト グループを実行する

使用可能なテスト グループは、 presubmit (デフォルト)、 postsubmitmainline-presubmit 、およびallです。

現在のディレクトリと親ディレクトリの TEST_MAPPING ファイルで postsubmit テストを実行します。

atest :postsubmit

TEST_MAPPING ファイル内のすべてのグループからテストを実行します。

atest :all

/path/to/projectとその親ディレクトリにある TEST_MAPPING ファイルで postsubmit テストを実行します。

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

/path/to/projectとその親ディレクトリにある TEST_MAPPING ファイルでメインライン テストを実行します。

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

サブディレクトリでテストを実行する

デフォルトでは、Atest は TEST_MAPPING ファイル内のテストを上方向 (現在のディレクトリまたは指定されたディレクトリからその親ディレクトリまで) にのみ検索します。サブディレクトリの TEST_MAPPING ファイルでもテストを実行したい場合は、 --include-subdirsを使用して、Atest にそれらのテストも含めるよう強制します。

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するテストに複数のテスト ケースがあり、テストの 1 つが失敗したとします。失敗したテストのみを 10 回 (デフォルトで)、またはテストが成功するまで実行します。
    atest test-to-run --retry-any-failure
    
  • 失敗したテストが 100 ラウンドに合格するか、100 ラウンドに達したら、実行を停止します。
    atest test-to-run --retry-any-failure 100
    

AVD でテストを実行する

Atest は、新しく作成された AVD でテストを実行できます。 acloud createを実行して AVD を作成し、アーティファクトをビルドしてから、次の例を使用してテストを実行します。

AVD を開始し、テストを実行します。

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

テスト実行の一部として AVD を開始します。

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

詳細については、 acloud create --helpを実行してください。

オプションをモジュールに渡す

Atest は、テスト モジュールにオプションを渡すことができます。テスト実行に TradeFed コマンド ライン オプションを追加するには、次の構造を使用し、カスタム引数が Tradefed コマンド ライン オプションの形式に従っていることを確認します。

atest test-to-run -- [CUSTOM_ARGS]

テスト モジュール オプションを、テスト構成ファイルで定義されたターゲット プリペアラーまたはテスト ランナーに渡します。

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

テスト専用オプションの詳細については、オプションをモジュールに渡す を参照してください。