デバイスのプロビジョニングをテストする

Android Enterprise(AE)テストハーネスは、Android デバイスのエンタープライズ互換性を検証するためのテストスイートです。AE テストハーネスでは、cts-tradefed にサポートアプリ、テストケース、構成ファイル、テストランナー(afw-test-tradefed)がビルドされています。AE テストハーネスをセットアップして実行するには、デバイス管理のプロビジョニングを完了する必要があります。

注: AE テストハーネスのビルドと実行は、Android 互換性テストスイート(CTS)のビルドと実行に似ています。

多くのツール、ディレクトリ、ブランチ名には、AfW が付きます。Android for Work(AfW)は、Android のエンタープライズ機能の以前の名称です。

開発環境をセットアップする

AE テストハーネスの開発環境は Android OS に似ており、要件の手順に沿って開発マシンをセットアップする必要があります。

ソースコードをダウンロードする

ソースをダウンロードする手順に沿って、AE テストハーネスのソースコードをダウンロードします。AE テストハーネスのソースコードは ./test/AfwTestHarness プロジェクトにあります。ダウンロードする AE テストハーネスのバージョンはブランチ名によって決まります(各 Android プラットフォームにはそれぞれ異なる AE テストハーネスのバージョンがあります)。Android 7.0 の場合、ブランチ名は afw-test-harness-nougat-dev です。リポジトリを初期化し、このブランチのソースコードをダウンロードするには、次のコマンドを使用します。

    mkdir WORKING_DIRECTORY
    cd WORKING_DIRECTORY
    git config --global user.name "Your Name"
    git config --global user.email "you@example.com"
    repo init -u https://android.googlesource.com/platform/manifest -b afw-test-harness-nougat-dev
    repo sync -j24
    

別のバージョンのソースコードを調べるには、対応するタグを持つブランチを指定します。利用可能なブランチは次のとおりです。

ブランチ名 サポート対象の Android プラットフォーム
afw-test-harness-nougat-dev Android 7.0
afw-test-harness-2.1 Android 7.0
afw-test-harness-marshmallow-dev Android 6.0
afw-test-harness-1.5 Android 6.0

ハーネスのビルドに必要な他の依存関係プロジェクトもソースコードとともにダウンロードされます。

Android Studio で表示する

Android Studio でソースコードを表示、編集するには、以下の手順を実行します。

  1. 次のコマンドを実行します。
        make idegen
        development/tools/idegen/idegen.sh
        
  2. Android Studio で android.ipr を開きます。

AE テストハーネスのソースコードは test/AfwTestHarness にあります。

AE テストハーネスを構成する

test/AfwTestHarness/afw-test.props を構成することで、テストハーネスをカスタマイズできます。ハーネスを正常に実行するには、以下の手順を実行します。

  1. afw-test.props で次のプロパティを使用して、Wi-Fi ネットワークを設定します。
        wifi_ssid
        wifi_password (optional)
        wifi_security_type (optional, available options are: NONE, WEP or WPA)
        
  2. Device Policy Controller として Test DPC にバインドされているドメインから少なくとも 1 つのアカウントを取得します。afw-test.props で次のプロパティを使用して、詳細を指定します。
        work_account_username
        work_account_password
        

    AE テストハーネスは、Test DPC を使用してプロビジョニング フローをテストするため、テストハーネスを実行するには、アカウントが Test DPC にバインドされている必要があります

AE テストハーネスをビルドする

次のコマンドでビルド構成を初期化します。

    source build/envsetup.sh
    lunch
    

デバイスタイプを選択して Enter キーを押します。

次のコマンドでハーネスを作成します。

    make afw-test-harness -j32
    

これにより、テストハーネスを実行するために必要なすべてのバイナリ、構成ファイル、ツールを含むディレクトリ(out/host/linux-x86/afw-th/android-cts)が作成されます。このディレクトリはファイル(out/host/linux-x86/afw-th/android-afw-test-harness.zip)にも圧縮されており、配布用に使用できます。

AE テストハーネスを実行する

