Android 自動化フレームワークを使用したアプリテストチュートリアル

⚡ スマートサマリー

Android アプリテストは、断片化されたデバイス環境全体でビルドを検証するもので、単体テスト、統合テスト、運用テスト、システムテストを、デバイス上またはJVM上で直接実行される自動化フレームワークと組み合わせて行います。

  • 🔘 なぜ重要なのか: Android 無数のデバイスとバージョンの組み合わせで動作するため、互換性の問題が発生する可能性はほぼ確実です。
  • ☑️ 4つのテストレベル: 単体テスト、統合テスト、運用テスト、システムテストはそれぞれ異なる種類の欠陥を検出する。
  • ✅ デバイス上のフレームワーク: その Android テストフレームワークは以下に基づいて構築されています JUnit および計装。
  • 🧪 JVMの代替案: ロボレクトリックの影 Android これらのクラスにより、スイートはデバイスやエミュレーターなしでJVM上で実行されます。
  • 🛠️ より幅広いツールセット: EspressoUI Automator および Appium 組み込みクラス以外の範囲もカバーする。
  • 📊 避けるべき誤解: エミュレータのみ、少数の端末、あるいは直前の予備的なテストでは、製品版に欠陥が生じる可能性がある。

Android アプリテストのチュートリアル(テストレベル、自動化フレームワーク、デバイスカバレッジを網羅)

Why Android テスト中?

Android 世界最大のオペレーティングシステムです。同時に、 Android 断片化されている: デバイスが山ほどあり、 Android アプリが互換性を持つ必要があるバージョン。

設計や実装にどれだけ時間を費やしても、ミスは避けられず、バグは必ず発生する。

Android テスト戦略

正しい Android テスト戦略には以下を含める必要があります。

  1. 単体テスト
  2. 統合テスト
  3. Opera試験
  4. システムテスト

単体テスト

単体テストとは、メソッドやクラスといったソースコードの最小単位を検証するために設計された一連のプログラムのことです。

その Android プラットフォームには、 JUnit 3.0フレームワーク。これは自動化のためのオープンソースフレームワークです。 単体テストそして、開発者が効果的な単体テストプログラムを作成できるようになります。

ユニットテストに加えて、ユーザーインターフェース(UI)テストがあります。これは、対象アプリケーションのUIコンポーネントを対象とし、デバイス上での一連のユーザー操作に対して正しい出力が返されることを確認します。

一般的なユーザー UI アクション Android タップ、入力、スワイプなどのアプリケーション

デバイス上でUIテストを実行する一般的な方法は Android セットアップ。しかし、これにはパフォーマンスの問題があります。 UI テストを実施するのに最適なツールの 1 つ Android is Robotium.

⚠️ バージョンノート: JUnit 3つのクラスなど インストルメンテーションTestCase API 24で非推奨になりました。現在のプロジェクトでは AndroidXテスト、 Espresso そしてUI Automator。 Robotium 2016年以降、新作はリリースされていない。

統合テスト

In 統合テストすべての単体テスト済みモジュールが結合され、検証されます。 Android これは多くの場合、サービス、アクティビティ、コンテンツプロバイダーなどのコンポーネントとの統合テストを行うことを意味します。

統合テストの種類 Android サービス、アクティビティ、コンテンツプロバイダーのテストを網羅

統合テストを実行するために多くのテストフレームワークが使用されています Androidトロイド、ロボレクトリック、 Robotium.

Opera国家試験

Opera機能テストまたは受け入れテストとも呼ばれる国家テストは、アプリケーションの完全性と正確性を確認する高レベルのテストです。

In Android, フィットネッセ は、対象アプリケーションに対して運用テストを簡単に実行できるようにするオープンソースのフレームワークです。

システムテスト

In システムテスト システムは全体としてテストされ、コンポーネント、ソフトウェア、ハードウェア間の相互作用がチェックされます。

In Android, システムテストには通常、次のものが含まれます。

  • GUIテスト
  • ユーザビリティテスト
  • パフォーマンステスト
  • ストレステスト

上記のリストでは、 性能試験 より焦点が当てられます。 次のようなツールを使用できます Trac概観 パフォーマンス テストを実施する Androidこのツールは、アプリケーションのデバッグとパフォーマンスのプロファイリングに役立ちます。 Traceview は現在非推奨となり、 CPU プロファイラ.

