4

Robotiumを使用して、単体テスト プロジェクトでいくつかの簡単な UI タスクを実行しています。Solo が大幅に遅いことに気付きましたが、その理由はわかりません。私はそれに慣れていません。

このコードは Robotium で実行されます。

    solo.clearEditText(editTextLogin);
    solo.clearEditText(editTextSenha);
    solo.enterText(editTextLogin, "tecnico@mail.com");
    solo.enterText(editTextSenha, "12345");
    solo.clickOnButton(0);

これはネイティブ コードで行われます。

m_Activity.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            editTextLogin.setText("tecnico@mail.com");
            editTextSenha.setText("12345");
            loginButton.performClick();
        }
    });

Robotium で実行されたコードは、2 番目のコードに比べてはるかに低速です。Robotium が実際に機械的にすべての処理を行っているのに対し、ネイティブ コードはオブジェクトに値を設定しているだけであることは容易に理解できますが、これで違いが説明できます。真のパフォーマンス向上を実現する方法。

間違いをお詫び申し上げます。

4

3 に答える 3

3

robotiumのソースコードをダウンロードしてデバッグする必要があります。内部ではさらに多くのことが行われていることがわかります。たとえば、clickonbuttonのスニペットは次のとおりです。

public <T extends TextView> void clickOn(Class<T> viewClass, String nameRegex) {
    final Pattern pattern = Pattern.compile(nameRegex);
    waiter.waitForText(nameRegex, 0, TIMEOUT, true, true);
    ArrayList<T> views = viewFetcher.getCurrentViews(viewClass);
    views = RobotiumUtils.removeInvisibleViews(views);
    T viewToClick = null;
    for(T view : views){
        if(pattern.matcher(view.getText().toString()).matches()){
            viewToClick = view;
            if(viewToClick.isShown())
                break;
        }
    }
    if (viewToClick != null) {
        clickOnScreen(viewToClick);
    } else if (scroller.scroll(Scroller.DOWN)){
        clickOn(viewClass, nameRegex);
    }else {
        for (T view : views) {
            Log.d(LOG_TAG, nameRegex + " not found. Have found: " + view.getText());
        }
        Assert.assertTrue(viewClass.getSimpleName() + " with the text: " + nameRegex + " is not found!", false);
    }
}
于 2011-08-16T23:48:25.577 に答える
0

あなたがテストのパフォーマンスについてとても心配していることは私の注意を喚起します。

Android UI のテスト方法は非常に複雑で、従うのが難しいテスト ケースが残ります。Robotium はパフォーマンスに重点を置いているのではなく、開発者が API にアクセスできるようにして、テストの記述と読み取りを容易にすることに重点を置いています。

テストを実行するための最もパフォーマンスの高い方法は何かを判断しようとはしません。コーディングが簡単で、後で必要に応じてネイティブに移植するのが簡単なので、Robotiumでそれを行います。

私の個人的なケースでは、Robotium がテストを遅くすることは気にしません。それがネイティブ UI テスト ツールの使用を避けるために支払わなければならない代償である場合、私はそれを受け入れます。

テストに時間がかかりすぎる場合は、いつでも CI で実行できます。

于 2011-08-27T13:39:25.770 に答える
0

私の使用経験と大きく異なるので、別の方法で試してみて solo.clickOnButton("String")くださいsolo.clickOnButton(index)。最初のものは多くの検索を行っているようです。

于 2011-11-21T08:26:37.503 に答える