Подготовка тестов Appium к отправке

Важно!

Прекращение поддержки Центра приложений Visual Studio запланировано на 31 марта 2025 г. Хотя вы можете продолжать использовать Центр приложений Visual Studio до полного прекращения его использования, существует несколько рекомендуемых вариантов, на которые можно перейти.

Узнайте больше о сроках поддержки и альтернативных вариантах.

Действия по подготовке приложения и его набора тестов для отправки зависят от платформы тестирования. Это руководство по подготовке тестов Appium с помощью Java с JUnit для отправки в Центр приложений. Инструкции по разработке тестов Appium см. в документации по Appium.

Обратите внимание на следующие ограничения для поддержки Appium:

Примечание

Поддерживаются контекст WebView, веб-драйвер Chrome и тестирование браузера Chrome с browserName возможностью.

  • Не поддерживается TestNG (поддерживаются только тесты JUnit).
  • Поддержка Android 4.2 или более поздней версии отсутствует. Отсутствует поддержка устаревшего драйвера UIAutomator.
  • Не поддерживается iOS 9.2.1 или более поздней версии. Отсутствует поддержка устаревшего драйвера UIAutomation iOS.
  • Нет поддержки для JUnit @Category attribute. (Вместо этого можно использовать включение и исключение )
  • Версия Maven должна быть не ниже 3.3.9.
  • Текущая версия Appium — 1.22.0. Он регулярно обновляется новыми выпусками.
  • Поддерживается JUnit 4.9–4.12; мы не поддерживаем JUnit 5.
  • Тесты должны быть нацелены только на одно приложение. (MobileCapabilityType.FULL_RESET поддерживается)

Примечание

В некоторых случаях тесты по-прежнему могут работать в Центре приложений при использовании неподдерживаемых средств или функций. Однако эта неподдерживаемая функциональность не будет реализована в будущих обновлениях и может сломаться без предупреждения.

Предварительные требования

Тесты будут выполняться с помощью Maven Surefire, что требует, чтобы тесты соблюдали определенные соглашения об именовании:

"**/Test*.java" - includes all of its subdirectories and all Java filenames that start with "Test".
"**/*Test.java" - includes all of its subdirectories and all Java filenames that end with "Test".
"**/*Tests.java" - includes all of its subdirectories and all Java filenames that end with "Tests".
"**/*TestCase.java" - includes all of its subdirectories and all Java filenames that end with "TestCase".

Перед отправкой в тест Центра приложений убедитесь, что запуск тестов локально на компьютере с помощью Maven работает:

➜  AppiumTest git:(main) ✗ mvn verify
...
Running MainTest
started: SimpleTest (MainTest)
Setting up capabilities
failed
finished
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.728 sec <<< FAILURE!
SimpleTest(MainTest)  Time elapsed: 0.594 sec  <<< ERROR!
...

Если вы не можете запустить тесты с помощью командной строки локально, тесты также не будут работать в тесте Центра приложений.

1. Изменения в системе сборки

Шаг 1. Добавление зависимости

Вам потребуется добавить зависимость для тестовых расширений Appium:

<dependency>
    <groupId>com.microsoft.appcenter</groupId>
    <artifactId>appium-test-extension</artifactId>
    <version>1.6</version>
</dependency>

Этот код обеспечит доступность улучшенных драйверов Android и iOS во время компиляции. Расширенные драйверы предоставляются в основном для включения label этой функции. Дополнительные сведения о функции см. в label разделе Шаг 4.

Шаг 2. Добавление профиля отправки

Скопируйте этот фрагмент в в pom.xml теге <profiles> . Если в вашем pom нет <profiles> раздела, сделайте его. После активации профиль упакует тестовые классы и все зависимости в папку target/upload , готовую к отправке в test.

2. Изменения в тестах

Шаг 1. Добавление импорта

Импортируйте эти пакеты в тестовые классы:

import com.microsoft.appcenter.appium.Factory;
import com.microsoft.appcenter.appium.EnhancedAndroidDriver;
import org.junit.rules.TestWatcher;
import org.junit.Rule;

Шаг 2. Создание экземпляра TestWatcher

Вставьте это объявление в каждый из тестовых классов:

    @Rule
    public TestWatcher watcher = Factory.createWatcher();

Шаг 3. Обновление объявления драйвера

Замените объявлениеAndroidDriver<MobileElement> на EnhancedAndroidDriver<MobileElement> или IOSDriver<MobileElement> на EnhancedIOSDriver<MobileElement>

    private static EnhancedAndroidDriver<MobileElement> driver;

Шаг 4. Обновление экземпляров драйверов

Замените способ создания экземпляра драйвера, чтобы строки в виде:

    driver = new AndroidDriver<MobileElement>(url, capabilities);

... изменены на:

    driver = Factory.createAndroidDriver(url, capabilities);

Использование этих драйверов по-прежнему позволяет выполнять тесты локально без дополнительных изменений, но позволяет "помечать" тестовые шаги при выполнении теста с помощью driver.label("text"). Текст и снимок экрана с устройства будут видны в отчете о тестировании в Центре приложений.

Рекомендуется вызвать driver.label метод @After , который создает снимок экрана конечного состояния приложения. Пример @After метода для теста может выглядеть следующим образом:

    @After
    public void TearDown(){
        driver.label("Stopping App");
        driver.quit();
    }

3. Отправка в тест Центра приложений

Действия по отправке теста:

  1. Создайте команду тестовой отправки в Центре приложений, следуя инструкциям при запуске тестового запуска.

  2. Упакуйте тестовые классы и все зависимости в папку target/upload :

    mvn -DskipTests -P prepare-for-upload package
    
  3. Выполните команду upload:

    appcenter test run appium --app "APP_ID" --devices "DEVICE_SET_ID" --app-path PATH_TO_FILE.apk  --test-series "main" --locale "en_US" --build-dir target/upload
    

4. Устранение неполадок с производительностью

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

Существует три main источника более медленных тестов: повторное подписывание, переустановка и сетевые задачи.

Повторное подписание (в iOS)

Перед установкой на устройстве iOS приложение проходит процесс повторной подписи. Этот процесс необходим, чтобы профиль подготовки соответствовал устройству в облаке. Повторное подписание занимает некоторое время, обычно около 1–2 минут. В редких случаях повторное подписание также приводит к снижению производительности, так как повторно подписанные приложения кэшируются. Длительный процесс будет выполняться только один раз для каждого двоичного файла.

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

переустановка;

В общем облаке устройств важно гарантировать очистку устройств между тестами. Следующим клиентом, использующим устройство, может быть кто-то из другой организации. В центре приложений Test приложение автоматически удаляется после завершения тестового запуска.

Можно опустить MobileCapabilityType.FULL_RESET и задать для параметра значение MobileCapabilityType.NO_RESETtrue , чтобы ускорить выполнение теста. Дополнительные сведения см. в разделе Стратегии сброса .

Сетевые задачи

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