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を使用します。 ModuleはModule 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
(デフォルト)、 postsubmit
、 mainline-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
テスト専用オプションの詳細については、オプションをモジュールに渡す を参照してください。