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 でソースコードを表示、編集する手順は次のとおりです。
- 次のコマンドを実行します。
make idegen
development/tools/idegen/idegen.sh
- Android Studio で
android.ipr
を開きます。
AE テストハーネスのソースコードは test/AfwTestHarness
にあります。
AE テストハーネスを構成する
test/AfwTestHarness/afw-test.props
を構成することで、ハーネスをカスタマイズできます。ハーネスを正常に実行する手順は以下のとおりです。
afw-test.props
で次のプロパティを使用して、Wi-Fi ネットワークを構成します。wifi_ssid wifi_password (optional) wifi_security_type (optional, available options are: NONE, WEP or WPA)
- 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 テストハーネスを実行する手順は次のとおりです。
- ビルド環境で、次のコマンドを使用してテストランナーを起動します。
これにより、afw-test-tradefed
cts-tf
コンソールが起動し、out/host/linux-x86/afw-th/android-cts
からテストプラン、テストケース、afw-test.props
が読み込まれます。 android-afw-test-harness.zip
を解凍したフォルダから、次のコマンドを使用してテストランナーを起動します。 これにより、テストプラン、テストケース、cts-tf> ./android‐cts/tools/afw-test‐tradefed
afw-test.props
がandroid-cts
ディレクトリから読み込まれます。./android‐cts/repository/testcases/afw-test.props
に仕事用アカウントと Wi-Fi 構成が指定されていることを確認します。- テストプランを実行します。各テストプランは、
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
を参照します。
- テスト パッケージを実行します。単一のテスト パッケージを実行するには、次のコマンドを使用します。
すべてのパッケージを表示するには、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 に次のようなエラーが記録されます。
これは通常、前の UI ページまたは読み込みに失敗したページのエラーが原因で発生します。logcat でこのエラーの前に発生した他のエラー メッセージを探し、次のプロビジョニング フローに沿ってそのエラーを再現します。TestRunner: java.lang.RuntimeException: Failed to load page: com.android.afwtest.uiautomator.pages.packageinstaller.DeviceAccessPage
- テスト パッケージが失敗した場合:
- スクリーンショットは
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.props
で timeout_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.props
で factory_reset_timeout_min
設定を構成します。有効な設定は分単位です。デバイスが対応する時間(分単位)であれば、任意に設定できます。