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 执行的代码要慢得多。我可以很容易地发现,Robotium 实际上是在机械地做所有事情,而本机代码只是为对象设置值,这可以解释差异,但我最好解释的问题是,何时使用 Robotium,它应该是什么方式,实现真正性能增益的方式。

我为任何错误道歉。

4

3 回答 3

3

您应该下载 robotsium 的源代码并通过它进行调试。你会看到引擎盖下还有很多事情要做。例如,这里有一个 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 回答