AE テストハーネスを実行する手順は次のとおりです。

  1. ビルド環境で、次のコマンドを使用してテストランナーを起動します。
        afw-test-tradefed
        
    これにより、cts-tf コンソールが起動し、out/host/linux-x86/afw-th/android-cts からテストプラン、テストケース、afw-test.props が読み込まれます。
  2. android-afw-test-harness.zip を解凍したフォルダから、次のコマンドでテストランナーを起動します。
        cts-tf> ./android‐cts/tools/afw-test‐tradefed
        
    これにより、テストプラン、テストケース、afw-test.propsandroid-cts ディレクトリから読み込まれます。./android‐cts/repository/testcases/afw-test.props に仕事用アカウントと Wi-Fi 設定が指定されていることを確認します。
  3. テストプランを実行します。各テストプランは、AfwTestHarness/tests テスト パッケージ ディレクトリの一連のテスト パッケージを含む XML ファイルです。一般的なテストプランには以下が含まれます。
    • afw-userdebug-build: userdebug ビルドを必要とするすべてのテスト パッケージが含まれます。
    • afw-user-build: ユーザービルドで実行されますが、初期セットアップや USB デバッグの有効化など、テストデバイスを適切に設定する必要があります。

    テストプランの afw-userdebug-build を実行するには、次のコマンドを使用します。
        cts-tf> run cts --plan afw-userdebug-build
        
    すべてのテストプランを表示するには、list plans コマンドを使用します。プランの定義を表示するには、out/host/linux-x86/afw-th/android-cts/repository/plans を参照します。
  4. テスト パッケージを実行します。単一のテスト パッケージを実行するには、次のコマンドを使用します。
        cts-tf> run cts --package com.android.afwtest.NfcProvisioning
        
    すべてのパッケージを表示するには、list packages コマンドを使用します。その他のオプションを表示するには、run cts --help コマンドを使用します。

AE テストハーネスのデバッグを行う

afw-test-tradefed コンソール(cts-tf)ですべてのコマンドを実行します。このコンソールは afw-test-tradefed を実行することで起動できます。

  • -l INFO または -l DEBUG フラグを指定すると、詳細情報を表示できます。次に例を示します。
        cts-tf> run cts ‐‐plan afw-userdebug-build -l DEBUG
        
  • -s フラグを指定すると、特定のデバイスでテストハーネスを実行できます。次に例を示します。
        cts-tf> run cts ‐‐plan afw-userdebug-build -l DEBUG -s device_sn
        
  • --all-devices フラグを指定すると、接続されているすべてのデバイスでテストハーネスを実行できます。次に例を示します。
        cts-tf> run cts ‐‐plan afw-userdebug-build -l DEBUG --all-devices
        
  • list invocations または l i を使用して、現在の実行状況を表示します。
  • list results または l r を使用して、過去のテスト実行の概要を表示します。
  • help list を使用して、その他の list コマンドを表示します。
  • afwtest を使用し、フィルタを適用して、リアルタイムで logcat を監視します。その後、別のターミナルを開き、adb logcat | grep afwtest を使用して logcat を開始します。テストが完了したら、以下を行います。
    • out/host/linux-x86/afw-th/android-cts/repository/logs/start-time のログを確認します。デバイスの完全な logcat とホストログ(afw-test-tradefed ログ)が別々の zip ファイルに保存されます。
    • デバイスの logcat で afwtest を検索して関連情報を探します。例: zless out/host/linux-x86/afw-th/android-cts/repository/logs/start-time/device_logcat_random-number.zip | grep afwtest
    • afw-test-tradefed の完全なログを表示するには、次のコマンドを使用します。zless out/host/linux-x86/afw-th/android-cts/repository/logs/start-time/host_log_random-number.zip
  • テスト パッケージは、すべての UI ページを対象として、各ページのデバイスの logcat ファイルにナビゲーション ログを記録し、エンタープライズ プロビジョニング フローを自動化します。例: afwtest.AutomationDriver: Navigating:com.android.afwtest.uiautomator.pages.gms.AddAccountPage
    テスト パッケージ com.android.afwtest.NfcProvisioning の UI ページには以下が含まれます。
    • com.android.afwtest.uiautomator.pages.managedprovisioning.NfcProvisioningPage
    • com.android.afwtest.uiautomator.pages.PageSkipper
    • com.android.afwtest.uiautomator.pages.LandingPage
  • プロビジョニング プロセス中にテストが失敗した場合、logcat には次のようなエラーが記録されます。
        TestRunner: java.lang.RuntimeException: Failed to load page: com.android.afwtest.uiautomator.pages.packageinstaller.DeviceAccessPage
        
    これは通常、前の UI ページや読み込みに失敗したページのエラーが原因で発生します。logcat でこのエラーの前に発生した他のエラー メッセージを探し、次のプロビジョニング フローに沿ってそのエラーを再現します。
  • テスト パッケージが失敗した場合:
    • スクリーンショットは out/host/linux-x86/afw-th/android-cts/repository/logs/start-time に保存されます(ファイル名の構文: screenshot-test_test_class_full_name_test_case_name-random_number.png)。この情報はホストログにも記録されます。
    • バグレポートは out/host/linux-x86/afw-th/android-cts/repository/logs/start-time に保存されます(ファイル名: bug-test_class_full_name_test_case_name-random_number.zip)。
  • すべてのテスト パッケージが実行されると、スクリーンショットが取得され、out/host/linux-x86/afw-th/android-cts/repository/logs/start-time に保存されます(ファイル名: screenshot-random_number.png)。この情報はホストログにも記録されます。

