このページでは、SDV テスト フレームワーク ライブラリの概要を説明し、テストの設定、構成、実行について説明します。エンドツーエンドのテストには、SDV テスト フレームワークを使用します。このツールは Mobly をベースにしており、テストは Python で記述します。
テスト方法を選択する
テストを作成する前に、検証スコープに一致するテストランナーを選択します。
| テストスコープ | Soong モジュール タイプ | 実行ツール | 使用する場面 |
|---|---|---|---|
| サービス バンドルの単体テスト | rust_test、rust_test_host、または cc_test |
atest |
ホストまたは単一の Cuttlefish 仮想マシン(VM)で、分離された Rust または C++ のビジネス ロジック、データ変換、ヘルパークレートを検証します。 |
| エンドツーエンドおよびマルチ VM システムテスト | python_test_host(SDV テスト フレームワーク) |
atest または CATBox |
1 ~ 3 台の VM で、サービス バンドルのライフサイクル オーケストレーション、VM 間通信、SOME/IP ブリッジ、ハードウェア ターゲットを検証します。 |
環境を設定する
このページでは、SDV 用にワークステーションがすでに設定されていることを前提としています。フレームワーク テストを実行するには、virtualenv をインストールします。
Python 依存関係
Android で依存関係を管理する際のおすすめの方法は、ビルド構成を使用して、テスト、Python、それらの依存関係を実行可能ファイルとしてパッケージ化することです。SDV テスト リポジトリでは、このアプローチに従う必要があります。
SDV テスト フレームワーク ライブラリは、デフォルトで次の依存関係を提供します。
moblyabsl-pyテストでパラメータ化を使用するために必要です。pexpect。インタラクティブ コマンド機能に必要です。ptyprocess。インタラクティブ コマンド機能に必要です。
テスト固有の依存関係が必要な場合は、テストの Android.bp ファイルに含めます。
python_test_host {
…
libs: [
"<DEPENDENCY1>",
"<DEPENDENCY2>",
…
],
…
}
システムテストの種類
システムテストは、SDV テスト フレームワークを使用して作成します。フレームワークは、次のタイプを区別します。テストを正しく分類します。
- サンプルテスト: SDV サンプル サービスを実行し、結果が想定される出力と一致することを確認します。
- E2E テスト: SDV サンプル サービスを使用しないでください。
- 長時間実行テスト: 長時間の実行期間を想定して設計されています。
- パフォーマンス テスト:
perfettoライブラリを使用します。 - ハードウェア テスト: Cuttlefish(CF)ではなく、実機でのみ実行されるように設計されています。
テストの作成
フレームワークを使用して作成されたテストはすべて、テスト リポジトリに配置する必要があります。テストの正確な場所は、テストの種類によって異なります。ディレクトリ パス、Python テストクラス テンプレート、Android.bp ルール、Mobly コーディング ガイドラインについては、SDV システムテストの作成をご覧ください。
テストを構成する
atest と CATBox の両方を使用して実行するようにすべてのテストを構成します。
atest を構成する
このフレームワークには、1 台、2 台、3 台の VM テスト用のテンプレートが用意されています。次のコードを Android.bp ファイルに追加します。
1 つの VM:
python_test_host { ... test_config_template: ":sdv_one_device", }2 つの VM:
python_test_host { ... test_config_template: ":sdv_two_devices", }3 つの VM:
python_test_host { ... test_config_template: ":sdv_three_devices", }
ほとんどのテストでは、デフォルトのテンプレートで十分です。やむを得ない理由がない限り、カスタム構成は作成しないでください。
デフォルトのタイムアウトを更新する
デフォルトのタイムアウトは、テストをローカルで実行するのに十分な長さです。
タイムアウトが原因でローカルでテストが失敗する場合は、テストを分割することを検討してください。テストケースが多数ある非常に長いテストは、実行のボトルネックになる可能性があります。
デフォルトよりも長いタイムアウトを設定する必要がある場合は、続きをご覧ください。
デフォルトのタイムアウトをオーバーライドする
このフレームワークは、atest 実行用のテンプレートの拡張をサポートしていません。そのため、タイムアウトが延長された、提供されているテンプレートを使用してください。
1 つの VM の長時間テスト:
python_test_host { ... test_config_template: ":sdv_one_device_long_test", }2 つの VM の長時間テスト:
python_test_host { ... test_config_template: ":sdv_two_devices_long_test", }
このテンプレートを使用する目的を明確に示し、延長時間が必要な理由(テストで特定の時間がかかるアーティファクトをダウンロードする必要がある場合など)を説明するコメントを追加します。
デバイスにファイルを push する
次の手順では、atest 構成のファイルをデバイスに push する方法について説明します。
デバイスにファイルを push する
このフレームワークは、atest 実行用のテンプレートの拡張をサポートしていません。したがって、デフォルトのテンプレートを完全に置き換え、デバイスに対応する target_preparer オプションを含む AndroidTest.xml ファイルを作成する必要があります。
テンプレートの内容をコピーします。
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
{MODULE}をテストのモジュール名に更新します。各デバイスに
com.android.tradefed.targetprep.PushFilePreparerを追加します。
<device name="device1">
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
</target_preparer>
</device>
CATBox を構成する
テストをスイートとして実行するには、CATBox 構成が必要です。
libraries/sdv/sdv_catbox/res/config/に新しい構成ファイルを作成し、次の命名規則に従います。- サンプルテスト:
sdv-sample-<NAME>-test.xml - E2E テスト:
sdv-e2e-<NAME>-test.xml - 長時間実行テスト:
sdv-long-running-<NAME>-test.xml - パフォーマンス テスト:
sdv-performance-<NAME>-test.xml - ハードウェア テスト:
sdv-hw-<NAME>-test.xml
- サンプルテスト:
テストタイプに基づいて、対応する情報を追加します。
1 つの VM テスト構成:
<configuration description="SDV <NAME> Test"> <!-- Template for Device Configuration --> <template-include name="device-config" default="sdv-device-config/one-device" /> <!-- Plan. Use the same name as the file name --> <option name="plan" value="<CONFIG_FILE_NAME>"/> <!-- Test: mobly-par-file-name should match the module name --> <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" /> </configuration>2 つの VM のテスト構成:
<configuration description="SDV <NAME> Test"> <!-- Template for Device Configuration --> <template-include name="device-config" default="sdv-device-config/two-devices" /> <!-- Plan. Use the same name as the file name --> <option name="plan" value="<CONFIG_FILE_NAME>"/> <!-- Test: mobly-par-file-name should match the module name --> <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" /> </configuration>3 つの VM のテスト構成:
<configuration description="SDV <NAME> Test"> <!-- Template for Device Configuration --> <template-include name="device-config" default="sdv-device-config/three-devices" /> <!-- Plan. Use the same name as the file name --> <option name="plan" value="<CONFIG_FILE_NAME>"/> <!-- Test: mobly-par-file-name should match the module name --> <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" /> </configuration>
ほとんどのテストでは、デフォルトのテンプレートで十分です。やむを得ない理由がない限り、カスタム構成は作成しないでください。
デフォルトのタイムアウトを更新する
デフォルトのタイムアウトがテストに十分でない場合は、オーバーライドできます。
デフォルトのタイムアウトをオーバーライドする
デフォルトのタイムアウトをオーバーライドするには、構成ファイルの末尾に次の行を追加します。長時間テストの最大タイムアウトは 10 分にする必要があります。
<!-- Long Test - 10 minutes timeout: <REASON> -->
<option name="mobly-host:mobly-test-timeout" value="600000" />
デバイスにファイルを push する
次のセクションでは、CATBox の構成時にファイルをデバイスに push する方法について説明します。
デバイスにファイルを push する
対応するデバイスにファイルを push するには、plan オプションの後に次の構成を追加します。
<!-- Automatically pushes config file to device-->
<device name="device1">
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push-file"
key="<FILE_NAME>"
value="<REMOTE_FILE_PATH>"
/>
</target_preparer>
</device>
各デバイスにファイルが必要な場合は、各デバイスの構成(name=device1、name=device2 など)を追加します。
テスト実行
以下の手順は、動作する SDV 環境の設定が完了していることを前提としています。
環境を設定する
フレームワークは Cloud Virtual Device(CVD)仮想デバイス インスタンスを起動しないため、テストを実行する前に起動する必要があります。
環境をセットアップして SDV ターゲットを起動します。
. build/envsetup.sh lunch <TARGET>最初の CVD インスタンスを起動します。
cvd create --config=sdv_core_instance12 つ目の CVD インスタンスを起動します(マルチ VM テスト用)。
cvd create --config=sdv_core_instance23 番目の CVD インスタンスを起動します(マルチ VM テスト用)。
cvd create --config=sdv_core_instance3
atest を実行する
atest <TestModuleName>
CATBox を実行する
これらのコマンドは、リポジトリのルート ディレクトリにいることを前提としています。
- CATBox をビルドします。
m catbox - (省略可)CATBox で利用可能なすべての SDV テストプランを表示します。
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-
テストを実行します。
1 つの VM テストを実行する:
NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:65202 つの VM のテストを実行する:
NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:65213 つの VM のテストを実行する:
NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522