自動化 Android テスト

As Android 断片化されているため、多くのデバイスでのテストが必要であり、それには費用がかかります。自動化された Android 検査はこれらのコスト削減に役立つ。

自動化の利点 Android テスト

  • テストケースの実行時間を短縮する
  • 開発プロセスの生産性を向上
  • バグを早期に検出し、ソフトウェアのメンテナンスコストを節約します
  • 実装時のバグを迅速に発見して修正する
  • ソフトウェアの品質を保証する

以下の2つのフレームワークを学習します

  • Android テストフレームワーク
  • ロボエレクトリックテストフレームワーク

Android テストフレームワーク

標準的なテスト フレームワークの 1 つ Android アプリケーションは Android テストフレームワーク。 Android SDKツールは、そのアーキテクチャが3つの部分から構成されている。

  1. アプリケーションパッケージとは、テスト対象となるアプリケーションのことです。
  2. InstrumentationTestRunner は テストケース 対象アプリケーション上でテストケースを実行するランナー。これには以下が含まれます。
    • テストツール: テスト構築のためのSDKツール。IDEに統合されているか、コマンドラインから実行できます。
    • モンキーランナー: 制御するプログラムを作成するための API を提供するツール Android 外部のデバイスまたはエミュレータ Android コー​​ド。
  3. テストパッケージはテストプロジェクトごとに整理され、命名規則に従います。テスト対象アプリケーションのパッケージ名が「com.mydomain.myapp」の場合、テストパッケージは「com.mydomain.myapp.test」となります。テストパッケージには次の2つのオブジェクトが含まれます。
    • テストケースクラス: 対象アプリケーション上で実行されるテストメソッドを含める。
    • モックオブジェクト: テストケースのサンプル入力として使用されるモックデータを含めます。

Android テストケースクラス

Androidテストケースクラス図 JUnit 計測テストケース階層

  1. テストケースには以下が含まれます JUnit 実行するメソッド JUnit test
  2. TestSuiteは、一連のテストケースを実行するために使用されます。
  3. InstrumentationTestSuiteは、InstrumentationTestCaseを実行する前に、Instrumentationを注入するテストスイートです。
  4. InstrumentationTestRunnerは、対象アプリケーション上でテストケースを実行します。
  5. AndroidTestCase は JUnit アクティビティコンテキストなどのリソースにアクセスするためのメソッドを含むテストケース。
  6. ApplicationTestCaseは、制御された環境でアプリケーションクラスを検証します。
  7. InstrumentationTestCaseは、アプリケーションのUI出力など、特定の機能や動作を検証します。
  8. ActivityTestCaseは、アプリケーションアクティビティのテストをサポートする基本クラスです。
  9. ProviderTestCase は、単一の ContentProvider をテストするためのクラスです。
  10. ServiceTestCaseは、テスト環境でサービス クラスをテストし、サービスのライフサイクルをサポートします。
  11. SingleLaunchActivityTestCaseは、InstrumentationTestCaseを使用して単一のアクティビティをテストするために使用されます。
  12. ActivityUnitTestCase単一の単離された活性をテストするために使用されます。
  13. ActivityInstrumentationTestCase2拡張する JUnit TestCaseクラスは、計測機能を使用してターゲットアプリケーションに接続するため、GUIコンポーネントにアクセスしたり、キーストロークやタッチなどのUIイベントを送信したりできます。

以下はActivityInstrumentationTestCaseの例です。このテストケースは、電卓アプリケーションのUI操作を検証し、UI出力の正確性を確認します。

ActivityInstrumentationTestCase2 の例:電卓の UI 出力を検証する Android

ロボエレクトリック試験フレームワーク

テストに使用した Android デバイスやエミュレーターを使ったテストフレームワークの構築は困難です。テストの構築と実行には時間がかかり、開発にも多大な労力が必要です。この問題を解決するために、Robolectricテストフレームワークという選択肢があります。

Robolectric を使用すると、 Android デバイスやエミュレータを必要とせず、JVM上で直接テストを実行します。

Robolectric テスト ケース クラス

Robolectricは以下の動作を実行できます。

  • Shadowクラスを登録して作成する
  • の読み込みを中断します Android class
  • あなたが使用します Javaメソッド本体をオーバーライドするには、 Android class
  • シャドウオブジェクトをバインドする Android class

