Robotium チュートリアル: Android テストフレームワークの例

⚡ スマートサマリー

Robotium オープンソースです Android ユーザーインターフェイスを介してネイティブアプリとハイブリッドアプリを駆動するテスト自動化フレームワークで、テスターが複数の機能、システム、および受け入れシナリオをスクリプト化できるようにします。 Android 活動。

  • 🔘 コアクラス: Soloは、すべてのクリック、検索、ドラッグ、アサーションメソッドを公開します Robotium テストケース呼び出し。
  • ☑️ ブラックボックス対応: テストは実行時にUIコンポーネントにバインドされるため、アプリケーションのソースコードに関する知識は最小限で済みます。
  • 4段階の手順: テスト仕様を設計し、テストプログラムを作成し、デバイス上で実行し、結果を収集する。
  • 🧪 実例: 完全なこんにちはAndroidテストクラスは、表示されているテキスト、現在のアクティビティ、およびスタートボタンをチェックします。
  • 🛠️ 2つの実行モード: IDEまたはターミナルから、adb shell am instrumentコマンドを使用してテストを実行します。
  • ⚙️ 現在の状態: Robotium 5.6.3 は最後のリリースなので、 Android プロジェクトでは通常、ペアリングまたは置き換え Espresso.

Robotium チュートリアル

何ですか Robotium?

Robotium あります Android ネイティブアプリケーションとハイブリッドアプリケーションのテストケースを自動化するテストフレームワーク。 Robotium開発者は、堅牢な自動 GUI テスト ケースを作成できます。 Android 開発者は、複数のアプリケーションにわたる機能テスト、システムテスト、および受け入れテストのシナリオを作成することもできます。 Android 活動。

Robotium テストフレームワーク

標準 Android テストフレームワークには、以下の制限事項があります。

  • 複数のアクティビティを処理できない
  • テスト実行のパフォーマンスが遅い
  • テストケースは複雑で実装が難しい

その Robotium フレームワークは、テストを実行するためのより良い選択肢です。 Android アプリケーション。

Robotium はオープンソースのフレームワークであり、 Android テストフレームワークを使用しています。 Robotium開発者は、堅牢な自動 GUI テスト ケースを作成できます。 Android さらに、開発者は複数のアプリケーションにわたる機能テスト、システムテスト、および受け入れテストのシナリオを作成できます。 Android 活動。

以下の表は、 Robotium 単純な計測フレームワークから。

の高度な機能 Robotium 標準と比較して Android インスツルメンテーションフレームワーク

の高度な機能 Robotium

Robotium テストケースクラス

Robotium テスト用の少数のクラスセットが同梱されており、記事の例ではレガシーをインポートしています。 com.jayway.android.robotium.solo パッケージ。これらのクラスは、複数のアクティビティにまたがるテストケースをサポートし、 Solo と統合されています ActivityInstrumentationTestCase2.

注意: 現在 Robotium リリースでは、より短いバージョンで同じクラスを公開します com.robotium.solo パッケージはそのままですが、Maven座標は com.jayway.android.robotium:robotium-solo実際にプロジェクトに追加するJARファイルのバージョンに合わせてインポート設定を調整してください。

下の図は、Soloクラスが計測テストケースの上にどのように配置されているかを示しています。

ActivityInstrumentationTestCase2 と統合された Solo クラス Robotium テストケース

統合 Robotium および ActivityInstrumentationTestCase2

テスターはアプリケーション設計の知識がなくてもテストケースを作成できるため、このアプローチは ブラックボックステストそれは、普通のものと比べて際立った利点です。 Android テストケースクラス。

使い方 Robotium

使用するには Robotium 自分で Android テストプロジェクトを実行するには、以下の手順に従ってください。

追加および使用に必要な手順 Robotium 内部 Android テストプロジェクト

使用方法 Robotium

品質を保証するために Android 申請は、以下の4段階の手順に従ってください。

  • テスト仕様を設計する
  • テストプログラムを開発する
  • 対象デバイス上でテストケースを実行します。
  • 検査結果を収集する

以下のフローチャートは、これら4つの段階を順番に並べたものです。

4段階のフローチャート Android アプリケーションテスト手順

Android アプリケーションテスト手順

ステップ1)設計テスト仕様

これは、アプリケーションをテストする最初のステップです。このステップでは、テスト対象を定義します。 Android アプリケーションには、UI、アクティビティ、コンポーネント、サービスなど、テストが必要な対象が多数存在します。対象を明確に定義することで、幅広いテストカバレッジを実現できます。

  • 実施すべきテストの種類(単体テスト、機能テスト、システムテスト)を計画する。
  • それぞれをデザインする テストケース 最大限のカバー範囲を維持しながらping テストケースの数が少ない。テストするコードが多いほど、バグを早期に発見できる可能性が高くなる。

ステップ2)テストプログラムを作成する