よくある質問

以下で回答されていない質問については、afw-testharness-support@google.com にお問い合わせください。

ユーザービルドでフラッシュしたデバイスでテストプラン afw-userdebug-build を実行できますか?

いいえ。テストプラン afw-userdebug-build のテスト パッケージは、実際のテストフローを実行する前にテストデバイスを出荷時の設定にリセットするため、adb デバッグを自動的に有効にする必要があります。ユーザービルドでは、開発者向けオプションで手動で設定を変更することでのみ、adb デバッグを有効にできます。

userdebug ビルドでフラッシュしたデバイスでテストプラン afw-user-build を実行できますか?

はい。ただし、このテストプランはユーザービルドで実行することをおすすめします。

UI の読み込みに時間がかかり、テストに失敗することがあります。この問題を解決するにはどうすればよいですか?

./android-cts/repository/testcases/afw-test.propstimeout_size を設定します。有効な設定は、S、M、L、XL、XXL です。

プロビジョニングの完了後、インストールされた初期セットアップ(設定ウィザードなど)でカスタマイズされた UI(利用規約など)が表示されるため、テスト パッケージ com.android.afwtest.NfcProvisioning(または SuwDoProvisioning)がデバイスで失敗します。どのようにすれば、カスタマイズされた UI をスキップできますか?

プロビジョニング プロセス後には、必ず最小限の UI が存在します。Skip、Finish、Done、Accept、Agree、Next、Continue、Proceed など、意味のあるテキストを含むボタンやコンテンツ説明が UI に存在する場合、テストハーネスはその UI を自動でスキップします。代わりに、afw-test.props でボタンを定義して、UI をスキップするようにテストハーネスを設定することもできます。例:

    oem_widgets=your_btn
    your_btn.text=your_customized_text
    your_btn.package=your_package
    your_btn.action=click
    

複数のウィジェットを定義するには、カンマで区切ります。

テスト パッケージ com.android.afwtest.NfcProvisioning(または SuwDoProvisioning)が失敗し、最後の UI 画面が「アカウントの確認」になります。この問題が発生する理由は何ですか?また、どのようにすればテストデバイスを復元できますか?

このエラーは、以前のテスト パッケージがテストの終了時に出荷時設定へのリセットの保護を消去できなかったために発生します。デバイスのロックを解除するには、アカウントを手動で入力する必要があります。

デバイスの出荷時設定へのリセットに時間がかかります。出荷時設定へのリセットのタイムアウトを延長できますか?

はい。afw-test.propsfactory_reset_timeout_min で設定できます。有効な設定は分単位です。デバイスが対応する時間(分単位)であれば、任意に設定できます。