これにより、テスト対象のコードが Android 環境。

その他のテストフレームワーク

上記で挙げたテストフレームワーク以外にも、以下のような多くのフレームワークが存在します。

の神話 Android テスト

多くの企業が発展 Android テスト よくある誤解に基づいた戦略。このセクションでは、いくつかのよく知られた通説と現実について考察します。 Android テスト。

神話その1:すべて Android デバイスは同じなので、エミュレータでのテストで十分です

アプリケーションはエミュレーター上では完璧に動作するのに、実際のデバイスで実行するとクラッシュすることがある。

Android 実機での実行中に表示されるアプリケーションクラッシュダイアログ

エミュレーターだけではモバイル端末のテストには不十分です。アプリは実機でテストする必要があります。

神話その2:一般的なデバイスでのテストで十分

ハードウェア、画面サイズ、メモリ容量はデバイスによって異なるため、アプリケーションの表示もデバイスごとに異なります。様々なデバイス、OSバージョン、通信事業者ネットワーク、場所でテストを実施してください。

神話その3:発売直前の探索的テストだけで十分

  • ほとんどのテストでは、まずテストケースを設計してから実行しますが、探索的テストでは、設計と実行が同時に行われます。
  • 計画も準備も一切ないため、テスターは自分の好きなテストを実行する。一部の機能は繰り返しテストされる一方で、他の機能は全くテストされない。

神話その4:アプリケーションにバグがあっても、ユーザーは理解してくれるだろう

  • アプリケーションが正常に動作せず、バグがある場合、ユーザーはアプリをアンインストールします。
  • 品質の問題は、悪いレビューの最初の理由です Google 遊び方をすれば、評判を落とし、顧客の信頼を失うことになる。

したがって、適切な Android テスト戦略が策定済みです。

のベスト プラクティス Android テスト

  • アプリケーション開発者は、コードの作成と同時にテスト ケースを作成する必要があります。
  • すべてのテストケースは、ソースコードとともにバージョン管理システムに保存する必要があります。
  • 継続的インテグレーションを使用し、コードが変更されるたびにテストを実行する
  • エミュレータやルート化されたデバイスだけに頼るのは避け、検査ツールなどを使用して実際のハードウェアで結果を確認してください。 ウイオートマビューア

よくあるご質問

いいえ。現代のプロジェクトでは AndroidXテスト JUnit 4本、そして AndroidJUnitランナー。 JUnit ここで説明する 3 つのテストケース クラスは、API 24 で非推奨となり、レガシー スイートでのみ使用されています。

機械学習は、レイアウト変更後にロケーターを修復し、重複するクラッシュレポートとANRレポートをグループ化し、変更によってどのテストが壊れるかを予測して、コミットごとに実行されるテストスイートを短縮します。

Copilotは、記述されたシナリオに基づいて、共通のonViewパターンとcheckパターンを生成します。ビューの識別子やタイミングは認識できないため、まずは各提案を一度実行し、マッチャーを調整してください。

Espresso 独自のアプリケーション内でテストでき、高速かつ安定しています。UI Automatorはアプリケーションの境界を越えるため、通知、設定、システムダイアログに適しています。多くのスイートで両方が使用されています。

ActivityScenario API では AndroidXテストは、通常ActivityScenarioRuleを使用して実行されます。非推奨のテストケースクラスを拡張することなく、アクティビティを定義済みのライフサイクル状態を通して移動させます。

低価格帯、中価格帯、そして最近のフラッグシップモデルを2~3台揃えて始めてみましょう。 Android バージョンに加えてタブレットも用意します。追加のハードウェアを購入する代わりに、リリース前にデバイスクラウドの実行機能を追加します。

これらは、実際のデバイスではなく、ビルドマシンのJVM上でシャドウクラスを使用して実行されるため、パッケージング、インストール、エミュレーターの起動は不要です。そのため、あらゆるコミットで実用的に利用できます。

Googleの現在のテストライブラリセット。 JUnit および Truth 拡張機能、ActivityScenario、 Espresso また、UI Automatorは、デバイス、エミュレーター、およびRobolectric上で動作する1つの依存関係グループの背後にあります。