11

每个人都使用 Robotium 进行 GUI 测试。

你能告诉我什么Android原生测试框架不能做Robotium能做的吗?据我所知,Robotium 可以用作黑盒测试,所以我不需要了解应用程序资源。还有什么?

4

3 回答 3

17

机器人馆

优点:

  • 支持带有 webViews 的混合应用程序。
  • 每当使用 UIatomator 编写复杂的测试用例时,您都可以将测试绑定到被测应用程序的唯一 ID,这需要您做大量工作
  • 在 UIatomator 中使用了 UiAutomatorTestCase Instrumentation,它不能让您调用当前活动并检查是否加载了适当的活动,您不能调用连接或音频管理器进行 wi-fi 或声音测试。在 Robotium 中,您可以轻松调用此类 gem,从而大大提高测试效率
  • 开源项目,因此您可以根据需要修改工具

缺点:

  • 无法测试android:process标签用于不同活动的多进程应用程序。

示例代码:

机器人 API 示例

UIautomator

优点:

  • 测试用例独立于被测应用程序工作的过程。因此,它可以用于使用附加库或在其他进程中运行活动的地方,如果测试需要在多个应用程序之间切换,也很有用。

缺点:

  • 仅适用于 Android 4.1 或更高版本!

  • 获取 ui-object 实例时不能使用源 ID。这意味着如果应用程序结构在一个布局上发生更改,您需要重构您的测试(这个问题可以通过为每个 ui 元素使用标签来解决)

  • 您无法获取当前活动或仪器。这意味着您在测试开发方面受到限制,并且没有使用许多 android 的 api 方法进行测试。

  • 难以调试,您需要有脚本来快速构建和启动测试并查看输出

层次结构查看器:

使用 UIautomator 的工具

我认为这两个工具都很好,在测试期间在应用程序之间切换的可能性肯定很棒。您应该根据需要选择工具。我建议将 Robotium 用于不需要在应用程序之间切换的测试,因为它具有简单的方法和机会,可以使用 Android API 以简短的代码编写灵活和智能的测试,甚至可以覆盖 webview 和 milti-process 中的网页测试应用程序非常不寻常。

于 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时,你仍然可以在没有它的情况下做任何你能做的事情,但你也可以使用很多有用的功能。

还有其他一些 android 自动化框架,但绝对值得一看。如果您在 Web 视图中有任何代码,这些代码将特别有用,因为这是 robotsium 真正让自己失望的地方。

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

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

http://testdroid.com/

于 2012-11-05T11:28:15.290 回答