Android: Robotium против среды тестирования Android

Все, кто использует Robotium для тестирования GUI.

Можете ли вы сказать мне, что собственный тестовый фреймворк Android не может сделать, а Robotium может? Насколько я знаю, Robotium можно использовать в качестве тестирования черного ящика, поэтому мне не нужно знать о ресурсах приложения. Что еще?


person Jim    schedule 04.11.2012    source источник


Ответы (3)


Отличие 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);
        }
person MigDus    schedule 04.11.2012

Роботиум

за:

  • поддержка гибридных приложений с webViews.
  • вы можете привязать свой тест к уникальным идентификаторам тестируемого приложения, когда с помощью UIatomator для написания сложных тестовых случаев вам потребуется большой объем работы.
  • в UIatomator используется инструментарий UiAutomatorTestCase, который не дает вам возможности вызывать текущую активность и проверять, загружена ли соответствующая, вы не можете вызывать менеджеры подключения или аудио для тестов wi-fi или звука. В Robotium вы можете легко вызвать такие гемы, что значительно повысит эффективность ваших тестов.
  • Проект с открытым исходным кодом, так что вы можете модифицировать инструмент под свои нужды

минусы:

  • Нет возможности протестировать многопроцессорное приложение, где тег android:process используется для разных действий.

пример кода:

Пример API Robotium

UIautomator

за:

  • Тестовый случай не зависит от процесса, в котором работает тестируемое приложение. Таким образом, его можно использовать в местах, где используются дополнительные библиотеки или активность запускается в другом процессе, что также полезно, если для теста необходимо переключение между несколькими приложениями.

минусы:

  • Работает только на Android версии 4.1 и выше!

  • Вы не можете использовать исходные идентификаторы при получении экземпляров UI-объекта. Это означает, что если структура приложения изменилась на одном макете, вам необходимо провести рефакторинг вашего теста (эту проблему можно решить, используя теги для каждого элемента пользовательского интерфейса).

  • Вы не можете получить текущую активность или инструменты. Это означает, что вы ограничены в разработке своих тестов и не использовали многие методы Android API для своих тестов.

  • Трудно отлаживать, вам нужен скрипт для быстрого создания и запуска теста и просмотра вывода.

Просмотр иерархии:

Инструмент для работы с UIautomator

Я думаю, что оба этих инструмента хороши, и, безусловно, возможность переключаться между приложениями во время теста просто потрясающая. Вы должны выбрать инструмент в зависимости от ваших потребностей. Я предлагаю Robotium для тестов, где вам не нужно переключаться между приложениями, потому что у него есть простые методы и возможность использовать Android API для написания гибких и умных тестов в коротком коде, которые могут охватывать даже тестирование веб-страницы внутри webview и milti-процесса приложения очень необычные.

person Gennadiy Ryabkin    schedule 04.05.2013

Нет никаких недостатков в использовании роботиума по сравнению с инструментальной средой, родной для Android. Это потому, что при использовании robotium вы по-прежнему можете делать все, что могли бы сделать без него, но у вас уже есть доступ ко многим полезным функциям.

Существуют и другие фреймворки автоматизации Android, на которые определенно стоит обратить внимание. Если у вас есть какой-либо код в веб-представлении, это особенно полезно, поскольку именно здесь роботиум действительно подводит себя.

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

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

http://testdroid.com/

person Paul Harris    schedule 05.11.2012