このセクションでは、 Android を使用したテストプログラム Android JUnit テストと Robotiumすでに開発済みであると仮定します Android Helloという名前のプログラムAndroidこのプログラムには、以下に説明する機能があります。

  • 画面に「Hello world!」というテキストを表示します。
  • 「こんにちは」と表示しますAndroid ユーザーが「スタート」ボタンを押したときに表示されるメッセージ。

以下のスクリーンショットは、テスト対象のアプリケーションがデバイス上で実行されている様子を示しています。

HelloAndroid テスト対象のアプリケーションに「Hello world」というテキストとスタートボタンが表示されている。

HelloAndroid

システム要件

  • その Android プラットフォームには、事前に統合された JUnit 3つのフレームワークとは ActivityInstrumentationTestCase2 構築します。
  • を作成するには Android テストプロジェクトから Eclipseお使いのマシンには動作確認が必要です Android SDKのインストール。
  • 最新版をインストール Android 固定された古いリリースではなく、プラットフォームSDKを使用する。

このウォークスルーのスクリーンショットは Eclipse この例が書かれた当時は標準的なツールチェーンだったADTプラグインを使用しました。 Eclipse ADTはサポートされなくなったため、最新のマシンでは ダウンロード Android Studio 代わりに、同じテストコードを再利用します。 Gradle モジュールを開きます。

  Robotium テストフレームワークをダウンロードしてください Robotium 図書館から Robotium プロジェクトページ.

作る Android テストプロジェクト

  • 「ファイル」→「新規作成」→「その他」をクリックします。
  • 選択する Android -> Android 下の図に示すようにテストプロジェクトを実行し、「次へ」を選択してください。

Eclipse 新しいプロジェクトウィザード Android テストプロジェクトが選択されました

新しいを作成します Android テストプロジェクト

テストプロジェクトの名前を記入してください。命名規則に従って、テストプロジェクトの名前は「Hello」とします。Androidテスト"。

Eclipse Helloという名前のテストプロジェクトとの対話Android命名規則に従ってテストを実行

命名規則に従ってテストプロジェクト名を追加します。

テスト対象のアプリケーションを選択してください。この場合は Hello です。Androidをクリックし、「完了」をクリックします。

Eclipse ウィザードのステップで「こんにちは」を選択Android テスト対象アプリケーションとして

テスト対象のアプリケーションを選択してください

テストスイートの作成

テスト仕様に基づいて、テストプログラムのテストスイートを作成します。さまざまな選択肢から選ぶことができます。 ソフトウェアテスト フレームワーク。このチュートリアルでは標準の Android テストフレームワーク ActivityInstrumentationTestCase2.テストするには Robotium、追加 Robotium ライブラリファイルを libs プロジェクトフォルダ内のディレクトリ。

テストケースは、複数のテストを実行するために使用するフィクスチャを定義します。テストケースを定義するには、以下のプログラム構造に従ってください。

  • TestCaseクラスのサブクラスを実装してください。
  • 照明器具の状態を格納するインスタンス変数を定義します。
  • setUp() メソッドをオーバーライドして、フィクスチャの状態を初期化します。
  • tearDown() メソッドをオーバーライドして、テスト後のクリーンアップを行います。

以下の図は、その構造をこれから作成するテストプログラムにマッピングしたものです。

の構造 Robotium セットアップ、テスト方法、およびティアダウンを示すテストプログラム

テストプログラムの構造

package com.example.helloandroid.test;

import com.example.helloandroid.HelloAndroid;
import com.jayway.android.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
import android.widget.TextView;

public class HelloAndroidTest extends ActivityInstrumentationTestCase2 <HelloAndroid> {
    
	private HelloAndroid mActivity;
	private TextView mView;
	private String resourceString;
	private Solo solo;
	
	public HelloAndroidTest () {
		// TODO Auto-generated constructor stub
		super("com.example.helloandroid",HelloAndroid.class);	
	}
	
	 @Override
	protected void setUp() throws Exception {
		// TODO Auto-generated method stub
	//	super.setUp();
		 
	 	mActivity = this.getActivity();
		solo = new Solo(getInstrumentation(),getActivity());
		mView = (TextView) mActivity.findViewById(com.example.helloandroid.R.id.textview2);
		resourceString = mActivity.getString(com.example.helloandroid.R.string.hello_world);
		
	}
	 
	 @Override
	protected void tearDown() throws Exception {
		// TODO Auto-generated method stub
		//super.tearDown();
		solo.finishOpenedActivities();
	}
	
	public void testPrecondition() {
		assertNotNull(mView);
	}
	
	/* test Target application contains a text display "Hello World!"*/
	public void testSearchText() {
		assertEquals(resourceString,(String) mView.getText());
	}
	
	/* test HelloAndroid Activity on target application is exist*/
	public void testCurrentActivity() throws Exception  {
    	solo.assertCurrentActivity("wrong activity", HelloAndroid.class);
    }
    
	/* test Application UI contains "Start" button */
	/* send event click button to target application */
    public void testSearchButton() throws Exception {
    	boolean found = solo.searchButton("Start");
    	solo.clickOnButton("Start");
    	assertTrue(found);
    }

	

}

