SDV テスト フレームワーク

このドキュメントでは、SDV テスト フレームワークの概要を説明し、テストの設定、構成、実行の手順を説明します。エンドツーエンド テストには SDV テスト フレームワークを使用します。このツールは Mobly をベースに構築されており、テストは Python で記述します。

環境を設定する

このドキュメントは、SDV 用のワークステーションがすでに設定されていることを前提としています。フレームワーク テストを実行するには、virtualenv をインストールします。

Python 依存関係

Android で依存関係を管理する推奨の方法は、ビルド構成を使用してテスト、Python、およびそれらの依存関係を実行可能ファイルとしてパッケージ化することです。SDV テスト リポジトリでは、このアプローチに従う必要があります。

SDV テスト フレームワーク ライブラリは、デフォルトで次の依存関係を提供します。

  • mobly
  • absl-py テストでパラメータ化を使用するために必要です。
  • pexpect インタラクティブ コマンド機能に必要です。
  • ptyprocess インタラクティブ コマンド機能に必要です。

テスト固有の依存関係が必要な場合は、テストの Android.bp ファイルに含めます。

python_test_host {
    …
    libs: [
        "<DEPENDENCY1",
        "<DEPENDENCY2",
        …
    ],
    …
}

システムテストの種類

SDV テスト フレームワークを使用してシステムテストを作成します。フレームワークは次のタイプを区別します。テストを正しく分類します。

  • サンプル テスト: SDV サンプル サービスを実行し、結果が想定される出力と一致することを確認します。
  • E2E テスト: SDV サンプル サービスを使用しないでください。
  • 長時間実行テスト: 長い実行期間を想定して設計されています。
  • パフォーマンス テスト: perfetto ライブラリを使用します。
  • ハードウェア テスト: Cuttlefish(CF)ではなく、物理デバイスでのみ実行されるように設計されています。

テストの作成

フレームワークを使用して作成されたすべてのテストは、テスト リポジトリに配置する必要があります。テストの正確な場所は、テストのタイプによって異なります。

テストを構成する

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",
}

このテンプレートを使用する目的を明確に示し、延長された時間が必要な理由を説明するコメントを追加します(たとえば、テストで特定の時間が必要なアーティファクトをダウンロードする必要がある場合など)。

デバイスにファイルをプッシュする

次の手順では、atest 構成用にデバイスにファイルをプッシュする方法について説明します。

デバイスにファイルをプッシュする

このフレームワークは、atest 実行用のテンプレートの拡張をサポートしていません。そのため、デフォルトのテンプレートを完全に置き換え、デバイスに対応する target_preparer オプションを含む AndroidTest.xml ファイルを作成する必要があります。

  1. テンプレートの内容をコピーします。

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. {MODULE} をテストのモジュール名で更新します。

  3. 各デバイスに 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 構成が必要です。

  1. 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
  2. テストタイプに基づいて、対応する情報を追加します。

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 のテスト構成

<!-- Copyright 2025 Google LLC -->
<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" />

デバイスにファイルをプッシュする

次のセクションでは、CATBox を設定する際にデバイスにファイルをプッシュする方法について説明します。

デバイスにファイルをプッシュする

対応するデバイスにファイルを 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=device1name=device2 など)を追加します。

テスト実行

以下の手順は、動作する SDV 環境の設定が完了していることを前提としています。

環境を設定する

フレームワークは Cloud Virtual Device(CVD)インスタンスを起動しないため、テストを実行する前に起動する必要があります。

  1. 環境を設定して SDV ターゲットを起動します。

    . build/envsetup.sh
    lunch <TARGET>
    
  2. 最初の Cloud Virtual Device(CVD)インスタンスを起動します。

    cvd create --config=sdv_core_instance1
    
  3. 2 つ目の Cloud Virtual Device(CVD)インスタンス(マルチ VM テスト用)を起動します。

    cvd create --config=sdv_core_instance2
    
  4. 3 番目の Cloud Virtual Device(CVD)インスタンスを起動します(マルチ VM テストの場合)。

    cvd create --config=sdv_core_instance3
    

atest を実行する

atest <TestModuleName>

CATBox を実行する

これらのコマンドは、リポジトリのルート ディレクトリにいることを前提としています。

  1. CATBox をビルドする: m catbox
  2. (省略可)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:6520

2 つの 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:6521

3 つの 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