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

Android 6 または Android 7 を搭載したデバイスでは、Android Enterprise(AE)テストハーネスを使用してデバイスのプロビジョニングをテストできます。これは、Android デバイスのエンタープライズ互換性を検証するためのテストスイートです。ハーネスには、サポートアプリ、テストケース、構成ファイル、および cts-tradefed 上に構築されたテストランナー(afw-test-tradefed)が含まれています。AE テストハーネスをセットアップする前に、デバイス管理のプロビジョニングを完了してください。

Android 8 以降を搭載したデバイスでは、AE テストハーネスの使用は非推奨です。

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

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

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

ソースをダウンロードするの手順に沿って、AE テストハーネスのソースコードをダウンロードします。AE テストハーネスのソースコードは ./test/AfwTestHarness プロジェクトにあります。ダウンロードする AE テストハーネスのバージョンはブランチ名によって決まります(各 Android プラットフォームにはそれぞれ異なる AE テストハーネスのバージョンがあります)。たとえば、Android 7.0 Nougat 用のブランチ名は 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-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 設定を構成します。有効な設定は分単位です。デバイスが対応する時間(分単位)であれば、任意に設定できます。