テストケースの追加

  • テストスイートと同じパッケージ内に、TestCaseクラスを作成します。
  • 例えば、特定のアクティビティをテストするには、HelloAndroidActivityInstrumentationTestCase2 を拡張するテストケースを作成します。Android>.
  • そのクラス内で、テスターはgetActivity()メソッドを通じてテスト対象のアクティビティを取得します。
  • 「test + 元のメソッド名」という名前のメソッドを追加することで、アクティビティのテストを自由に作成できます。
  • テストメソッド内では、テスターは以下を使用できます。 Android JUnit 実際の値と期待値を比較する関数。これらのメソッドを以下に示します。

以下の表は、2つのフレームワークで最もよく使用されるアサーションおよびインタラクションの方法を一覧にしたものです。

例となるメソッド Robotium ソロクラスと Android テストフレームワーク

例として挙げた方法 Robotium Android テストフレームワーク

上記のテストスイートは、アプリケーションのGUIに「Hello World!」というテキストが表示され、「Start」という名前のボタンが含まれていることを検証します。

ステップ 3) テストを実行する

テストプログラムの作成が完了したら、以下の手順に従ってテストを実行してください。

  • 接続する Android 実機をPCに接続するか、実機がない場合はエミュレータを起動してください。
  • IDEでテストプロジェクトを右クリックし、[実行]を選択します。 Android 単体テスト。

以下のスクリーンショットは、IDEからテスト実行を開始した様子を示しています。

を起動する Robotium テストプログラムとして Android IDEからの単体テスト

テストプログラムを実行する

IDE からテストを実行する以外にも、コマンドラインから実行できます。このテストプログラムでは、テストパッケージは com.example.helloandroid.testLinuxターミナルで、以下のコマンドを使用して、そのパッケージ内のすべてのテストを実行します。

$ adb shell am instrument -w -e package com.example.helloandroid.test

ステップ4)テスト結果を取得する

テストの実行後、テスト結果を収集します。

このテストプログラムでは、4つのテストメソッドが実行されます。以下の実行結果では、すべてのテストケースが合格しました。

4つすべてを表示するテスト結果出力 Robotium テストケースが合格しました

すべてのテストケースが合格した場合のテスト結果出力

テストケースが失敗した場合、出力が表示され、どのテストケースが失敗したかが示されます。

テスト結果出力リスト Robotium 失敗したテストケース

テストケースが失敗した場合のテスト結果出力

ソースコード サンプル

この記事には、チュートリアルをより分かりやすく理解し、技術的な詳細を素早く把握するのに役立つソースコードの例が含まれています。

比較したい場合は Robotium この分野の他のオプションについては、以下を参照してください。 モバイルアプリケーションのテスト ガイド、 Appium チュートリアル そしてまとめ モバイル アプリ テスト ツール.

よくあるご質問

Robotium 5.6.3 は最後に公開されたリリースであり、アクティブな開発は数年前に終了しました。フレームワークはまだ動作し、アーティファクトはまだ Maven Central にありますが、新しい Android プロジェクトは通常選択する Espresso、その Google 維持します。

Robotium これは、実行時にウィジェットにバインドするブラックボックス型のフレームワークであり、ソースコードに関する知識はほとんど必要ありません。 Espresso is GoogleUIスレッドと同期し、アプリケーションコードへのアクセスを必要とするホワイトボックスツール。

Robotium 一度に 1 つのアプリケーションしか駆動できず、Flash や WebView 以外の Web コンテンツを確実に処理できず、オープンソース JAR には組み込みの記録機能がなく、非推奨の計測クラスに依存しているため、最新の Gradle ビルド。

宣言する androidTestImplementation 'com.jayway.android.robotium:robotium-solo:5.6.3' モジュールビルドファイルで、または robotium-solo JARlibs そして、それをファイル依存関係として参照します。

Yes. Robotium テストは通常​​の計測テストであり、同じAPKがエミュレーターまたは実機で実行されます。ジェスチャー、センサー、パフォーマンスのチェックでは、エミュレーターのタイミングと異なる場合があるため、実機の使用が推奨されます。

Robotium UI レベルでの機能、システム、ユーザー受け入れシナリオに適しています。JVM 上でより高速に実行されるユニットテストや、より広範なテストの代替となるものではありません。 ソフトウェアテストの種類 リリースにはまだ必要です。

機械学習は、レイアウト変更後も動作を維持する自己修復型ロケーター、レンダリングの不具合を検出する視覚的比較、および再実行をランク付けする不安定なテストの検出などに活用されています。このツールによってメンテナンスの手間は軽減されますが、どの動作が重要かを判断するのは依然として人間です。

GitHubコパイロット アクティビティクラスから、Soloのセットアップ、ティアダウン、およびアサーションメソッドをスキャフォールディングできます。 Revこの提案は、アプリが満たさないレガシーパッケージのインポートやアサーションを発生させる可能性があるため、慎重に検討してください。