11

GUIテストにRobotiumを使用しているすべての人。

RobotiumでできるAndroidネイティブテストフレームワークではできないことを教えてください。Robotiumはブラックボックステストとして使用できることを知っているので、アプリケーションリソースについて知る必要はありません。ほかに何か?

4

3 に答える 3

17

Robotium

長所:

  • webViewsでハイブリッドアプリケーションをサポートします。
  • UIatomatorを使用して複雑なテストケースを作成する場合はいつでも、テストしたアプリケーションの一意のIDにテストをバインドできます。
  • UIatomatorではUiAutomatorTestCaseInstrumentationが使用されていますが、現在のアクティビティを呼び出して適切なアクティビティが読み込まれたことを確認することはできません。Wi-Fiまたはサウンドテストのために接続マネージャーまたはオーディオマネージャーを呼び出すことはできません。Robotiumでは、このような宝石を簡単に呼び出すことができ、テストの効率が大幅に向上します。
  • オープンソースプロジェクトなので、必要に応じてツールを変更できます

短所:

  • android:processタグがさまざまなアクティビティに使用されるマルチプロセスアプリケーションをテストする可能性はありません。

サンプルコード:

RobotiumAPIの例

UIautomator

長所:

  • テストケースは、テストされたアプリケーションが機能するプロセスから独立しています。したがって、追加のライブラリが使用されている場所で使用したり、他のプロセスでアクティビティを実行したりすることもできます。テストで複数のアプリケーションを切り替える必要がある場合にも役立ちます。

短所:

  • Androidバージョン4.1以降でのみ動作します!

  • ui-objectインスタンスを取得するときにソースIDを使用することはできません。つまり、1つのレイアウトでアプリケーション構造が変更された場合、テストをリファクタリングする必要があります(この問題は、各ui要素にタグを使用することで解決できます)

  • 現在のアクティビティまたはインストルメンテーションを取得できません。つまり、テストの開発には制限があり、テストにAndroidのAPIメソッドの多くを使用していません。

  • デバッグが難しいため、テストをすばやく構築して開始し、出力を確認するためのスクリプトが必要です。

階層ビューア:

UIautomatorを操作するためのツール

これらのツールはどちらも優れていると思います。テスト中にアプリケーションを切り替える可能性は間違いなく素晴らしいです。ニーズに応じてツールを選択する必要があります。Robotiumは、アプリケーションを切り替える必要がないテストにおすすめします。これは、Android APIを使用して、webviewおよびmilti-process内のWebページのテストもカバーできる短いコードで柔軟でスマートなテストを作成するための簡単な方法と機会があるためです。アプリケーションは非常に珍しいです。

于 2013-05-04T15:26:12.503 に答える
7

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);
        }
于 2012-11-04T19:45:29.593 に答える
3

Androidにネイティブなインストルメンテーションフレームワーク上でrobotiumを使用することにマイナス面はありません。これは、robotiumを使用する場合でも、robotiumを使用せずに実行できるすべてのことを実行できますが、すでに多くの便利な機能にアクセスできるためです。

他にもAndroid自動化フレームワークがありますが、それは間違いなく一見の価値があります。Webビューにコードがある場合、robotiumが実際に失望する場所であるため、これらは特に役立ちます。

https://github.com/calabash/calabash-android

https://github.com/calabash-driver/calabash-driver

http://testdroid.com/

于 2012-11-05T11:28:15.290 に答える