Как Вы тестируете приложение Android через несколько Операций?

энергия и emacs, они - самые способные редакторы и были в течение достаточно долгого времени. Если Вы знаете тот действительно хорошо, я сомневаюсь, что Вы получите так много в процессе...

Однако это всегда - хорошая идея изучить, какой плагин, которые доступны начиная с нескольких новых плагинов, может сделать чудеса для производительности.

/Johan

79
задан Ollie C 4 April 2012 в 15:53
поделиться

5 ответов

Я чувствую себя немного неловко, отвечая на свой собственный вопрос о награде, но вот он ...

Я искал это везде и не мог поверить, что ответа нет опубликовано где угодно. Я подошел очень близко. Я определенно могу запустить тесты, охватывающие действия, но в моей реализации, похоже, есть некоторые проблемы с синхронизацией, когда тесты не всегда проходят надежно. Это единственный известный мне пример успешного тестирования нескольких действий. Надеюсь, мое извлечение и анонимизация не привели к ошибкам. Это упрощенный тест, в котором я ввожу имя пользователя и пароль для входа в систему, а затем наблюдаю, как правильное приветственное сообщение отображается в другом «приветственном» действии:

package com.mycompany;

import android.app.*;
import android.content.*;
import android.test.*;
import android.test.suitebuilder.annotation.*;
import android.util.*;
import android.view.*;
import android.widget.*;

import static org.hamcrest.core.Is.*;
import static org.hamcrest.core.IsNull.*;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.junit.Assert.*;
import static com.mycompany.R.id.*;

public class LoginTests extends InstrumentationTestCase {

   @MediumTest
   public void testAValidUserCanLogIn() {

      Instrumentation instrumentation = getInstrumentation();

      // Register we are interested in the authentication activiry...
      Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(AuthenticateActivity.class.getName(), null, false);

      // Start the authentication activity as the first activity...
      Intent intent = new Intent(Intent.ACTION_MAIN);
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      intent.setClassName(instrumentation.getTargetContext(), AuthenticateActivity.class.getName());
      instrumentation.startActivitySync(intent);

      // Wait for it to start...
      Activity currentActivity = getInstrumentation().waitForMonitorWithTimeout(monitor, 5);
      assertThat(currentActivity, is(notNullValue()));

      // Type into the username field...
      View currentView = currentActivity.findViewById(username_field);
      assertThat(currentView, is(notNullValue()));
      assertThat(currentView, instanceOf(EditText.class));
      TouchUtils.clickView(this, currentView);
      instrumentation.sendStringSync("MyUsername");

      // Type into the password field...
      currentView = currentActivity.findViewById(password_field);
      assertThat(currentView, is(notNullValue()));
      assertThat(currentView, instanceOf(EditText.class));
      TouchUtils.clickView(this, currentView);
      instrumentation.sendStringSync("MyPassword");

      // Register we are interested in the welcome activity...
      // this has to be done before we do something that will send us to that
      // activity...
      instrumentation.removeMonitor(monitor);
      monitor = instrumentation.addMonitor(WelcomeActivity.class.getName(), null, false);

      // Click the login button...
      currentView = currentActivity.findViewById(login_button;
      assertThat(currentView, is(notNullValue()));
      assertThat(currentView, instanceOf(Button.class));
      TouchUtils.clickView(this, currentView);

      // Wait for the welcome page to start...
      currentActivity = getInstrumentation().waitForMonitorWithTimeout(monitor, 5);
      assertThat(currentActivity, is(notNullValue()));

      // Make sure we are logged in...
      currentView = currentActivity.findViewById(welcome_message);
      assertThat(currentView, is(notNullValue()));
      assertThat(currentView, instanceOf(TextView.class));
      assertThat(((TextView)currentView).getText().toString(), is("Welcome, MyUsername!"));
   }
}

Этот код, очевидно, не очень удобочитаем. На самом деле я извлек его в простую библиотеку с английским API, так что я могу просто сказать такие вещи:

type("myUsername").intoThe(username_field);
click(login_button);

Я проверил примерно 4 действия и удовлетворен тем, что подход работает, хотя, как я уже сказал, кажется, что время от времени возникает проблема, которую я не совсем понял. Мне все еще интересно услышать о любых других способах тестирования различных видов деятельности.

65
ответ дан 24 November 2019 в 10:18
поделиться

Вы не можете сделать это элегантно. Вы можете увидеть, как некоторые люди предлагают создать исключение, но это '

0
ответ дан 24 November 2019 в 10:18
поделиться

Есть еще один способ выполнить несколько действий с помощью класса ActivityInstrumentation. Это нормальный сценарий автоматизации ... Сначала сфокусируйтесь на том, какой объект вы хотите, а затем отправьте ключ Просто как тот пример кода

button.requestFocus();
sendKeys(KeyEvent.KEYCODE_ENTER);

Остается только понять, что каждый вызов API поможет нам.

0
ответ дан 24 November 2019 в 10:18
поделиться

Вы всегда можете использовать Robotium. Он поддерживает тестирование Blackbox, как Selenium, но для Android. Вы найдете его в Robotium.org

8
ответ дан 24 November 2019 в 10:18
поделиться

Обратите внимание на Robotium
«Конструкция тестирования с открытым исходным кодом, созданная для создания автоматического тестирования приложений для андроидов, значительно быстрее и проще, чем то, что возможно с инструментариями Android Испытания вне коробки. '

Домашняя страница: http://www.robotium.org/
Источник: http://github.com/jayway/robotium

Обратите внимание, что проект Robotium поддерживается компанией, которую я работаю в

22
ответ дан 24 November 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: