GUIテストにRobotiumを使用しているすべての人。
RobotiumでできるAndroidネイティブテストフレームワークではできないことを教えてください。Robotiumはブラックボックステストとして使用できることを知っているので、アプリケーションリソースについて知る必要はありません。ほかに何か?
GUIテストにRobotiumを使用しているすべての人。
RobotiumでできるAndroidネイティブテストフレームワークではできないことを教えてください。Robotiumはブラックボックステストとして使用できることを知っているので、アプリケーションリソースについて知る必要はありません。ほかに何か?
長所:
短所:
android:process
タグがさまざまなアクティビティに使用されるマルチプロセスアプリケーションをテストする可能性はありません。サンプルコード:
長所:
短所:
Androidバージョン4.1以降でのみ動作します!
ui-objectインスタンスを取得するときにソースIDを使用することはできません。つまり、1つのレイアウトでアプリケーション構造が変更された場合、テストをリファクタリングする必要があります(この問題は、各ui要素にタグを使用することで解決できます)
現在のアクティビティまたはインストルメンテーションを取得できません。つまり、テストの開発には制限があり、テストにAndroidのAPIメソッドの多くを使用していません。
デバッグが難しいため、テストをすばやく構築して開始し、出力を確認するためのスクリプトが必要です。
階層ビューア:
これらのツールはどちらも優れていると思います。テスト中にアプリケーションを切り替える可能性は間違いなく素晴らしいです。ニーズに応じてツールを選択する必要があります。Robotiumは、アプリケーションを切り替える必要がないテストにおすすめします。これは、Android APIを使用して、webviewおよびmilti-process内のWebページのテストもカバーできる短いコードで柔軟でスマートなテストを作成するための簡単な方法と機会があるためです。アプリケーションは非常に珍しいです。
Robotiumとネイティブツールの違いは、Robotiumを使用するとテストを作成するのが非常に簡単であるという事実です。基本的には、Soloインスタンスオブジェクトからポイントアンドクリックします。
ここでは、JARファイルとサンプルプロジェクトをダウンロードして、自分でテストできます。
アップデート
例として、テキストの編集、スピナー、およびスピナーオプションをクリックすると表示されるポップアップダイアログを使用してアクティビティをテストしています。ここで、他の方法では、ポップアップダイアログのフィールドに入力するのは非常に面倒であることに注意してください。
テストクラスとRobotiumの初期化を宣言する方法は次のとおりです
import com.jayway.android.robotium.solo.Solo; //Using Robotium
//Robotium uses ActivityInstrumentationTestCase2.
//Note here the use of the template
public class AddNewQuestionTests extends
ActivityInstrumentationTestCase2<AddNewQuestion> {
public AddNewQuestionTests(Class<AddNewQuestion> name) {
super(name);
}
public AddNewQuestionTests() {
super(AddNewQuestion.class);
}
private Solo solo;
protected void setUp() throws Exception {
super.setUp();
//Initialize Solo with the instrumentation and the activity under test
solo = new Solo(getInstrumentation(), getActivity());
}
そしてここにテスト方法があります:
public void testHappyPathAddScaleQuestion() {
// Type question title
solo.clickOnEditText(0); //find the EditText, and click it
solo.enterText((EditText) getActivity().findViewById(
//find the EditText, and put some string
R.id.activity_add_new_question_editText_question_title),
"Question title scale ");
// Type question description
solo.clickOnEditText(1);
solo.enterText((EditText) getActivity().findViewById(
R.id.activity_add_new_question_editText_question_description),
"Question description scale");
// Type the question
solo.clickOnEditText(2);
solo.enterText((EditText) getActivity().findViewById(
R.id.activity_add_new_question_editText_question),
"Question scale");
// Click the spinner and then the "Scale" question type
//Press an spinner option
solo.pressSpinnerItem(0, 4);
//Wait for the popup dialog title to show up. When robotium reads it, continue working solo.waitForText(getActivity().getResources().getString(R.string.activity_add_new_question_scale_selection_dialog_message));
// Type minimum and maximum ranges
solo.clickOnEditText(0);
solo.searchText(getActivity().getResources().getString(R.string.activity_add_new_question_maximum_value_hint));
solo.clickOnView(solo.getCurrentEditTexts().get(0));
solo.enterText(0, "34");
solo.clickOnView(solo.getCurrentEditTexts().get(0));
solo.enterText(1, "55");
// Click ok to close the dialog
solo.clickOnButton(getActivity().getResources().getString(R.string.OK));
// Click ok to get an ok message
solo.clickOnButton(getActivity().getResources().getString(R.string.OK));
//Wait for the ok toast message
boolean flagOKDatabase=solo.waitForText(getActivity().getResources().getString(R.string.database_success_storing_data),1,120);
assertEquals("Something wrong happened with the database", true, flagOKDatabase);
}
Androidにネイティブなインストルメンテーションフレームワーク上でrobotiumを使用することにマイナス面はありません。これは、robotiumを使用する場合でも、robotiumを使用せずに実行できるすべてのことを実行できますが、すでに多くの便利な機能にアクセスできるためです。
他にもAndroid自動化フレームワークがありますが、それは間違いなく一見の価値があります。Webビューにコードがある場合、robotiumが実際に失望する場所であるため、これらは特に役立ちます。
https://github.com/calabash/calabash-android